-
-
CRACKME分析(入门级的KEYFILE适合新手)
-
发表于:
2006-3-19 11:56
8071
-
CRACKME分析(入门级的KEYFILE适合新手)
【破文标题】CRACKME分析
【破文作者】逍遥风
【作者邮箱】tc-xb@163.com
【破解工具】WINHEX OD
【破解平台】WINXP
【破解声明】入门级的KEYFILE
------------------------------------------------------------------------
1)先用WINHEX等工具新建KEY文件(任意的)。
字节数少一些这样分析起来比较方便,我字节数定的是4
内容00000000:11 12 13 14
把内容记住,随便起个名字。开始下一步。
2)用OD载入这个CRACKME,CTRL+N找到READFILE,发现有两处在第一处下断。
重新载入程序后,打开刚才的KEY文件,程序中断。
来到这里:
004044E8 /$ 53 PUSH EBX ; 记住这里
004044E9 |. 8BD8 MOV EBX,EAX
004044EB |. 8B4B 04 MOV ECX,DWORD PTR DS:[EBX+4]
004044EE |. 81E9 B1D70000 SUB ECX,0D7B1
004044F4 |. 74 05 JE SHORT echap542.004044FB
004044F6 |. 83E9 02 SUB ECX,2
004044F9 |. 75 29 JNZ SHORT echap542.00404524
004044FB |> 6A 00 PUSH 0
004044FD |. 8BC4 MOV EAX,ESP
004044FF |. 6A 00 PUSH 0 ; /pOverlapped = NULL
00404501 |. 50 PUSH EAX ; |pBytesRead
00404502 |. FF73 08 PUSH DWORD PTR DS:[EBX+8] ; |BytesToRead
00404505 |. 52 PUSH EDX ; |Buffer
00404506 |. FF33 PUSH DWORD PTR DS:[EBX] ; |hFile
00404508 |. E8 2BCCFFFF CALL <JMP.&kernel32.ReadFile> ; \ReadFile
0040450D |. 5A POP EDX
0040450E |. 48 DEC EAX
0040450F |. 75 07 JNZ SHORT echap542.00404518
00404511 |. 3B53 08 CMP EDX,DWORD PTR DS:[EBX+8]
00404514 |. 75 15 JNZ SHORT echap542.0040452B
00404516 |> 5B POP EBX
00404517 |. C3 RETN
现在关键的位置已经找到了,为了好好分析一下它,取消掉刚才的断点,在004044E8处重新下断。
3)下断后重新载入程序,打开文件,中断。
F8一路向下,走到00404517 处的RETN时。
来到了这里。。。
00429DA3 . E8 40A7FDFF CALL echap542.004044E8 ; 开始读KEY文件的内容
00429DA8 . E8 6B88FDFF CALL echap542.00402618
00429DAD . 33C0 XOR EAX,EAX
00429DAF . 8A45 FF MOV AL,BYTE PTR SS:[EBP-1] ; 取KEY里的每个字节的值。
00429DB2 . 03D8 ADD EBX,EAX ; 与前一次取得的内容相加
00429DB4 > 8D85 B0FEFFFF LEA EAX,DWORD PTR SS:[EBP-150]
00429DBA . E8 D5A6FDFF CALL echap542.00404494
00429DBF . E8 5488FDFF CALL echap542.00402618
00429DC4 . 84C0 TEST AL,AL ; 计算完了吗
00429DC6 .^ 74 D2 JE SHORT echap542.00429D9A ; 没有就继续,计算的次数就是字节数
00429DC8 . 8D85 B0FEFFFF LEA EAX,DWORD PTR SS:[EBP-150]
00429DCE . E8 85A6FDFF CALL echap542.00404458
00429DD3 . E8 4088FDFF CALL echap542.00402618
00429DD8 . 81FB A9200000 CMP EBX,20A9 ; 计算的结果与20A9比较
00429DDE . 75 0E JNZ SHORT echap542.00429DEE ; 不相等就失败
00429DE0 . BA 4C9E4200 MOV EDX,echap542.00429E4C ; status: registered - well done
00429DE5 . 8BC6 MOV EAX,ESI
00429DE7 . E8 5CEEFEFF CALL echap542.00418C48
00429DEC . EB 0C JMP SHORT echap542.00429DFA
00429DEE > BA 2C9E4200 MOV EDX,echap542.00429E2C ; status: unregistered
00429DF3 . 8BC6 MOV EAX,ESI
00429DF5 . E8 4EEEFEFF CALL echap542.00418C48
现在结果很明显,KEY文件里的内容加起来的和要等于20A9。
满足条件组和有很多种。
例如:74*48+9=20A9(16进制)
再次用WINHEX新建一个文件。字节应为73。。。。。。(48的十进制为72,在加上一个09。所以为73字节)
内容
00000010:74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74
00000020:74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74
00000030:74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74
00000040:74 74 74 74 74 74 74 74 09
保存后,再打开新的KEY,显示status: registered - well done
----------------------------------------------------------------------
一点心得:
在建立KEY时,字节数少一些可以减少分析的工作量。
KEY内容我选的是11 12 13 14每一次计算都取不一样且有规律的值,这样也可以加快分析的效率。不过具体问题还要具体对待.
过程和结果都很简单。适合和我一样的菜鸟.
----------------------------------------------------------------------
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课