duelist crackme 1 破解 (希望转载的时候保持完整)
作者 丁丁虾 ddxia/[CCG]
目标 duelist crackme 1
目标URL http:\\go.163.com\~ddxia\crackme\DueList\Due-cm1.zip
工具 SoftIce4.01 for NT
乐趣 可以直接修改程序代码,得到序列号(懒人方法)^_^
首先看看它的readme.txt(建议在Crack Crackme前,读一读,会有些帮助的),是 Duelist写的第一个纯ASM的Crackme。
运行,会发现它需要一个序列号,别忙下中断,看看是那一种出错信息,随便填下123,然后按check按钮,会弹出一个出错对话框!然后按OK返回主程序。
对症下药啦!:)
Ctrl+D 激活SICE
BPX MESSAGEBOXA
Ctrl+D 返回程序。
再按check按钮,就会拦截下来,跟着按F11跳出MESSAGEBOXA的系统代码(有点象TRW的Pmoudle),光带会停在001B:00401193
001B:0040117D 6800200000 PUSH
00002000
001B:00401182 6801204000 PUSH
00402001
001B:00401187 6863204000 PUSH
00402063
001B:0040118C 6A00
PUSH 00
001B:0040118E E85C010000 CALL
USER32!MessageBoxA
001B:00401193 E95CFFFFFF JMP
004010F4
^^^^^^^^^^^^^^^^^^^^^^^^^^^---->光标会停在此处
有了结果,于是我们很想去知道原因是为什么?对吗?所以我们要回顾一下历史,(是啊!在代码的历史中,永远都不会过期,可以追寻,可以重新来过,也可以重头来过,但在现实中,历史永远是历史,现在的我们只能是回忆、留恋,如果想在你的历史长河里留下精彩瞬间,请把握好今天吧!!)
简单注册方式:得到代码------》进行变化-----》然后进行比较----》对否?
我们可以看到如下的代码:
001B:004010FB 6A24
PUSH 24
001B:004010FD 68F7204000
PUSH 004020F7
^^^^^^^^^^^^^^^^^^^^^^^^----->GetDlgItemTextA是存放你输入注册码的地方
001B:00401102 6A01
PUSH 01
001B:00401104 FF7508
PUSH DWORD PTR [EBP+08]
001B:00401107 E855020000
CALL USER32!GetDlgItemTextA
^^^^^^^^^^^^^^^^^^^^^^^^----->得到注册码
001B:0040110C 33C0
XOR EAX,EAX
001B:0040110E 80B8F720400000 CMP
BYTE PTR [EAX+004020F7],00
^^^^^^^^^^^^^^^^^^^^^^^^----->比较是否输入?
001B:00401115 7418
JZ
0040112F
001B:00401117 80B0F720400043 XOR
BYTE PTR [EAX+004020F7],43
001B:0040111E 80B0F72040001E XOR
BYTE PTR [EAX+004020F7],1E
001B:00401125 80B0F720400055 XOR
BYTE PTR [EAX+004020F7],55
^^^^^^^^^^^^^^^^^^^^^^^^----->进行注册码变化
001B:0040112C 40
INC EAX
001B:0040112D E2DF
LOOP 0040110E
001B:0040112F 83F800
CMP EAX,00
001B:00401132 7518
JNZ 0040114C
^^^^^^^^^^^^^^^^^^^^^^^^----->转化完没有??
001B:00401134 6800200000 PUSH
00002000
001B:00401139 6801204000 PUSH
00402001
001B:0040113E 689D204000 PUSH
0040209D
001B:00401143 6A00
PUSH 00
001B:00401145 E8A5010000 CALL
USER32!MessageBoxA
001B:0040114A EBA8
JMP 004010F4
001B:0040114C 6A24
PUSH 24
001B:0040114E 68D3204000 PUSH
004020D3
001B:00401153 68F7204000 PUSH
004020F7
001B:00401158 E864000000 CALL
004011C1
^^^^^^^^^^^^^^^^^^^^^^^^----->进行比较的子程序
001B:0040115D 83F800
CMP EAX,00
^^^^^^^^^^^^^^^^^^^^^^^^----->是否正确??
001B:00401160 741B
JZ 0040117D
(JUMP )
001B:00401162 6800200000 PUSH
00002000
001B:00401167 6801204000 PUSH
00402001
001B:0040116C 6817204000 PUSH
00402017
001B:00401171 6A00
PUSH 00
001B:00401173 E877010000 CALL
USER32!MessageBoxA
我们可以注意到两个地址
一个是 004020D3 -----存放着进过变化的注册码
另一个是004020F7 -----用输入的注册码
:d 4020d3 4020f5
0023:004020D3 7B 61 65 78 64 6D 26 6B-7A 69 6B 63 65 6D 26 3C {aexdm&kzikcem&<
0023:004020E3 26 66 6D 7F 6A 61 6D 7B-26 6A 71 26 6C 7D 6D 64 &fmjam{&jq&l}md
0023:004020F3 61 7B 7C 00 31 32 33 00-00 00 00 00 00 00 00 00 a{|.123.........
程序进行变化的代码仅仅是XOR,一种非常简单加密方法,有BUG呵呵~~~~,于是用SICE修改代码为如下:
001B:0040110E 80B8D320400000 CMP
BYTE PTR [EAX+004020D3],00
001B:00401115 7418
JZ
0040112F
001B:00401117 80B0D320400043 XOR
BYTE PTR [EAX+004020D3],43
001B:0040111E 80B0D32040001E XOR
BYTE PTR [EAX+004020D3],1E
001B:00401125 80B0D320400055 XOR
BYTE PTR [EAX+004020D3],55
仅仅是把这四句中的004020F7换为004020D3,即修改F7为D3,然后让程序再运行一遍,呵呵~~程序会自动显示正确注册码!赶紧抄下来!
0023:004020D3 73 69 6D 70 6C 65 2E 63-72 61 63 6B 6D 65 2E 34 simple.crackme.4
0023:004020E3 2E 6E 65 77 62 69 65 73-2E 62 79 2E 64 75 65 6C .newbies.by.duel
0023:004020F3 69 73 74 00 31 32 33 00-00 00 00 00 00 00 00 00 ist.123.........
退出程序,重新运行,输入simple.crackme.4.newbies.by.dueist,OK
收工 :D
总结:在Crack中,可以发挥自己的主观能动性(哗!上青少年修养课啊!我倒.........) 发挥想象力,不需要居伲于哪一种方法,尽管去发挥。Crack的精华之处在于不断的探索和创新!
时间:2000.10.16 19:45
提议:该回家,爱护一下自己的胃了 :)
- 标 题:duelist crackme 1 破解 (5千字)
- 作 者:丁丁虾
- 时 间:2000-10-16 19:50:47
- 链 接:http://bbs.pediy.com