魔法转换2.0 beta 1
注册后会在win.ini上写下注册码,以用于每次启动效验:
[magct]
name=pow
code=109F804632
……………………………………………………………………………………………
用typ3看它用了什么壳,发现其使用了Aspack加壳,用unAspack脱之~
脱壳后用w32dsm89反编译,查找字符串,发现又3条表明注册成功。由于注册码错误后没有提示,只好蒙着来啦。一条是“,恭喜你成功注册!”一条是“我自豪,我已经注册!”另一条是“以注册!”从字面上看第一条可能性最大(可惜pow开始没看到,绕了个大圈子)由于pow的马虎,所以把其他两条的功能也给了解了~第二条是注册后显示在“注册”窗口上的,第三条是注册后显示在“关于”菜单上的,可以通过下断点验证。
双击“,恭喜你成功注册!”这个字符串,显示如下内容:
:00561245 837DFC00 cmp
dword ptr [ebp-04], 00000000 《---判断是否有用户明
:00561249 7518
jne 00561263
:0056124B 6A30
push 00000030
:0056124D 68B8135600 push 005613B8
* Possible StringData Ref from Code Obj ->"请输入姓名!"
|
:00561252 68C0135600 push 005613C0
:00561257 6A00
push 00000000
* Reference To: user32.MessageBoxA, Ord:0000h
|
:00561259 E80269EAFF Call 00407B60
:0056125E E908010000 jmp 0056136B
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00561249(C)
|
:00561263 8D55F8
lea edx, dword ptr [ebp-08]
:00561266 8B83E8020000 mov eax, dword
ptr [ebx+000002E8]
:0056126C E8FB78EDFF call 00438B6C
:00561271 8B45F8
mov eax, dword ptr [ebp-08]
:00561274 50
push eax 《---假码!
:00561275 8D55F0
lea edx, dword ptr [ebp-10]
:00561278 8B83E4020000 mov eax, dword
ptr [ebx+000002E4]
:0056127E E8E978EDFF call 00438B6C
:00561283 8B45F0
mov eax, dword ptr [ebp-10]
:00561286 8D55F4
lea edx, dword ptr [ebp-0C]
:00561289 E84E4CFFFF call 00555EDC
:0056128E 8B55F4
mov edx, dword ptr [ebp-0C] 《---真码!
:00561291 58
pop eax
:00561292 E8052FEAFF call 0040419C
《---对比真假码的call,关键!
:00561297 0F85CE000000 jne 0056136B
《---一条就死!
:0056129D 8D45EC
lea eax, dword ptr [ebp-14]
:005612A0 E8EF48FFFF call 00555B94
:005612A5 8D45EC
lea eax, dword ptr [ebp-14]
* Possible StringData Ref from Code Obj ->"\win.ini" 《---隐约感到注册码会放到win.ini中
|
:005612A8 BAD8135600 mov edx,
005613D8
:005612AD E8E22DEAFF call 00404094
:005612B2 8B4DEC
mov ecx, dword ptr [ebp-14]
:005612B5 B201
mov dl, 01
* Possible StringData Ref from Code Obj ->"<G"
|
:005612B7 A19C344700 mov eax,
dword ptr [0047349C]
:005612BC E82B23F1FF call 004735EC
:005612C1 A3E4675700 mov dword
ptr [005767E4], eax
:005612C6 8D55E8
lea edx, dword ptr [ebp-18]
:005612C9 8B83E4020000 mov eax, dword
ptr [ebx+000002E4]
:005612CF E89878EDFF call 00438B6C
:005612D4 8B45E8
mov eax, dword ptr [ebp-18]
:005612D7 50
push eax
* Possible StringData Ref from Code Obj ->"name"
|
:005612D8 B9EC135600 mov ecx,
005613EC
* Possible StringData Ref from Code Obj ->"magct"
|
:005612DD BAFC135600 mov edx,
005613FC
:005612E2 A1E4675700 mov eax,
dword ptr [005767E4]
:005612E7 8B30
mov esi, dword ptr [eax]
:005612E9 FF5604
call [esi+04]
:005612EC 8D55E4
lea edx, dword ptr [ebp-1C]
:005612EF 8B83E8020000 mov eax, dword
ptr [ebx+000002E8]
:005612F5 E87278EDFF call 00438B6C
:005612FA 8B45E4
mov eax, dword ptr [ebp-1C]
:005612FD 50
push eax
* Possible StringData Ref from Code Obj ->"code"
|
:005612FE B90C145600 mov ecx,
0056140C
* Possible StringData Ref from Code Obj ->"magct"
|
:00561303 BAFC135600 mov edx,
005613FC
:00561308 A1E4675700 mov eax,
dword ptr [005767E4]
:0056130D 8B30
mov esi, dword ptr [eax]
:0056130F FF5604
call [esi+04]
:00561312 A1E4675700 mov eax,
dword ptr [005767E4]
:00561317 E8781DEAFF call 00403094
* Possible StringData Ref from Code Obj ->"关闭"
|
:0056131C BA1C145600 mov edx,
0056141C
:00561321 8B83F4020000 mov eax, dword
ptr [ebx+000002F4]
:00561327 E87078EDFF call 00438B9C
:0056132C 33D2
xor edx, edx
:0056132E 8B83F0020000 mov eax, dword
ptr [ebx+000002F0]
:00561334 8B08
mov ecx, dword ptr [eax]
:00561336 FF515C
call [ecx+5C]
:00561339 6A40
push 00000040
* Possible StringData Ref from Code Obj ->"魔法转换"
|
:0056133B 6824145600 push 00561424
:00561340 8D55E0
lea edx, dword ptr [ebp-20]
:00561343 8B83E4020000 mov eax, dword
ptr [ebx+000002E4]
:00561349 E81E78EDFF call 00438B6C
:0056134E 8D45E0
lea eax, dword ptr [ebp-20]
* Possible StringData Ref from Code Obj ->",恭喜你成功注册!"
|
:00561351 BA38145600 mov edx,
00561438 《---双击后停在这里
:00561356 E8392DEAFF call 00404094
:0056135B 8B45E0
mov eax, dword ptr [ebp-20]
:0056135E E8ED2EEAFF call 00404250
:00561363 50
push eax
:00561364 6A00
push 00000000
双击后看到注册成功的call,于是向上看,发现:00561297处如果跳转就会跳过注册成功窗口,ok问题就在它,在看看上面,非常经典的判断排列!ok!静态分析基本结束,开始动手拦截吧!
进入trw2000,下断点bpx 00561245,为什么要在这里下断点?一是可以验证关于用户名的猜测,二是可以步步为营,不会落掉什么重要的启示。一步一步的执行,到00561249处如果你有兴趣可以试试r
fl z,你可以看到果然上面这个那个比较是看有无注册码的^_^,在往下走,到00561274处下d eax可以看到你输入的假注册码,在往下走,到0056128e就是把真的注册码放到edx中了,下d
edx即可看到真的注册码。到00561291你又可以看到假码了。00561292这个call是关键,下面条与不条都要看它的,跟进后可以看到真假注册码的对比(又一次可以看到真码),把注册码抄下来就可以收工了^_^
可以看到在005612A8上面的那句,pow第一感觉就是它把注册码放到win.ini中,然后每次启动都对比。这个软件给我的感觉是代码效率太低,很慢(166mmx,64m)。虽然我很讨厌这样的做法,但我还是很同情作者,他也真是不容易,做个软件比破解要难多了……
以上是pow的第一篇像样的破解记录(以前也有,不过都是写给自己看的,估计新手看不懂,老鸟不屑看),今天遇到了这个曾经让我为难的软件(不久前噢,也就2个月,pow很菜的^_^),有了“灭其而后快”的意思,但想到我的这点小伎俩都是从这个论坛或各位大哥前辈的教程上学来的,觉得自己也有义务把这个传统延续下去,于是就有了这篇文章,pow希望能给各位初学者一点帮助,也是对所有有助于我的各位大哥的回报!
- 标 题:处女作,希望给各位初学者一些帮助^_^ 魔法转换2.0 beta 1 破解 (7千字)
- 作 者:[pow]
- 时 间:2001-8-7 19:36:32
- 链 接:http://bbs.pediy.com