downloadbrowsecyclops's NTS-Crackme6

Download NTS-Crackme6.zip, 8 kb (password: crackmes.de)
Browse contents of NTS-Crackme6.zip

NTS(Newbie Cracking Series)-Crackme6

Regards,
Cyclo

Difficulty: 2 - Needs a little brain (or luck)
Platform: Windows 2000/XP only
Language: C/C++

Published: 23. Dec, 2006
Downloads: 815

Rating

Votes: 3
Crackme is good.

Rate this crackme:

Send a message to cyclops »

View profile of cyclops »

Solutions

Solution by hound, published 18. jan, 2007; download (36 kb), password: crackmes.de or browse.

hound has rated this crackme as awesome.

Submit your solution »

Discussion and comments

boof
08. Jan 2007
i need some help with this crack me..so if anyone wanna try to help me please PM me..thank you guys
hound
09. Jan 2007
I'l write up all my working once Ive finished. Im kind of stuck on some little bits but I think I should get it knocked out at some stage soon :<.
Anyway Im loving all these crackmes so far! Thanks very much cyclops!
hound
09. Jan 2007
Hmm ok Ive re-written the algo that generates the 1st bytes from the 2nd bytes, but Cyclops I can't get this to work due to the movsx instruction when the program checks! Is this intentional?

0040145C MOV EAX,EBX
0040145E CDQ
0040145F IDIV ESI
00401461 MOVSX ECX,BYTE PTR DS:[EDX+EBP]
00401465 XOR EDX,EDX
00401467 MOV DL,BYTE PTR SS:[ESP+EBX+10]
0040146B CMP EDX,ECX
0040146D JNZ SHORT Crackme6.00401475
0040146F INC EBX
00401470 CMP EBX,1E
00401473 JL SHORT Crackme6.0040145C

The problem is that, any byte generated from the algo that is greater than 7x, the movsx causes this above comparison to fail :<. If it was MOVSZ, the comparison would be fine.

I originally overcame this by finding an input that generated only bytes less than 7x. However, as the input string is limited to only 1E bytes long, but the generated bytes is less (for every 4 input, 3 output bytes), the comparison actually runs PAST the calculated bytes (Cmp EBX, 1E).

Please get back to me on this.

Cheers.
hound
09. Jan 2007
Sorry for the triple post! !Anyway I think the problem is the MOVSX instruction, and the final statement (CMP EBX, 1E). As the movsx 'corrupts' input, and the bottom statement actually checks past the information loaded from Key.cyc.
cyclops
Moderator
09. Jan 2007
Itz a little tricky. Experianced crackers can figure out the algo easily(from the 4 bytes to 3 byte ). Gud luck!
hound
09. Jan 2007
Ive figured out the algo, and re-written in C and it matches up fine. The problem is that the comparing function reads further past the algo it generates......
hound
09. Jan 2007
Oh hang I think Ive figured it out now.....Didn' realise that the gets function read 1F bytes. Thought it read 1E......
boof
09. Jan 2007
baaaaaaaaah ! i cant figure it out i need help
hound
09. Jan 2007
Yay! I finally finished..... man that was a mission. Ill post up my solution later today with all my working.
boof
10. Jan 2007
i must be missing something cuz i cant figure it out :(
Zaphod
13. Jan 2007
Got it! Finally! And I think it's more than a little tricky. I have a working keyfile, but I don't think I can make a keyfile-generator...
hound
14. Jan 2007
I wrote up all my working, and the source to my keyfilegen is in my solution. Just have to wait till it is posted.
Zaphod
14. Jan 2007
As far as I can see there must be an infinite number of correct keyfiles, so how can you make a generator that eventually lists them all?
cyclops
Moderator
14. Jan 2007
Think like a keygen... For each name therz a key.
Zaphod
14. Jan 2007
But in CrackMe6 you don't enter a name. So the valid keyfiles are valid for all names - and there are LOTS of valid keyfiles...
hound
14. Jan 2007
You know how the algo makes a hash from the 2nd part of the keyfile? Just make a random string generating function to make the 2nd part of the keyfile, then copy the algo to make the first part. You then have to check it wraps around correctly. You then have the keyfile.
Zaphod
14. Jan 2007
Yes, that's how I made the keyfile I have - and I could make a lot of keyfiles that way. Random keyfiles among the infinite number there are.
But I have probably just misunderstood what cyclops meant when he asked for a keyfilegen...:)
hound
14. Jan 2007
Its just a generator that generates a random keyfile for each user.
cyclops
Moderator
15. Jan 2007
So u guyz are generating the second part first? Try this way, read a string frm user-first part of keyfile.......then generate second part of keyfile. For that u hav to reverse the algo.itz not a hash, itz a famous encoding.(4 byte to 3 byte..)
hound
15. Jan 2007
Hmm, thought of doing that but sounded like too much work ;). Also, wouldn't reversing the algo be going from 3 byte to 4 byte?

Anyway, Im interesting in seeing other approaches and getting feedback once the solutions come up :D.
boof
15. Jan 2007
is the encoding base64?
cyclops
Moderator
15. Jan 2007
Yeah....Base64....Well done.
HMX0101
15. Jan 2007
Easy... i didn't see it read two values from keyfile... that was my fault :)

Anyway, nice one :)
boof
17. Jan 2007
hehe i'm so retarted :)
finally got it figured out hehehe
kilobyte.asm
29. Jun 2009
hmm...i have the same problem as hound initially had, the comparison runs past the calculated bytes. Now reading his solution to that part, i still don't get it, i understand that it wraps round but...i guess i'm going to have to step through it more or ask some one for some direction.
kilobyte.asm
05. Jul 2009
right got it! hash has to be 1E length, so how do we get that? I'll leave you to figure that out ;P

You may leave your comment, thoughts and discuss this crackme with other reversers here.
Acting childish will not be tolerated.
HTML and such will be left as-is, so don't try.