• 标 题:风之纹章(Proc)破解实战 我的第一篇水文 (9千字)
  • 作 者:wakeme
  • 时 间:2002-3-12 21:47:16
  • 链 接:http://bbs.pediy.com

风之纹章(Proc)破解实战

Write by wakeme


软件名称:风之纹章(Proc)
版    本:V2.02 Build 275 原文件大小 281K,脱壳后700K左右。
简    介:
          一个比较好用的小工具,可以用来杀进程、监控程序、定时备份等,驻留在任务栏上。

作    者:Wakeme
等    级:中级 (自己定的 :))
破解日期:2002年3月11日
破解工具:Trw2000 1.22 WDSM 89。3  冲击波2000  、PEid.
破解目的:学习追注册码

说  明:

        本文目的在与学习破解技术,所有内容是在我的软件破解记录上整理出来的,只作技术交流。如若有纰漏,请各位多指教!


1、运行PEid ,将Proc.exe 拖到 PEid界面上 ,显示出 ASPack 2.000 -> Alexey Solodovnikov压缩。

2、启用冲击波,点击Track ,然后运行Proc.exe,显示入口 0048B900 。

3、启动trw 2000 ,通过Browse 找到文件,load !
  中断后下命令bpx 48b900
              g
    会在程序的入口处停下来,然后下命令 pedump c:\crack\procdump.exe
    就会生成可执行文件,经测试用makepe 命令也可以,另外用Softice 中的jmp eip ,然后用prodump等工具也可以。Trw2000中生成的可以直接运行,用prodump抓的需要修复PE文件头。

4、执行软件,填入任意注册码,报告“注册失败”,在看论坛精华的时候总发现别人喜欢暴力破解软件,其实在我这段时间的经验中,软件暴力破解的成功率很低,许多软件暴力破解后,功能也不完全,可见软件开发者的加密意识提高了。

5、拷贝备份后,用WDSM进行反汇编,在字符串参考中,找到“注册失败”和“注册成功”的提示。双击“注册成功”和“注册失败”分别到:


:0048AF28 8B45F8                  mov eax, dword ptr [ebp-08]
:0048AF2B 8D55FC                  lea edx, dword ptr [ebp-04]
:0048AF2E E831D5F7FF              call 00408464
:0048AF33 8B45FC                  mov eax, dword ptr [ebp-04]

* Possible StringData Ref from Code Obj ->"ph11.126.com"
                                  |
:0048AF36 BA48B04800              mov edx, 0048B048
:0048AF3B E8B88FF7FF              call 00403EF8
:0048AF40 7575                    jne 0048AFB7            跳到注册失败的窗口 !!!
:0048AF42 8D55F0                  lea edx, dword ptr [ebp-10]
:0048AF45 8B83D0040000            mov eax, dword ptr [ebx+000004D0]
:0048AF4B E8845CFAFF              call 00430BD4
:0048AF50 8B45F0                  mov eax, dword ptr [ebp-10]
:0048AF53 8D55F4                  lea edx, dword ptr [ebp-0C]
:0048AF56 E809D5F7FF              call 00408464
:0048AF5B 8B45F4                  mov eax, dword ptr [ebp-0C]

* Possible StringData Ref from Code Obj ->"1111-1111-1111-1111"    我最初理解为注册码的格式!
                                  |
:0048AF5E BA60B04800              mov edx, 0048B060
:0048AF63 E8908FF7FF              call 00403EF8
:0048AF68 754D                    jne 0048AFB7      跳到注册失败的窗口 !!!

* Possible StringData Ref from Code Obj ->"进程管理小工具---ph11.126.com"
                                  |
:0048AF6A BA7CB04800              mov edx, 0048B07C
:0048AF6F 8BC3                    mov eax, ebx
:0048AF71 E88E5CFAFF              call 00430C04
:0048AF76 33D2                    xor edx, edx
:0048AF78 8B83CC040000            mov eax, dword ptr [ebx+000004CC]
:0048AF7E 8B08                    mov ecx, dword ptr [eax]
:0048AF80 FF515C                  call [ecx+5C]
:0048AF83 33D2                    xor edx, edx
:0048AF85 8B83D0040000            mov eax, dword ptr [ebx+000004D0]
:0048AF8B 8B08                    mov ecx, dword ptr [eax]
:0048AF8D FF515C                  call [ecx+5C]
:0048AF90 6A40                    push 00000040

* Possible StringData Ref from Code Obj ->"恭喜您"
                                  |
:0048AF92 B99CB04800              mov ecx, 0048B09C

* Possible StringData Ref from Code Obj ->"注册成功!"        注意的地方 !!!
                                  |
:0048AF97 BAA4B04800              mov edx, 0048B0A4
:0048AF9C A14CDA4800              mov eax, dword ptr [0048DA4C]
:0048AFA1 8B00                    mov eax, dword ptr [eax]
:0048AFA3 E8F440FCFF              call 0044F09C
:0048AFA8 33D2                    xor edx, edx
:0048AFAA 8B83D4040000            mov eax, dword ptr [ebx+000004D4]
:0048AFB0 8B08                    mov ecx, dword ptr [eax]
:0048AFB2 FF515C                  call [ecx+5C]
:0048AFB5 EB4C                    jmp 0048B003

  * 被一个无条件跳转或条件跳转引用, 位置在地址:            注意的地方 !!!
|:0048AF40(C), :0048AF68(C)                      这里是哪里 ,有两个地方会跳到这里 !!!
|

* Possible StringData Ref from Code Obj ->"进程管理小工具---未注册"
                                  |
:0048AFB7 BAB8B04800              mov edx, 0048B0B8
:0048AFBC 8BC3                    mov eax, ebx
:0048AFBE E8415CFAFF              call 00430C04
:0048AFC3 B201                    mov dl, 01
:0048AFC5 8B83CC040000            mov eax, dword ptr [ebx+000004CC]
:0048AFCB 8B08                    mov ecx, dword ptr [eax]
:0048AFCD FF515C                  call [ecx+5C]
:0048AFD0 B201                    mov dl, 01
:0048AFD2 8B83D0040000            mov eax, dword ptr [ebx+000004D0]
:0048AFD8 8B08                    mov ecx, dword ptr [eax]
:0048AFDA FF515C                  call [ecx+5C]
:0048AFDD 6A10                    push 00000010

* Possible StringData Ref from Code Obj ->"错误"
                                  |
:0048AFDF B9D0B04800              mov ecx, 0048B0D0

* Possible StringData Ref from Code Obj ->"注册失败!"      注意的地方 !!!
                                  |
:0048AFE4 BAD8B04800              mov edx, 0048B0D8
:0048AFE9 A14CDA4800              mov eax, dword ptr [0048DA4C]
:0048AFEE 8B00                    mov eax, dword ptr [eax]
:0048AFF0 E8A740FCFF              call 0044F09C
:0048AFF5 8B83CC040000            mov eax, dword ptr [ebx+000004CC]
:0048AFFB 8B10                    mov edx, dword ptr [eax]
:0048AFFD FF92B0000000            call dword ptr [edx+000000B0]

6、下面我们就用TRW2000来追注册码:
  在软件的设置-注册中添入公司名:wakeme  序列号:1234-1234-1234-1234(格式来源与上面代码,其实别的格式、比如12345678也可以)
  在TRW2000中下断点bpx 40af36 (第一个要跳到未注册的CALL前面)
  软件中点注册、被拦截F10后

D edx 可以看到真正的注册码,我们F8跟进CALL

:00403EF8 53                      push ebx
:00403EF9 56                      push esi
:00403EFA 57                      push edi
:00403EFB 89C6                    mov esi, eax
:00403EFD 89D7                    mov edi, edx
:00403EFF 39D0                    cmp eax, edx  上面将我输入的名字和序列号装入,这里关键比较,用D命令可以看到真正的注册名
:00403F01 0F848F000000            je 00403F96
:00403F07 85F6                    test esi, esi
:00403F09 7468                    je 00403F73
:00403F0B 85FF                    test edi, edi
:00403F0D 746B                    je 00403F7A
:00403F0F 8B46FC                  mov eax, dword ptr [esi-04]
:00403F12 8B57FC                  mov edx, dword ptr [edi-04]
:00403F15 29D0                    sub eax, edx
:00403F17 7702                    ja 00403F1B
:00403F19 01C2                    add edx, eax

CALL 返回后执行到这里:
:0048AF3B E8B88FF7FF              call 00403EF8
:0048AF40 7575                    jne 0048AFB7            跳到注册失败的窗口 !!!
:0048AF42 8D55F0                  lea edx, dword ptr [ebp-10]
:0048AF45 8B83D0040000            mov eax, dword ptr [ebx+000004D0]
在JNE 0048AFB7,我们下r fl z 让程序继续走到第二个比较的地方
:0048AF5E BA60B04800              mov edx, 0048B060
:0048AF63 E8908FF7FF              call 00403EF8
:0048AF68 754D                    jne 0048AFB7      跳到注册失败的窗口 !!!

在上面D EDX 可以看到正确注册码,我们F8跟入CALL 看看都有什么

:00403EF8 53                      push ebx
:00403EF9 56                      push esi
:00403EFA 57                      push edi
:00403EFB 89C6                    mov esi, eax
:00403EFD 89D7                    mov edi, edx
:00403EFF 39D0                    cmp eax, edx上面将我输入的名字和序列号装入,这里关键比较,用D命令可以看到真正的注册号码

:00403F01 0F848F000000            je 00403F96
:00403F07 85F6                    test esi, esi
:00403F09 7468                    je 00403F73
:00403F0B 85FF                    test edi, edi
:00403F0D 746B                    je 00403F7A
:00403F0F 8B46FC                  mov eax, dword ptr [esi-04]
:00403F12 8B57FC                  mov edx, dword ptr [edi-04]
:00403F15 29D0                    sub eax, edx
:00403F17 7702                    ja 00403F1B
:00403F19 01C2                    add edx, eax


跟上面的一样,呵呵,原来这个软件的注册名和号码是固定的:
公司名  :ph11.126.com
注册号码:1111-1111-1111-1111

在软件的相同目录下,filemon 监测到 proc.ini 文件,其中有
[Registration]
Company=ph11.126.com
SequenceNum=1111-1111-1111-1111
项目,当该键被删除软件又被回复未注册版,该软件启动检查该项目,而爆破完后写入该项目的注册码不对,重起软件就无效了。

呵呵,作者真会和我们开玩笑 :)

区区一文,实在没什么水平,不过还是要感谢ajj.126.com 的站长,在我初学破解的这半个月中,我的几个问题他都尽力回答,让我很感动。
还有要感谢看雪老师的那本书,虽然5天就看完了,但的确是本好书,有些东西还需要我细心的体会。

这个世界上不存在什么天才,如果你觉得我是,就想想我那5天看书,看汇编的疯狂劲,就不会说天才这两个字字了,到目前位置,我最爱的破解是破那些CRACKME ,很有意思,光盘上的哪些CRACKME,我是这样破解的,先是全部暴力破解,后来又全部追出注册码,现在我已经写出部分的注册机了,还有通过keymake 的另外注册机显示注册码的。

过程就是先用WDSM 破个遍、在用SMARTCHECK来作VB的、用DEDE找DELPHI 的,用OLLDY破任何能跟踪的。。。

最后的感觉就是TR 还不如Softice,我们是在技巧上作文章,人家却主导了方向。

呵呵,希望TR的作者能看到