• 标 题:eXeScope V6.41 的注册算法破解
  • 作 者:小虾
  • 时 间:004-05-03,01:07
  • 链 接:http://bbs.pediy.com

eXeScope V6.41 的注册算法破解
【软件名称】:eXeScope V6.41

【软件语言】:英文

【应用平台】:Win9x/NT/2000/XP

【难    度】:简单,献给像我等这样的菜鸟学习

【破解工具】TRW2000 1.23,winDasm V8.93汉化版(写教程用)

【软件介绍】:
  功能强大的软件资源分析工具(地球人都知道),升到了6.41版了。

  近来闲来无事,就分析了这个软件的算法,启动TRW2000,点击帮助/注册,输入:
  
  用户名:小虾
  假 码:7878787878 ←必须输够十位,等下就知道。

  按快捷键:Ctrl+N弹出TRW2000调试界面。输入万能断点:Hmemcpy,按F5键返回,点击注册按钮,被TRW拦到,来到以下地方:

:004C2170 8B1528EE4C00            mov edxdword ptr [004CEE28]
:004C2176 8B12                    mov edxdword ptr [edx]    ←EDX为你输入的注册码
:004C2178 A130EC4C00              mov eaxdword ptr [004CEC30]
:004C217D 8B00                    mov eaxdword ptr [eax]
:004C217F E82C8F0000              call 004CB0B0  ←关键Call,按F8进入
:004C2184 84C0                    test alal ←测试al值是否为1
:004C2186 0F848D000000            je 004C2219  ←经典跳转,跳就死,暴力破解的话将这里NOP就行了。
:004C218C A1C4EE4C00              mov eaxdword ptr [004CEEC4]
:004C2191 8B00                    mov eaxdword ptr [eax]
:004C2193 E8B82AF4FF              call 00404C50
:004C2198 85C0                    test eaxeax
:004C219A 7E7D                    jle 004C2219
:004C219C 8D55F0                  lea edxdword ptr [ebp-10]
:004C219F A1D8EE4C00              mov eaxdword ptr [004CEED8]
:004C21A4 8B00                    mov eaxdword ptr [eax]
:004C21A6 E8B904FDFF              call 00492664
:004C21AB 8B45F0                  mov eaxdword ptr [ebp-10]
:004C21AE 8D4DF4                  lea ecxdword ptr [ebp-0C]

* Possible StringData Ref from Code Obj ->".ini"
                                  |
:004C21B1 BA78224C00              mov edx, 004C2278
:004C21B6 E85D79F4FF              call 00409B18
:004C21BB 8B4DF4                  mov ecxdword ptr [ebp-0C]
:004C21BE B201                    mov dl, 01
:004C21C0 A124BE4300              mov eaxdword ptr [0043BE24]
:004C21C5 E80A9DF7FF              call 0043BED4
:004C21CA 8BF0                    mov esieax
:004C21CC A1C4EE4C00              mov eaxdword ptr [004CEEC4]
:004C21D1 8B00                    mov eaxdword ptr [eax]
:004C21D3 50                      push eax

* Possible StringData Ref from Code Obj ->"Name"
                                  |
:004C21D4 B988224C00              mov ecx, 004C2288

* Possible StringData Ref from Code Obj ->"Reg"
                                  |
:004C21D9 BA98224C00              mov edx, 004C2298
:004C21DE 8BC6                    mov eaxesi
:004C21E0 8B38                    mov edidword ptr [eax]
:004C21E2 FF5704                  call [edi+04]
:004C21E5 A128EE4C00              mov eaxdword ptr [004CEE28]
:004C21EA 8B00                    mov eaxdword ptr [eax]
:004C21EC 50                      push eax

* Possible StringData Ref from Code Obj ->"Reg"
                                  |
:004C21ED BA98224C00              mov edx, 004C2298
:004C21F2 B9A4224C00              mov ecx, 004C22A4
:004C21F7 8BC6                    mov eaxesi
:004C21F9 8B38                    mov edidword ptr [eax]
:004C21FB FF5704                  call [edi+04]
:004C21FE 8BC6                    mov eaxesi
:004C2200 E8DB19F4FF              call 00403BE0
:004C2205 A138EC4C00              mov eaxdword ptr [004CEC38]
:004C220A C60001                  mov byte ptr [eax], 01
:004C220D C7834C02000001000000    mov dword ptr [ebx+0000024C], 00000001
:004C2217 EB20                    jmp 004C2239

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004C2186(C), :004C219A(C)
|
:004C2219 6A00                    push 00000000 ←跳到这里你以经完了。
:004C221B 8D55EC                  lea edxdword ptr [ebp-14]

* Possible StringData Ref from Code Obj ->"错误注册码或姓名!;搊榐ID傑偨偼柤慜偑柍岠偱偡"
                                  |
:004C221E B8B0224C00              mov eax, 004C22B0  
:004C2223 E8280C0000              call 004C2E50  ←出错的对话框

这里是上面按F8进的Call里面,分析算法就在这里。

:004CB0B0 55                      push ebp
:004CB0B1 8BEC                    mov ebpesp
:004CB0B3 51                      push ecx
:004CB0B4 53                      push ebx
:004CB0B5 8955FC                  mov dword ptr [ebp-04], edx
:004CB0B8 8B45FC                  mov eaxdword ptr [ebp-04]
:004CB0BB E8809DF3FF              call 00404E40
:004CB0C0 33C0                    xor eaxeax
:004CB0C2 55                      push ebp
:004CB0C3 684FB14C00              push 004CB14F
:004CB0C8 64FF30                  push dword ptr fs:[eax]
:004CB0CB 648920                  mov dword ptr fs:[eax], esp
:004CB0CE 33DB                    xor ebxebx
:004CB0D0 8B45FC                  mov eaxdword ptr [ebp-04] ←EAX为你的假码
:004CB0D3 E8789BF3FF              call 00404C50 ←取得假码的位数
:004CB0D8 83F80A                  cmp eax, 0000000A ←比较假码是不是十位,
:004CB0DB 755C                    jne 004CB139   ←不到十位或超过十位送你上西天
:004CB0DD 8B55FC                  mov edxdword ptr [ebp-04]

* Possible StringData Ref from Code Obj ->"A1910"
                                  |
:004CB0E0 B864B14C00              mov eax, 004CB164 ←EAX为A1910
:004CB0E5 E8AA9EF3FF              call 00404F94   ←检查你的注册码前五位是不是A1910
:004CB0EA 48                      dec eax
:004CB0EB 7410                    je 004CB0FD    ←是就跳到004CB0FD继续。不是就接着往下比较
:004CB0ED 8B55FC                  mov edxdword ptr [ebp-04]

* Possible StringData Ref from Code Obj ->"A1423"
                                  |
:004CB0F0 B874B14C00              mov eax, 004CB174 ←如果你的注册码前五位不是A1910就走到这里,现EAX值是A1423
:004CB0F5 E89A9EF3FF              call 00404F94   ←比较注册码前五位是不是A1423
:004CB0FA 48                      dec eax
:004CB0FB 753C                    jne 004CB139   ←不是就跳,送你上西天。

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004CB0EB(C)
|
:004CB0FD B802000000              mov eax, 00000002

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004CB117(C)
|
:004CB102 8B55FC                  mov edxdword ptr [ebp-04] ←EDX值为假码
:004CB105 8A5402FF                mov dlbyte ptr [edx+eax-01] ←依次取出假码的第二位
:004CB109 80FA30                  cmp dl, 30 ←比较 
:004CB10C 722B                    jb 004CB139 ←小于30就送你上西天
:004CB10E 80FA39                  cmp dl, 39 ←比较
:004CB111 7726                    ja 004CB139 ←大于39就送你上西天
:004CB113 40                      inc eax ←计数加1
:004CB114 83F80B                  cmp eax, 0000000B ←比较
:004CB117 75E9                    jne 004CB102 ←EAX小于0B继续跳到上面比较下一个假码。
:004CB119 8B45FC                  mov eaxdword ptr [ebp-04] ←EAX为假码
:004CB11C 0FB64008                movzx eaxbyte ptr [eax+08] ←取出假码的第九位数
:004CB120 8B55FC                  mov edxdword ptr [ebp-04] ←EDX为假码
:004CB123 0FB65209                movzx edxbyte ptr [edx+09] ←取出假码的第十位数
:004CB127 03C2                    add eaxedx ←EAX和EDX相加
:004CB129 B90A000000              mov ecx, 0000000A ←ECX值为0000000A
:004CB12E 33D2                    xor edxedx ←EDX清0
:004CB130 F7F1                    div ecx ←EAX和ECX相除,整数保存在EAX中,余数保存在EDX
:004CB132 83FA04                  cmp edx, 00000004 ←比较
:004CB135 7502                    jne 004CB139 ←若相除的余数不相等就送你上西天。算法到这里也就结束了,以下不管它了
:004CB137 B301                    mov bl, 01

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004CB0DB(C), :004CB0FB(C), :004CB10C(C), :004CB111(C), :004CB135(C)
|
:004CB139 33C0                    xor eaxeax
:004CB13B 5A                      pop edx
:004CB13C 59                      pop ecx
:004CB13D 59                      pop ecx
:004CB13E 648910                  mov dword ptr fs:[eax], edx
:004CB141 6856B14C00              push 004CB156

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004CB154(U)
|
:004CB146 8D45FC                  lea eaxdword ptr [ebp-04]
:004CB149 E84298F3FF              call 00404990
:004CB14E C3                      ret ←返回子程序


  经过以上分析,得出算法:
  1、与用户名无关,
  2、注册码前五位必须是:A1910和A1423
  3、第二位以后的注册码必须是数字0~9
  4、注册码第六位和第八位可以是任意数。
  5、注册码第九位和第十位注册码也可任意输入,但他们相加再除的余数必须余4,否则注册不成功

  例如:A1910XXX08或A1423XXX08就可以注册成功。

  好了,有以上信息,可以写注册机了(我的编程技术太烂,注册机就让你们去写吗!呵呵~~),我也累了,分析这个软件花了几分钟,但写这个教程用了半个钟头呀。

作者:小虾
2004年5月3日