Difference between revisions of "Gits2012teaser"
From Fixme.ch
								
												
				 (→Hackquest)  | 
				 (→#2 AL's Revenge)  | 
				||
| Line 2: | Line 2: | ||
== #2 AL's Revenge ==  | == #2 AL's Revenge ==  | ||
| + | |||
| + | * file 49dd327824d5afe9cdf931ea4b13719f.bin says xz compressed file -> xzcat > f  | ||
| + | * file f says LLVM bitcode -> llvm-dis > f.s (only works with LLVM 2.8, not with 3.0)  | ||
| + | * analyze disassembly, extract C representation:  | ||
| + | |||
| + | <pre>  | ||
| + | int  | ||
| + | VerifySerial(uint64_t name, uint64_t serial)  | ||
| + | {  | ||
| + | 	uint64_t a = 0x8000000000000000LL;  | ||
| + |         uint64_t b = 0xa348fccd93aea5a7LL;  | ||
| + | 	uint64_t result = 0;  | ||
| + | |||
| + | 	/* high order bit set? */  | ||
| + | 	if (name & a)  | ||
| + | 		a ^= b;  | ||
| + | |||
| + | 	if (serial & a)  | ||
| + | 		serial ^= b;  | ||
| + | |||
| + | 	while (serial != 0) {  | ||
| + | 		if (serial & 1)  | ||
| + | 			result ^= name;  | ||
| + | |||
| + | 		serial >>= 1;  | ||
| + | 		name <<= 1;  | ||
| + | |||
| + | 		if (name & a)  | ||
| + | 			name ^= b;  | ||
| + | 	}  | ||
| + | |||
| + | 	return (result == 1);  | ||
| + | }  | ||
| + | </pre>  | ||
== #3 Hackquest ==  | == #3 Hackquest ==  | ||
Revision as of 13:39, 8 January 2012
#1 TelAviv
#2 AL's Revenge
- file 49dd327824d5afe9cdf931ea4b13719f.bin says xz compressed file -> xzcat > f
 - file f says LLVM bitcode -> llvm-dis > f.s (only works with LLVM 2.8, not with 3.0)
 - analyze disassembly, extract C representation:
 
int
VerifySerial(uint64_t name, uint64_t serial)
{
	uint64_t a = 0x8000000000000000LL;
        uint64_t b = 0xa348fccd93aea5a7LL;
	uint64_t result = 0;
	/* high order bit set? */
	if (name & a)
		a ^= b;
	if (serial & a)
		serial ^= b;
	while (serial != 0) {
		if (serial & 1)
			result ^= name;
		serial >>= 1;
		name <<= 1;
		if (name & a)
			name ^= b;
	}
	return (result == 1);
}