• 标 题:处女作,希望给各位初学者一些帮助^_^ 魔法转换2.0 beta 1 破解 (7千字)
  • 作 者:[pow]
  • 时 间:2001-8-7 19:36:32
  • 链 接:http://bbs.pediy.com

魔法转换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希望能给各位初学者一点帮助,也是对所有有助于我的各位大哥的回报!