由于昨晚朋友过生日,今天睡过头了!:) 才迟迟贴出《duelist crackme 3 破解》 (4千字)
duelist crackme 3 破解
(希望转载的时候保持完整)
作者 丁丁虾 ddxia/[CCG]
E_mail ddxia@263.net (如果Crackme教学文章中有错,请来信:))
Web http://go18.163.com/~ddxia
目标 duelist crackme 3
目标URL http:\\go.163.com\~ddxia\crackme\DueList\Due-cm3.zip
工具 SoftIce4.01 for NT ExeScope
winapi.hlp
这个Crackme就做得比较COOL,不信,你运行起来看一看,有两行18个CheckBox,
你要Crack it ,必须要选中其中的几个CheckBox,你可以试一试说不定,好运气,一试就对了!
呵呵~~~ 。在主界面中还有一句话说你一定要使用资源编辑器。(这句话也是让我百思不得其解N
分钟,随着深入代码,然后就会慢慢的明白了,也非常有趣)
bpx messagebox
F11 回到程序代码中
在SoftIce中截下如下代码(来!我们"烟酒" "烟酒" "烟酒")
:u 401117 L9a
001B:00401117 33F6
XOR ESI,ESI
001B:00401119 33D2
XOR EDX,EDX
001B:0040111B 89355E214000 MOV
[0040215E],ESI
001B:00401121 893562214000 MOV
[00402162],ESI
001B:00401127 0FBE8EFE204000 MOVSX
ECX,BYTE PTR [ESI+004020FE]
^^^^^^^^^^^^^^^^---->4020FE中存放着CheckBox的ID号
001B:0040112E 83F94D
CMP ECX,4D
^^^^^^^^^^^^^^^^---->判断是否到最后一个CheckBox
001B:00401131 742F
JZ 00401162
001B:00401133 890D5E214000 MOV
[0040215E],ECX
001B:00401139 51
PUSH ECX
001B:0040113A FF7508
PUSH DWORD PTR [EBP+08]
001B:0040113D E8D0010000 CALL
USER32!IsDlgButtonChecked
^^^^^^^^^^^^^^^^---->判断CheckBox是否被选中
ECX中存放CheckBox的ID号
001B:00401142 46
INC ESI
001B:00401143 83F800
CMP EAX,00
001B:00401146 74DF
JZ 00401127
^^^^^^^^^^^^^^^^---->如果没有被选中就跳到401127
检查下一个CheckBox
001B:00401148 A15E214000 MOV
EAX,[0040215E]
^^^^^^^^^^^^^^^^---->把当前的ID号放入EAX
001B:0040114D 0FBE8EFE204000 MOVSX
ECX,BYTE PTR [ESI+004020FE]
^^^^^^^^^^^^^^^^---->把下一个的ID号放入EAX
001B:00401154 0FAFC1
IMUL EAX,ECX
001B:00401157 0FAFC6
IMUL EAX,ESI
001B:0040115A 010562214000 ADD
[00402162],EAX
^^^^^^^^^^^^^^^^^^^^^^^^---->>在00402162进行累加
001B:00401160 EBC5
JMP 00401127
001B:00401162 A162214000 MOV
EAX,[00402162]
001B:00401167 6BC04D
IMUL EAX,EAX,4D
^^^^^^^^^^^^^^^^^^^^^^^--->累加的值乘于4D放入EAX
001B:0040116A 3D6654F300 CMP
EAX,00F35466
001B:0040116F 7520
JNZ 00401191
^^^^^^^^^^^^^^^^^^^^^^^--->比较EAX的最后的值是否
为00F35466
001B:00401171 6800200000 PUSH
00002000
001B:00401176 6801204000 PUSH
00402001
001B:0040117B 6817204000 PUSH
00402017
001B:00401180 6A00
PUSH 00
001B:00401182 E855010000 CALL
USER32!MessageBoxA
001B:00401187 B801000000 MOV
EAX,00000001
001B:0040118C E969FFFFFF JMP
004010FA
001B:00401191 6800200000 PUSH
00002000
001B:00401196 6801204000 PUSH
00402001
001B:0040119B 6868204000 PUSH
00402068
001B:004011A0 6A00
PUSH 00
001B:004011A2 E835010000 CALL
USER32!MessageBoxA
001B:004011A7 B800000000 MOV
EAX,00000000
001B:004011AC E949FFFFFF JMP
004010FA
相信各位已经把上面的算法弄清了吧!接下来我们来凑数00F35466!
1、我们先把4020FE的数据给弄到手。
:d 4020fe 40210e
0023:004020FE 16 49 5E 15 27 26 21 25-1D 59 53 37 31 48 5D 0C .I^.'&!%.YS71H].
0023:0040210E 61 52 4D 00 00 00 00 00-00 00 00 00 00 00 00 00 aRM.............
0023:0040211E 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0023:0040212E 03 40 00 00 AB 10 40 00-00 00 00 00 00 00 00 00 .@....@.........
0023:0040213E 00 00 40 00 8E 1A 73 00-08 00 01 00 00 00 00 00 ..@...s.........
0023:0040214E 00 00 00 00 00 00 00 00-00 00 00 00 00 00 40 00 ..............@.
0023:0040215E 5E 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ^...............
0023:0040216E 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
2、计算出正确的ID号。
缺一段程序!!不知道那位大虾愿意赐教 :)
你得到了ID号后,并没有大功告成哦!!^_^这些ID号的排列,并不是按界面那样
进行排列的!这时就会明白为什么要用资源编辑器,查看那些CheckBox的ID号,再进行正确
的选择,这样就可以说收工了!(其实在readme.txt中有提示:))
13:46
