飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 38372|回复: 126

[原创] 中原键盘屏幕全记录 3.8 爆破及完美注册 附注册机源代码

    [复制链接]

该用户从未签到

发表于 2010-1-22 13:58:17 | 显示全部楼层 |阅读模式
[ 破文标题 ] 中原键盘屏幕全记录 3.8 爆破及完美注册
[ 破文作者 ] manbug
[ 作者邮箱 ]
[ 作者主页 ]
[ 破解工具 ] peid,od
[ 破解平台 ] Windows XP SP2
[ 软件名称 ] 中原键盘屏幕全记录 3.8 更新时间:2010-01-17
[下载地址  ]http://www.zhongyuantech.com.cn/src/keyscreen30/index.html
[ 保护方式 ] 无壳
[ 软件简介 ] 中原键盘屏幕全记录 3.8
中原键盘屏幕全记录 又名键盘屏幕全记录,键盘监控, 屏幕监控,键盘记录器,屏幕记录器和键盘屏幕记录器
本软件是一款操作简单、功能实用的记录屏幕内容及按键内容的系统监视软件,并且可以将每天的键盘记录信息发送到你指定的邮箱. 软件安装完成后,设置程序将自动运行,软件已经帮您设置好了所有的默认参数,软件启动监控后,任何人在计算机上的一举一动都将被详细记录下来,本软件默认已经将软件设置为开机自动启动,在下次开机时,软件亦可在使用者毫无觉察的情况下对电脑实施键盘监控及屏幕监控,本屏幕/键盘记录软件广泛应用于个人对家人(如子女等)的监控。作者友情提示:用户输入的帐号和密码可能会被记录下来,请勿将软件用于非法用途。
[ 破解声明 ] 破解在于交流思路和过程,结果并不重要,请不要用于非法用途
[破解简介]这个软件有前台和后台程序,如果要爆破 的话,两个程序都要爆破。本文写了两种方法一是爆破,二是完美注册;

一、爆破
这个软件也是无意中在天空软件站下的,其实先前已经破解过这个公司的另一个软件,也是巧合今天又下了他的软件,实属无意。另一篇
破文:https://www.chinapyg.com/viewthr ... &extra=page%3D1
  进入正题,首先用PEID查壳,无壳,是用VC写的东东。直接跑一次,会提示未注册,要求注册,随便输入个注册码和订单号,从这个订单号就可以看出可能是网络验证的了。点注册后会提示"关闭软件,查看软件是否注册成功!",说明是重启验证了,点确定进入主界面,到处点点看看有什么提示之类的,熟悉一下软件流程,会看到主界面有一个启动监视器或关闭监视器的按钮,可以看出有一个后台监视程序。OK,关闭程序。
  整理一下思路:1.未注册会有提示,这是一个突破口。可以通过字符串来找。
                2.重启验证,无非就是写文件或写注册表。可以拦截相关函数
  将主程序丢入od,不运行,直接查找字符串,可以查到很多未注册的提示相关的字符串我们找到
  1. Ultra String Reference, 条目 274
  2. Address=0040C5FF
  3. Disassembly=push    offset <aVSSI>
  4. Text String=未注册不能设置登录密码!%s\winlog.exe
复制代码
这一行,双击来到代码处
  1. 0040C5B0   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
  2. 0040C5B6   .  6A FF         push    -1
  3. 0040C5B8   .  68 07A64400   push    <unknown_libname_308>
  4. 0040C5BD   .  50            push    eax
  5. 0040C5BE   .  A1 041A4600   mov     eax, dword ptr [<dword_461A04>]
  6. 0040C5C3   .  64:8925 00000>mov     dword ptr fs:[0], esp
  7. 0040C5CA   .  81EC 04010000 sub     esp, 104
  8. 0040C5D0   .  85C0          test    eax, eax
  9. 0040C5D2   .  6A 00         push    0
  10. 0040C5D4   .  0F84 8F000000 je      <loc_40C669>
  11. 0040C5DA   .  8D4C24 68     lea     ecx, dword ptr [esp+68]
  12. 0040C5DE   .  E8 3D150000   call    <sub_40DB20>
  13. 0040C5E3   .  68 BCD84500   push    offset <aVSS>                    ;  未注册提示
  14. 0040C5E8   .  8D8C24 000100>lea     ecx, dword ptr [esp+100]
  15. 0040C5EF   .  C78424 100100>mov     dword ptr [esp+110], 0
  16. 0040C5FA   .  E8 90F10200   call    <CString::operator=(char const *>
  17. 0040C5FF   .  68 90DB4500   push    offset <aVSSI>                   ;  未注册不能设置登录密码!%s\winlog.exe
  18. 0040C604   .  8D8C24 040100>lea     ecx, dword ptr [esp+104]
  19. 0040C60B   .  E8 7FF10200   call    <CString::operator=(char const *>
复制代码
看到0040C5D4 处有一个je会跳过注册提示,由于软件面里有很多类似的提示改这一处je达不到爆破效果,我们向上找,会么到test eax, eax说明当eax为0时则跳,继续向上找eax的值是怎么来的。mov     eax, dword ptr [<dword_461A04>] 可以看到eax的值来自[461A04]处,我们在461A04处下硬件访问断点,F9运行程序,程序会中断在下面 004139ED处
  1. 004139D8  |.  C746 04 13000>mov     dword ptr [esi+4], 13
  2. 004139DF  |.  C746 08 12000>mov     dword ptr [esi+8], 12
  3. 004139E6      C746 14 02000>mov     dword ptr [esi+14], 2      这就是爆破处esi+14正好等于00461A04,将2改为0
  4. 004139ED  |.  E8 9D7D0200   call    <CString::operator=(char const *>
复制代码
可以看到004139E6处是给[00461A04]赋值为2,而我们开始分析此处如果为0的话就会跳过未注册提示,这里我们把2改为0,保存为2.exe后试试;我们运行改为0后的2.exe文件,的确可以将注册提示跳过,并且主程序也提示已经注册,但是有一个问题就是主程序一闪就被关闭了。这说明我们改的地方没有错,而程序存在自校验。自校验分为两种1种是文件校验,另一种是内存校验。其实本程序这两种都不是,而是后台程序校验。我们来分析一下;我们用OD载入未修改的主文件找到004139E6处,将dword ptr [esi+14], 2改为dword ptr [esi+14], 0之后按F9运行程序,可以发现程序还是会被关闭,这可以排除文件校验,因为我们只改了内存没改文件!重新载入程序还是将004139E6处,将dword ptr [esi+14], 2改为dword ptr [esi+14], 0;然后F8五次后,在程序入口点下硬件访问断点,然后F9运行,发现程序没有中断,还是挂了,说明也没有内存断点。整理一下思路程序本身没有自校验,有可能在后台监控的程序上。那我们找找后台监控的程序名;既然在主程序上有启动监视和关闭监视的话那我们可以从以下API入手:hellExecute(..) WinExec(...) CreateProcess(..)重新载入程序,查找当前模块中的名称,会找到以下两条记录:
  1. 名称位于 中原键盘, 条目 349
  2. 地址=0044D350
  3. 区段=.rdata
  4. 类型=输入    (已知)
  5. 名称=SHELL32.ShellExecuteA

  6. 名称位于 中原键盘, 条目 381
  7. 地址=0044D2A0
  8. 区段=.rdata
  9. 类型=输入    (已知)
  10. 名称=KERNEL32.WinExec
  11. 分别在这两个函数上的每个参考点上下断点后,F9运行程序,会中断在
  12. 00401A84  |.  FF15 50D34400 call    near dword ptr [<&SHELL32.ShellE>; \ShellExecuteA
复制代码
查看右下边的堆栈窗口
  1. 0012EC68   00000000  |hWnd = NULL
  2. 0012EC6C   0045D258  |Operation = "open"
  3. 0012EC70   022C7348  |FileName = "C:\WINDOWS\system32\winlog.exe"
  4. 0012EC74   00000000  |Parameters = NULL
  5. 0012EC78   00000000  |DefDir = NULL
  6. 0012EC7C   00000005  \IsShown = 5
复制代码
这就是我们要找的后台监控程序;为了验证我们的想法是否正确我们重新载入我们破解后的文件2.exe 取消掉所有断点然后将
  1. 00401A76      6A 05         push    5                                ; /IsShown = 5
  2. 00401A78      6A 00         push    0                                ; |DefDir = NULL
  3. 00401A7A      6A 00         push    0                                ; |Parameters = NULL
  4. 00401A7C      50            push    eax                              ; |FileName
  5. 00401A7D      68 58D24500   push    0045D258                         ; |open
  6. 00401A82      6A 00         push    0                                ; |hWnd = NULL
  7. 00401A84      FF15 50D34400 call    near dword ptr [<&SHELL32.ShellE>; \ShellExecuteA
复制代码
这段代码全部 nop掉,F9运行程序,这时个程序没有挂掉,并且标题上写已经注册,如果我们点击启动监控的话,立刻主程序就会被挂掉。说明我们的想法没有错,的确是后台监控发现被爆破后关闭掉了主程序。到这一步之后我们又只有转到winlog.exe这个文件来开刀了。我们在任务管理器中先关闭掉winlog.exe这个进程。还是重新载入2.exe并将上面的nop掉,让这个主程序顺利运行。然后新开一个OD将:\WINDOWS\system32\winlog.exe载入
整理一下思路:后台监控程序一定是读取了我们先前输入的错误注册码和订单验证之后才发现被爆破,因此我们可以在winlog.exe中找到相关的读取函数GetProfileString,这是读取win.ini文件的;我们可以打开win.ini文件发现以下是我们输入的注册码和订单号
  1. [keyscreen30]
  2. version=1010
  3. notetext=manbug
  4. noteid=9494949494
复制代码
在这个函数的每个参考点上下断点,F9运行winlog.exe,观察每次中断时读取的key值如果是 notetext或noteid的话就说明到了关键点了。

并将不是读取这两个key的断点去除,很快就会来到
  1. 00408E9D  |.  8B1D D0824300 mov     ebx, dword ptr [<&KERNEL32.GetPr>;  kernel32.GetProfileStringA
  2. 00408EA3  |.  68 00010000   push    100                              ; /BufSize = 100 (256.)
  3. 00408EA8  |.  F3:AB         rep     stos dword ptr es:[edi]          ; |
  4. 00408EAA  |.  8D4C24 10     lea     ecx, dword ptr [esp+10]          ; |
  5. 00408EAE  |.  51            push    ecx                              ; |ReturnBuffer
  6. 00408EAF  |.  68 147F4400   push    00447F14                         ; |Default = ""
  7. 00408EB4  |.  68 E4494400   push    004449E4                         ; |Key = "notetext"
  8. 00408EB9  |.  52            push    edx                              ; |Section
  9. 00408EBA  |.  FFD3          call    near ebx                         ; \GetProfileStringA
复制代码
我们将所有断点都去除,然后ctrl+F9执行到返回调用处。
  1. 0040540B   .  E8 403A0000   call    00408E50
  2. 00405410   .  51            push    ecx                    CTRL+F9会返回到这里
  3. 00405411   .  8BCC          mov     ecx, esp
  4. 00405413   .  8965 E8       mov     dword ptr [ebp-18], esp
  5. 00405416   .  68 5C444400   push    0044445C                         ;  ASCII "http://www.zhongyuantech.com.cn/check.asp"
  6. 0040541B   .  E8 D34F0200   call    0042A3F3
  7. 00405420   .  8D4D C4       lea     ecx, dword ptr [ebp-3C]
  8. 00405423   .  E8 783C0000   call    004090A0
  9. 00405428   .  8B45 D8       mov     eax, dword ptr [ebp-28]
  10. 0040542B   .  85C0          test    eax, eax
  11. 0040542D   .  74 13         je      short 00405442
  12. 0040542F   .  8B87 E0010000 mov     eax, dword ptr [edi+1E0]
  13. 00405435   .  6A 00         push    0                                ; /lParam = 0
  14. 00405437   .  6A 00         push    0                                ; |wParam = 0
  15. 00405439   .  6A 12         push    12                               ; |Message = WM_QUIT
  16. 0040543B   .  50            push    eax                              ; |hWnd
  17. 0040543C   .  FF15 A4844300 call    near dword ptr [<&USER32.PostMes>; \PostMessageA
复制代码
我们会看到有个PostMessageA并且是WM_QUIT,难道就是这句把我们的主程序给关了??大家可以验证一下,我是知道就是这句了,因为我验证了N次了。当然关键不在这了。我们找到这段函数的入口处,大家从头到尾分析一下跳转。
  1. 00405350   .  55            push    ebp
  2. 00405351   .  8BEC          mov     ebp, esp
  3. 00405353   .  6A FF         push    -1
  4. 00405355   .  68 D85E4300   push    00435ED8                         ;  SE 处理程序安装
  5. 0040535A   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
  6. 00405360   .  50            push    eax
  7. 00405361   .  64:8925 00000>mov     dword ptr fs:[0], esp
  8. 00405368   .  83EC 30       sub     esp, 30
  9. 0040536B   .  A1 2089C401   mov     eax, dword ptr [1C48920]
  10. 00405370   .  53            push    ebx
  11. 00405371   .  56            push    esi
  12. 00405372   .  57            push    edi
  13. 00405373   .  8BF9          mov     edi, ecx
  14. 00405375   .  8965 F0       mov     dword ptr [ebp-10], esp
  15. 00405378   .  85C0          test    eax, eax
  16. 0040537A   .  897D EC       mov     dword ptr [ebp-14], edi
  17. 0040537D      74 18         je      short 00405397                ;归根结底就是此处跳了就会发送退出消息,把此处nop就可以了
  18. 0040537F   .  E8 476E0200   call    0042C1CB
  19. 00405384   .  8B4D F4       mov     ecx, dword ptr [ebp-C]
  20. 00405387   .  64:890D 00000>mov     dword ptr fs:[0], ecx
  21. 0040538E   .  5F            pop     edi
  22. 0040538F   .  5E            pop     esi
  23. 00405390   .  5B            pop     ebx
  24. 00405391   .  8BE5          mov     esp, ebp
  25. 00405393   .  5D            pop     ebp
  26. 00405394   .  C2 0400       retn    4                                ;直接返回了不会发送退出消息
  27. 00405397   >  6A 00         push    0                                ; /Default = 0
  28. 00405399   .  BB 01000000   mov     ebx, 1                           ; |
  29. 0040539E   .  68 94444400   push    00444494                         ; |Key = "lookwnd"
  30. 004053A3   .  68 88444400   push    00444488                         ; |Section = "keyscreen30"
  31. 004053A8   .  891D 2089C401 mov     dword ptr [1C48920], ebx         ; |
  32. 004053AE   .  C745 FC 00000>mov     dword ptr [ebp-4], 0             ; |
  33. 004053B5   .  FF15 CC824300 call    near dword ptr [<&KERNEL32.GetPr>; \GetProfileIntA
  34. 004053BB   .  8BF0          mov     esi, eax
  35. 004053BD   .  85F6          test    esi, esi
  36. 004053BF   .  0F84 94000000 je      00405459
  37. 004053C5   .  56            push    esi                              ; /hWnd
  38. 004053C6   .  FF15 9C844300 call    near dword ptr [<&USER32.IsWindo>; \IsWindow
  39. 004053CC   .  85C0          test    eax, eax
  40. 004053CE   .  0F84 85000000 je      00405459
  41. 004053D4   .  56            push    esi                              ; /hWnd
  42. 004053D5   .  FF15 28844300 call    near dword ptr [<&USER32.IsWindo>; \IsWindowVisible
  43. 004053DB   .  85C0          test    eax, eax
  44. 004053DD   .  74 7A         je      short 00405459
  45. 004053DF   .  3BB7 E0010000 cmp     esi, dword ptr [edi+1E0]
  46. 004053E5   .  74 72         je      short 00405459
  47. 004053E7   .  8D4D C4       lea     ecx, dword ptr [ebp-3C]
  48. 004053EA   .  89B7 E0010000 mov     dword ptr [edi+1E0], esi
  49. 004053F0   .  E8 0B390000   call    00408D00
  50. 004053F5   .  51            push    ecx
  51. 004053F6   .  885D FC       mov     byte ptr [ebp-4], bl
  52. 004053F9   .  8BCC          mov     ecx, esp
  53. 004053FB   .  8965 E8       mov     dword ptr [ebp-18], esp
  54. 004053FE   .  68 88444400   push    00444488                         ;  ASCII "keyscreen30"
  55. 00405403   .  E8 EB4F0200   call    0042A3F3
  56. 00405408   .  8D4D C4       lea     ecx, dword ptr [ebp-3C]
  57. 0040540B   .  E8 403A0000   call    00408E50
  58. 00405410   .  51            push    ecx
  59. 00405411   .  8BCC          mov     ecx, esp
  60. 00405413   .  8965 E8       mov     dword ptr [ebp-18], esp
  61. 00405416   .  68 5C444400   push    0044445C                         ;  ASCII "http://www.zhongyuantech.com.cn/check.asp"
  62. 0040541B   .  E8 D34F0200   call    0042A3F3
  63. 00405420   .  8D4D C4       lea     ecx, dword ptr [ebp-3C]
  64. 00405423   .  E8 783C0000   call    004090A0
  65. 00405428   .  8B45 D8       mov     eax, dword ptr [ebp-28]
  66. 0040542B   .  85C0          test    eax, eax
  67. 0040542D   .  74 13         je      short 00405442
  68. 0040542F   .  8B87 E0010000 mov     eax, dword ptr [edi+1E0]
  69. 00405435   .  6A 00         push    0                                ; /lParam = 0
  70. 00405437   .  6A 00         push    0                                ; |wParam = 0
  71. 00405439   .  6A 12         push    12                               ; |Message = WM_QUIT
  72. 0040543B   .  50            push    eax                              ; |hWnd
  73. 0040543C   .  FF15 A4844300 call    near dword ptr [<&USER32.PostMes>; \PostMessageA
复制代码
把0040537D 处nop掉就可以了,大家可以保存之后运行一下,当然要将保存的文件名改为winlog.exe并放在C:\WINDOWS\system32\这里主程序就不会挂掉了。到这里爆破还只能算是告一段落,还没有达到完全爆破,大家可以看主窗口的监控日期列表,随便点一天的记录,然后点向下一页,会发现没有任何变化,仍然只能看第一页,和未注册一样,说明可能有暗桩,那我们再次打开未被破解的主程序点向下一页会提示未注册,只能看一页,而爆破后的程序没有提示,因为被我们跳过了。怎么办?再次用od加载未爆破的主程序直接运行起来然后还是查找字符串将所有的“ 未注册提示”所在的汇编代码全部下断点,然后在监控日期列表中选择一条记录之后点下一页。会中断在
  1. 0040EDC6   .  68 BCD84500   push    offset <aVSS>                    ;  未注册提示
  2. 0040EDCB   .  8D8C24 A00000>lea     ecx, dword ptr [esp+A0]
  3. 0040EDD2   .  C78424 B00000>mov     dword ptr [esp+B0], 0
  4. 0040EDDD   .  E8 ADC90200   call    <CString::operator=(char const *>
  5. 0040EDE2   .  68 D0D84500   push    offset <aVS>                     ;  未注册只能看第一页!%s %d.%d
  6. 0040EDE7   .  8D8C24 A40000>lea     ecx, dword ptr [esp+A4]
  7. 0040EDEE   .  E8 9CC90200   call    <CString::operator=(char const *>
复制代码
记下这个地址,关闭程序用od再次载入已经爆破过的程序2.exe直接ctrl+g找到 040EDC6 处缶上找在0040EDB5 处下断点,
  1. 0040EDB5   . /0F84 CE000000 je      <loc_40EE89>
  2. 0040EDBB   . |6A 00         push    0
  3. 0040EDBD   . |8D4C24 08     lea     ecx, dword ptr [esp+8]
  4. 0040EDC1   . |E8 5AEDFFFF   call    <sub_40DB20>
  5. 0040EDC6   . |68 BCD84500   push    offset <aVSS>                    ;  未注册提示
  6. 0040EDCB   . |8D8C24 A00000>lea     ecx, dword ptr [esp+A0]
复制代码
直接运行程序点开监控日期列表 ,点下一页,会中断,然后单步走
  1. 0040EE89 > > \B9 50194600   mov     ecx, offset <unk_461950>         ;  loc_40EE89
  2. 0040EE8E   .  E8 DD37FFFF   call    <sub_402670>                     ;这个F7跟进
  3. 0040EE93   .  85C0          test    eax, eax
  4. 0040EE95   .  74 11         je      short <loc_40EEA8>
复制代码
跟进0040EE8E之后依然单步走
  1. 004026B3  |.  48            dec     eax
  2. 004026B4  |.  8941 48       mov     dword ptr [ecx+48], eax
  3. 004026B7 >|>  E8 B4FBFFFF   call    <sub_402270>                     ;  此处F7跟进
  4. 004026BC  |.  B8 01000000   mov     eax, 1
复制代码
断续F8单步走
  1. 004022D5  |.  68 581A4600   push    offset <Src>
  2. 004022DA  |.  50            push    eax
  3. 004022DB  |.  E8 CA820200   call    <__mbscmp>
  4. 004022E0  |.  83C4 08       add     esp, 8
  5. 004022E3  |.  85C0          test    eax, eax
  6. 004022E5  |.  75 06         jnz     short <loc_4022ED>                        ;将jnz改为jmp就可以完美爆破了
  7. 004022E7  |.  891D 98194600 mov     dword ptr [<dword_461998>], ebx
  8. 004022ED >|>  8B4424 10     mov     eax, dword ptr [esp+10]          ;  loc_4022ED
复制代码
其实这些都是要仔细调试,N次测试后才找到的,我在上面只是给了些爆破的思路,大家有兴趣的可以试一下!

二、完美注册的方法
以下是程序本地验证的代码
  1. 00413DBE  |.  F3:A4         rep     movs byte ptr es:[edi], byte ptr>
  2. 00413DC0  |.  8B4C24 28     mov     ecx, dword ptr [esp+28]          ;  假码前四个字母送ecx
  3. 00413DC4  |.  BF 0A000000   mov     edi, 0A                          ;  edi=0xa
  4. 00413DC9  |.  0FBEF1        movsx   esi, cl                          ;  第一个字母送esi
  5. 00413DCC  |.  8BC6          mov     eax, esi                         ;  eax=esi
  6. 00413DCE  |.  0BC3          or      eax, ebx                         ;  eax=eax|0x13;ebx=13是个全局变量已经初使化为0x13
  7. 00413DD0  |.  99            cdq
  8. 00413DD1  |.  F7FF          idiv    edi                              ;  eax/0xa
  9. 00413DD3  |.  0FBE4424 2B   movsx   eax, byte ptr [esp+2B]           ;  将假码第4位字母送eax
  10. 00413DD8  |.  83C2 30       add     edx, 30                          ;  将先前的余数加上0x30
  11. 00413DDB  |.  3BC2          cmp     eax, edx
  12. 00413DDD  |.  0F85 E0000000 jnz     <loc_413EC3>
  13. 00413DE3  |.  0FBEC5        movsx   eax, ch                          ;  第2个字母送eax
  14. 00413DE6  |.  8B4C24 2C     mov     ecx, dword ptr [esp+2C]          ;  从第5个字母开始送4个字母到ecx
  15. 00413DEA  |.  894424 1C     mov     dword ptr [esp+1C], eax
  16. 00413DEE  |.  0FBED1        movsx   edx, cl                          ;  第5个字母送edx
  17. 00413DF1  |.  0BC3          or      eax, ebx                         ;  eax=eax|0x13
  18. 00413DF3  |.  895424 14     mov     dword ptr [esp+14], edx
  19. 00413DF7  |.  99            cdq
  20. 00413DF8  |.  BF 1A000000   mov     edi, 1A                          ;  edi=0x1A
  21. 00413DFD  |.  F7FF          idiv    edi                              ;  eax/0x1A
  22. 00413DFF  |.  8B4424 14     mov     eax, dword ptr [esp+14]
  23. 00413E03  |.  83C2 41       add     edx, 41                          ;  余数加上0x41
  24. 00413E06  |.  3BC2          cmp     eax, edx
  25. 00413E08  |.  0F85 B5000000 jnz     <loc_413EC3>
  26. 00413E0E  |.  0FBE7C24 2A   movsx   edi, byte ptr [esp+2A]           ;  第3个字母送edi
  27. 00413E13  |.  8BC7          mov     eax, edi                         ;  eax=edi
  28. 00413E15  |.  0BC3          or      eax, ebx                         ;  eax=eax|0x13
  29. 00413E17  |.  BB 1A000000   mov     ebx, 1A                          ;  ebx=0x1A
  30. 00413E1C  |.  99            cdq
  31. 00413E1D  |.  F7FB          idiv    ebx                              ;  eax/0x1A
  32. 00413E1F  |.  0FBECD        movsx   ecx, ch                          ;  第6个字母送ecx
  33. 00413E22  |.  894C24 20     mov     dword ptr [esp+20], ecx
  34. 00413E26  |.  83C2 61       add     edx, 61                          ;  余数加上0x61
  35. 00413E29  |.  3BCA          cmp     ecx, edx
  36. 00413E2B  |.  0F85 92000000 jnz     <loc_413EC3>
  37. 00413E31  |.  8B4C24 18     mov     ecx, dword ptr [esp+18]          ;  ecx=0x12 全局变量中初使化了
  38. 00413E35  |.  8BC6          mov     eax, esi                         ;  第一个字母送eax
  39. 00413E37  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
  40. 00413E39  |.  BE 0A000000   mov     esi, 0A                          ;  esi=0x0a
  41. 00413E3E  |.  99            cdq
  42. 00413E3F  |.  F7FE          idiv    esi                              ;  eax/0x0a
  43. 00413E41  |.  0FBE4424 2E   movsx   eax, byte ptr [esp+2E]           ;  第7个字母送eax
  44. 00413E46  |.  83C2 30       add     edx, 30                          ;  余数加上0x30
  45. 00413E49  |.  3BC2          cmp     eax, edx
  46. 00413E4B  |.  75 76         jnz     short <loc_413EC3>
  47. 00413E4D  |.  8B4424 1C     mov     eax, dword ptr [esp+1C]          ;  第2个字母送eax
  48. 00413E51  |.  8BF3          mov     esi, ebx                         ;  esi=0x1A
  49. 00413E53  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
  50. 00413E55  |.  99            cdq
  51. 00413E56  |.  F7FE          idiv    esi                              ;  eax/0x1A
  52. 00413E58  |.  0FBE4424 2F   movsx   eax, byte ptr [esp+2F]           ;  第8个字母送eax
  53. 00413E5D  |.  83C2 61       add     edx, 61                          ;  余数加上0x61
  54. 00413E60  |.  3BC2          cmp     eax, edx
  55. 00413E62  |.  75 5F         jnz     short <loc_413EC3>
  56. 00413E64  |.  8BC7          mov     eax, edi                         ;  第3个字母送eax
  57. 00413E66  |.  8B5C24 30     mov     ebx, dword ptr [esp+30]          ;  从第9个字母开始送4个字母到ebx
  58. 00413E6A  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
  59. 00413E6C  |.  99            cdq
  60. 00413E6D  |.  F7FE          idiv    esi                              ;  eax/0x1A
  61. 00413E6F  |.  0FBEC3        movsx   eax, bl                          ;  第9个字母送eax
  62. 00413E72  |.  83C2 41       add     edx, 41                          ;  余数加上0x41
  63. 00413E75  |.  3BC2          cmp     eax, edx
  64. 00413E77  |.  75 4A         jnz     short <loc_413EC3>
  65. 00413E79  |.  0FBE4424 2B   movsx   eax, byte ptr [esp+2B]           ;  第4个字母送eax
  66. 00413E7E  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
  67. 00413E80  |.  BE 0A000000   mov     esi, 0A                          ;  esi=0xA
  68. 00413E85  |.  99            cdq
  69. 00413E86  |.  F7FE          idiv    esi                              ;  eax/0xA
  70. 00413E88  |.  0FBEC7        movsx   eax, bh                          ;  第10个字母送eax
  71. 00413E8B  |.  83C2 30       add     edx, 30                          ;  余数加0x30
  72. 00413E8E  |.  3BC2          cmp     eax, edx
  73. 00413E90  |.  75 31         jnz     short <loc_413EC3>
  74. 00413E92  |.  8B4424 14     mov     eax, dword ptr [esp+14]          ;  第5个字母送eax
  75. 00413E96  |.  BE 1A000000   mov     esi, 1A
  76. 00413E9B  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
  77. 00413E9D  |.  99            cdq
  78. 00413E9E  |.  F7FE          idiv    esi                              ;  eax/0x1A
  79. 00413EA0  |.  0FBE4424 32   movsx   eax, byte ptr [esp+32]           ;  第11个字母送eax
  80. 00413EA5  |.  83C2 61       add     edx, 61                          ;  余数加0x61
  81. 00413EA8  |.  3BC2          cmp     eax, edx
  82. 00413EAA  |.  75 17         jnz     short <loc_413EC3>
  83. 00413EAC  |.  8B4424 20     mov     eax, dword ptr [esp+20]          ;  第6个字母送eax
  84. 00413EB0  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
  85. 00413EB2  |.  8BCE          mov     ecx, esi
  86. 00413EB4  |.  99            cdq
  87. 00413EB5  |.  F7F9          idiv    ecx                              ;  eax/0x1A
  88. 00413EB7  |.  0FBE4424 33   movsx   eax, byte ptr [esp+33]           ;  第12个字母送eax
  89. 00413EBC  |.  83C2 41       add     edx, 41                          ;  余数加0x41
  90. 00413EBF  |.  3BC2          cmp     eax, edx
  91. 00413EC1  |.  74 2A         je      short <loc_413EED>
  92. 00413EC3 >|>  C745 14 02000>mov     [arg.4], 2                       ;  loc_413EC3
  93. 00413ECA >|>  8D4C24 10     lea     ecx, dword ptr [esp+10]          ;  loc_413ECA
  94. 00413ECE  |.  C64424 3C 00  mov     byte ptr [esp+3C], 0
  95. 00413ED3  |.  E8 2E770200   call    <CString::~CString(void)>
  96. 00413ED8  |.  8D4C24 44     lea     ecx, dword ptr [esp+44]
  97. 00413EDC  |.  C74424 3C FFF>mov     dword ptr [esp+3C], -1
  98. 00413EE4  |.  E8 1D770200   call    <CString::~CString(void)>
  99. 00413EE9  |.  33C0          xor     eax, eax
  100. 00413EEB  |.  EB 59         jmp     short <loc_413F46>
  101. 00413EED >|>  C745 14 01000>mov     [arg.4], 1                       ;  loc_413EED
  102. 00413EF4  |.  8B3D ECD24400 mov     edi, dword ptr [<&KERNEL32.Sleep>;  kernel32.Sleep
  103. 00413EFA  |.  33F6          xor     esi, esi
  104. 00413EFC >|>  8BCD          /mov     ecx, ebp                        ;  loc_413EFC
  105. 00413EFE  |.  E8 DDFCFFFF   |call    <sub_413BE0>                    ;  网络验证
复制代码
本地验证后然后是网络验证,我已经把注册机写出来了,代码如下:
游客,如果您要查看本帖隐藏内容请回复
好了,就写到这里了,其实这不是真正的注册机,因为利用了网站的漏洞!附

[ 本帖最后由 manbug 于 2010-1-22 14:08 编辑 ]

评分

参与人数 1威望 +20 飘云币 +40 收起 理由
月之精灵 + 20 + 40 您的贴子很精彩,希望能再次分享!

查看全部评分

PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-3 23:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-1-22 14:11:49 | 显示全部楼层
    不错,不错,希望能再次分享您的大作
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-1-22 15:40:17 | 显示全部楼层
    谢谢楼主提供,好好学习/:good
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-4-30 18:58
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2010-1-22 16:05:31 | 显示全部楼层
    谢谢分享了。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-1-22 19:33:09 | 显示全部楼层
    看下。。。。。。。。
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2010-1-22 21:23:11 | 显示全部楼层
    感谢斑竹 月之精灵 评分
    感觉写破文比破解难度还要大些啊,呵呵
    不知道什么时候能混个PYG成员!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-1-22 22:17:04 | 显示全部楼层
    加油,希望就在前方!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-11-29 21:31
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-1-22 22:26:03 | 显示全部楼层
    哇塞老兄,你真的是很牛唉。
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2022-11-11 18:09
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-1-22 22:28:48 | 显示全部楼层
    看看....不错的东西.
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2010-1-23 00:45:19 | 显示全部楼层
    好贴!
    顶下兄弟了!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表