| 
注册时间2010-1-1
阅读权限20
最后登录1970-1-1UID64991 以武会友  
 
 该用户从未签到 | 
 
| [ 破文标题 ] 中原键盘屏幕全记录 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,不运行,直接查找字符串,可以查到很多未注册的提示相关的字符串我们找到
 这一行,双击来到代码处复制代码Ultra String Reference, 条目 274
 Address=0040C5FF
 Disassembly=push    offset <aVSSI>
 Text String=未注册不能设置登录密码!%s\winlog.exe
看到0040C5D4 处有一个je会跳过注册提示,由于软件面里有很多类似的提示改这一处je达不到爆破效果,我们向上找,会么到test eax, eax说明当eax为0时则跳,继续向上找eax的值是怎么来的。mov     eax, dword ptr [<dword_461A04>] 可以看到eax的值来自[461A04]处,我们在461A04处下硬件访问断点,F9运行程序,程序会中断在下面 004139ED处复制代码0040C5B0   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
0040C5B6   .  6A FF         push    -1
0040C5B8   .  68 07A64400   push    <unknown_libname_308>
0040C5BD   .  50            push    eax
0040C5BE   .  A1 041A4600   mov     eax, dword ptr [<dword_461A04>]
0040C5C3   .  64:8925 00000>mov     dword ptr fs:[0], esp
0040C5CA   .  81EC 04010000 sub     esp, 104
0040C5D0   .  85C0          test    eax, eax
0040C5D2   .  6A 00         push    0
0040C5D4   .  0F84 8F000000 je      <loc_40C669>
0040C5DA   .  8D4C24 68     lea     ecx, dword ptr [esp+68]
0040C5DE   .  E8 3D150000   call    <sub_40DB20>
0040C5E3   .  68 BCD84500   push    offset <aVSS>                    ;  未注册提示
0040C5E8   .  8D8C24 000100>lea     ecx, dword ptr [esp+100]
0040C5EF   .  C78424 100100>mov     dword ptr [esp+110], 0
0040C5FA   .  E8 90F10200   call    <CString::operator=(char const *>
0040C5FF   .  68 90DB4500   push    offset <aVSSI>                   ;  未注册不能设置登录密码!%s\winlog.exe
0040C604   .  8D8C24 040100>lea     ecx, dword ptr [esp+104]
0040C60B   .  E8 7FF10200   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(..)重新载入程序,查找当前模块中的名称,会找到以下两条记录:复制代码004139D8  |.  C746 04 13000>mov     dword ptr [esi+4], 13
004139DF  |.  C746 08 12000>mov     dword ptr [esi+8], 12
004139E6      C746 14 02000>mov     dword ptr [esi+14], 2      这就是爆破处esi+14正好等于00461A04,将2改为0
004139ED  |.  E8 9D7D0200   call    <CString::operator=(char const *>
查看右下边的堆栈窗口复制代码名称位于 中原键盘, 条目 349
 地址=0044D350
 区段=.rdata
 类型=输入    (已知)
 名称=SHELL32.ShellExecuteA
名称位于 中原键盘, 条目 381
 地址=0044D2A0
 区段=.rdata
 类型=输入    (已知)
 名称=KERNEL32.WinExec
分别在这两个函数上的每个参考点上下断点后,F9运行程序,会中断在
00401A84  |.  FF15 50D34400 call    near dword ptr [<&SHELL32.ShellE>; \ShellExecuteA
这就是我们要找的后台监控程序;为了验证我们的想法是否正确我们重新载入我们破解后的文件2.exe 取消掉所有断点然后将复制代码0012EC68   00000000  |hWnd = NULL
0012EC6C   0045D258  |Operation = "open"
0012EC70   022C7348  |FileName = "C:\WINDOWS\system32\winlog.exe"
0012EC74   00000000  |Parameters = NULL
0012EC78   00000000  |DefDir = NULL
0012EC7C   00000005  \IsShown = 5
这段代码全部 nop掉,F9运行程序,这时个程序没有挂掉,并且标题上写已经注册,如果我们点击启动监控的话,立刻主程序就会被挂掉。说明我们的想法没有错,的确是后台监控发现被爆破后关闭掉了主程序。到这一步之后我们又只有转到winlog.exe这个文件来开刀了。我们在任务管理器中先关闭掉winlog.exe这个进程。还是重新载入2.exe并将上面的nop掉,让这个主程序顺利运行。然后新开一个OD将:\WINDOWS\system32\winlog.exe载入复制代码00401A76      6A 05         push    5                                ; /IsShown = 5
00401A78      6A 00         push    0                                ; |DefDir = NULL
00401A7A      6A 00         push    0                                ; |Parameters = NULL
00401A7C      50            push    eax                              ; |FileName
00401A7D      68 58D24500   push    0045D258                         ; |open
00401A82      6A 00         push    0                                ; |hWnd = NULL
00401A84      FF15 50D34400 call    near dword ptr [<&SHELL32.ShellE>; \ShellExecuteA
整理一下思路:后台监控程序一定是读取了我们先前输入的错误注册码和订单验证之后才发现被爆破,因此我们可以在winlog.exe中找到相关的读取函数GetProfileString,这是读取win.ini文件的;我们可以打开win.ini文件发现以下是我们输入的注册码和订单号
 在这个函数的每个参考点上下断点,F9运行winlog.exe,观察每次中断时读取的key值如果是 notetext或noteid的话就说明到了关键点了。复制代码[keyscreen30]
version=1010
notetext=manbug
noteid=9494949494
 并将不是读取这两个key的断点去除,很快就会来到
 我们将所有断点都去除,然后ctrl+F9执行到返回调用处。复制代码00408E9D  |.  8B1D D0824300 mov     ebx, dword ptr [<&KERNEL32.GetPr>;  kernel32.GetProfileStringA
00408EA3  |.  68 00010000   push    100                              ; /BufSize = 100 (256.)
00408EA8  |.  F3:AB         rep     stos dword ptr es:[edi]          ; |
00408EAA  |.  8D4C24 10     lea     ecx, dword ptr [esp+10]          ; |
00408EAE  |.  51            push    ecx                              ; |ReturnBuffer
00408EAF  |.  68 147F4400   push    00447F14                         ; |Default = ""
00408EB4  |.  68 E4494400   push    004449E4                         ; |Key = "notetext"
00408EB9  |.  52            push    edx                              ; |Section
00408EBA  |.  FFD3          call    near ebx                         ; \GetProfileStringA
我们会看到有个PostMessageA并且是WM_QUIT,难道就是这句把我们的主程序给关了??大家可以验证一下,我是知道就是这句了,因为我验证了N次了。当然关键不在这了。我们找到这段函数的入口处,大家从头到尾分析一下跳转。复制代码0040540B   .  E8 403A0000   call    00408E50
00405410   .  51            push    ecx                    CTRL+F9会返回到这里
00405411   .  8BCC          mov     ecx, esp
00405413   .  8965 E8       mov     dword ptr [ebp-18], esp
00405416   .  68 5C444400   push    0044445C                         ;  ASCII "http://www.zhongyuantech.com.cn/check.asp"
0040541B   .  E8 D34F0200   call    0042A3F3
00405420   .  8D4D C4       lea     ecx, dword ptr [ebp-3C]
00405423   .  E8 783C0000   call    004090A0
00405428   .  8B45 D8       mov     eax, dword ptr [ebp-28]
0040542B   .  85C0          test    eax, eax
0040542D   .  74 13         je      short 00405442
0040542F   .  8B87 E0010000 mov     eax, dword ptr [edi+1E0]
00405435   .  6A 00         push    0                                ; /lParam = 0
00405437   .  6A 00         push    0                                ; |wParam = 0
00405439   .  6A 12         push    12                               ; |Message = WM_QUIT
0040543B   .  50            push    eax                              ; |hWnd
0040543C   .  FF15 A4844300 call    near dword ptr [<&USER32.PostMes>; \PostMessageA
把0040537D 处nop掉就可以了,大家可以保存之后运行一下,当然要将保存的文件名改为winlog.exe并放在C:\WINDOWS\system32\这里主程序就不会挂掉了。到这里爆破还只能算是告一段落,还没有达到完全爆破,大家可以看主窗口的监控日期列表,随便点一天的记录,然后点向下一页,会发现没有任何变化,仍然只能看第一页,和未注册一样,说明可能有暗桩,那我们再次打开未被破解的主程序点向下一页会提示未注册,只能看一页,而爆破后的程序没有提示,因为被我们跳过了。怎么办?再次用od加载未爆破的主程序直接运行起来然后还是查找字符串将所有的“ 未注册提示”所在的汇编代码全部下断点,然后在监控日期列表中选择一条记录之后点下一页。会中断在复制代码00405350   .  55            push    ebp
00405351   .  8BEC          mov     ebp, esp
00405353   .  6A FF         push    -1
00405355   .  68 D85E4300   push    00435ED8                         ;  SE 处理程序安装
0040535A   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
00405360   .  50            push    eax
00405361   .  64:8925 00000>mov     dword ptr fs:[0], esp
00405368   .  83EC 30       sub     esp, 30
0040536B   .  A1 2089C401   mov     eax, dword ptr [1C48920]
00405370   .  53            push    ebx
00405371   .  56            push    esi
00405372   .  57            push    edi
00405373   .  8BF9          mov     edi, ecx
00405375   .  8965 F0       mov     dword ptr [ebp-10], esp
00405378   .  85C0          test    eax, eax
0040537A   .  897D EC       mov     dword ptr [ebp-14], edi
0040537D      74 18         je      short 00405397                ;归根结底就是此处跳了就会发送退出消息,把此处nop就可以了
0040537F   .  E8 476E0200   call    0042C1CB
00405384   .  8B4D F4       mov     ecx, dword ptr [ebp-C]
00405387   .  64:890D 00000>mov     dword ptr fs:[0], ecx
0040538E   .  5F            pop     edi
0040538F   .  5E            pop     esi
00405390   .  5B            pop     ebx
00405391   .  8BE5          mov     esp, ebp
00405393   .  5D            pop     ebp
00405394   .  C2 0400       retn    4                                ;直接返回了不会发送退出消息
00405397   >  6A 00         push    0                                ; /Default = 0
00405399   .  BB 01000000   mov     ebx, 1                           ; |
0040539E   .  68 94444400   push    00444494                         ; |Key = "lookwnd"
004053A3   .  68 88444400   push    00444488                         ; |Section = "keyscreen30"
004053A8   .  891D 2089C401 mov     dword ptr [1C48920], ebx         ; |
004053AE   .  C745 FC 00000>mov     dword ptr [ebp-4], 0             ; |
004053B5   .  FF15 CC824300 call    near dword ptr [<&KERNEL32.GetPr>; \GetProfileIntA
004053BB   .  8BF0          mov     esi, eax
004053BD   .  85F6          test    esi, esi
004053BF   .  0F84 94000000 je      00405459
004053C5   .  56            push    esi                              ; /hWnd
004053C6   .  FF15 9C844300 call    near dword ptr [<&USER32.IsWindo>; \IsWindow
004053CC   .  85C0          test    eax, eax
004053CE   .  0F84 85000000 je      00405459
004053D4   .  56            push    esi                              ; /hWnd
004053D5   .  FF15 28844300 call    near dword ptr [<&USER32.IsWindo>; \IsWindowVisible
004053DB   .  85C0          test    eax, eax
004053DD   .  74 7A         je      short 00405459
004053DF   .  3BB7 E0010000 cmp     esi, dword ptr [edi+1E0]
004053E5   .  74 72         je      short 00405459
004053E7   .  8D4D C4       lea     ecx, dword ptr [ebp-3C]
004053EA   .  89B7 E0010000 mov     dword ptr [edi+1E0], esi
004053F0   .  E8 0B390000   call    00408D00
004053F5   .  51            push    ecx
004053F6   .  885D FC       mov     byte ptr [ebp-4], bl
004053F9   .  8BCC          mov     ecx, esp
004053FB   .  8965 E8       mov     dword ptr [ebp-18], esp
004053FE   .  68 88444400   push    00444488                         ;  ASCII "keyscreen30"
00405403   .  E8 EB4F0200   call    0042A3F3
00405408   .  8D4D C4       lea     ecx, dword ptr [ebp-3C]
0040540B   .  E8 403A0000   call    00408E50
00405410   .  51            push    ecx
00405411   .  8BCC          mov     ecx, esp
00405413   .  8965 E8       mov     dword ptr [ebp-18], esp
00405416   .  68 5C444400   push    0044445C                         ;  ASCII "http://www.zhongyuantech.com.cn/check.asp"
0040541B   .  E8 D34F0200   call    0042A3F3
00405420   .  8D4D C4       lea     ecx, dword ptr [ebp-3C]
00405423   .  E8 783C0000   call    004090A0
00405428   .  8B45 D8       mov     eax, dword ptr [ebp-28]
0040542B   .  85C0          test    eax, eax
0040542D   .  74 13         je      short 00405442
0040542F   .  8B87 E0010000 mov     eax, dword ptr [edi+1E0]
00405435   .  6A 00         push    0                                ; /lParam = 0
00405437   .  6A 00         push    0                                ; |wParam = 0
00405439   .  6A 12         push    12                               ; |Message = WM_QUIT
0040543B   .  50            push    eax                              ; |hWnd
0040543C   .  FF15 A4844300 call    near dword ptr [<&USER32.PostMes>; \PostMessageA
记下这个地址,关闭程序用od再次载入已经爆破过的程序2.exe直接ctrl+g找到 040EDC6 处缶上找在0040EDB5 处下断点,复制代码0040EDC6   .  68 BCD84500   push    offset <aVSS>                    ;  未注册提示
0040EDCB   .  8D8C24 A00000>lea     ecx, dword ptr [esp+A0]
0040EDD2   .  C78424 B00000>mov     dword ptr [esp+B0], 0
0040EDDD   .  E8 ADC90200   call    <CString::operator=(char const *>
0040EDE2   .  68 D0D84500   push    offset <aVS>                     ;  未注册只能看第一页!%s %d.%d
0040EDE7   .  8D8C24 A40000>lea     ecx, dword ptr [esp+A4]
0040EDEE   .  E8 9CC90200   call    <CString::operator=(char const *>
直接运行程序点开监控日期列表 ,点下一页,会中断,然后单步走复制代码0040EDB5   . /0F84 CE000000 je      <loc_40EE89>
0040EDBB   . |6A 00         push    0
0040EDBD   . |8D4C24 08     lea     ecx, dword ptr [esp+8]
0040EDC1   . |E8 5AEDFFFF   call    <sub_40DB20>
0040EDC6   . |68 BCD84500   push    offset <aVSS>                    ;  未注册提示
0040EDCB   . |8D8C24 A00000>lea     ecx, dword ptr [esp+A0]
跟进0040EE8E之后依然单步走复制代码0040EE89 > > \B9 50194600   mov     ecx, offset <unk_461950>         ;  loc_40EE89
0040EE8E   .  E8 DD37FFFF   call    <sub_402670>                     ;这个F7跟进
0040EE93   .  85C0          test    eax, eax
0040EE95   .  74 11         je      short <loc_40EEA8>
断续F8单步走复制代码004026B3  |.  48            dec     eax
004026B4  |.  8941 48       mov     dword ptr [ecx+48], eax
004026B7 >|>  E8 B4FBFFFF   call    <sub_402270>                     ;  此处F7跟进
004026BC  |.  B8 01000000   mov     eax, 1
其实这些都是要仔细调试,N次测试后才找到的,我在上面只是给了些爆破的思路,大家有兴趣的可以试一下!复制代码004022D5  |.  68 581A4600   push    offset <Src>
004022DA  |.  50            push    eax
004022DB  |.  E8 CA820200   call    <__mbscmp>
004022E0  |.  83C4 08       add     esp, 8
004022E3  |.  85C0          test    eax, eax
004022E5  |.  75 06         jnz     short <loc_4022ED>                        ;将jnz改为jmp就可以完美爆破了
004022E7  |.  891D 98194600 mov     dword ptr [<dword_461998>], ebx
004022ED >|>  8B4424 10     mov     eax, dword ptr [esp+10]          ;  loc_4022ED
 二、完美注册的方法
 以下是程序本地验证的代码
 本地验证后然后是网络验证,我已经把注册机写出来了,代码如下:复制代码00413DBE  |.  F3:A4         rep     movs byte ptr es:[edi], byte ptr>
00413DC0  |.  8B4C24 28     mov     ecx, dword ptr [esp+28]          ;  假码前四个字母送ecx
00413DC4  |.  BF 0A000000   mov     edi, 0A                          ;  edi=0xa
00413DC9  |.  0FBEF1        movsx   esi, cl                          ;  第一个字母送esi
00413DCC  |.  8BC6          mov     eax, esi                         ;  eax=esi
00413DCE  |.  0BC3          or      eax, ebx                         ;  eax=eax|0x13;ebx=13是个全局变量已经初使化为0x13
00413DD0  |.  99            cdq
00413DD1  |.  F7FF          idiv    edi                              ;  eax/0xa
00413DD3  |.  0FBE4424 2B   movsx   eax, byte ptr [esp+2B]           ;  将假码第4位字母送eax
00413DD8  |.  83C2 30       add     edx, 30                          ;  将先前的余数加上0x30
00413DDB  |.  3BC2          cmp     eax, edx
00413DDD  |.  0F85 E0000000 jnz     <loc_413EC3>
00413DE3  |.  0FBEC5        movsx   eax, ch                          ;  第2个字母送eax
00413DE6  |.  8B4C24 2C     mov     ecx, dword ptr [esp+2C]          ;  从第5个字母开始送4个字母到ecx
00413DEA  |.  894424 1C     mov     dword ptr [esp+1C], eax
00413DEE  |.  0FBED1        movsx   edx, cl                          ;  第5个字母送edx
00413DF1  |.  0BC3          or      eax, ebx                         ;  eax=eax|0x13
00413DF3  |.  895424 14     mov     dword ptr [esp+14], edx
00413DF7  |.  99            cdq
00413DF8  |.  BF 1A000000   mov     edi, 1A                          ;  edi=0x1A
00413DFD  |.  F7FF          idiv    edi                              ;  eax/0x1A
00413DFF  |.  8B4424 14     mov     eax, dword ptr [esp+14]
00413E03  |.  83C2 41       add     edx, 41                          ;  余数加上0x41
00413E06  |.  3BC2          cmp     eax, edx
00413E08  |.  0F85 B5000000 jnz     <loc_413EC3>
00413E0E  |.  0FBE7C24 2A   movsx   edi, byte ptr [esp+2A]           ;  第3个字母送edi
00413E13  |.  8BC7          mov     eax, edi                         ;  eax=edi
00413E15  |.  0BC3          or      eax, ebx                         ;  eax=eax|0x13
00413E17  |.  BB 1A000000   mov     ebx, 1A                          ;  ebx=0x1A
00413E1C  |.  99            cdq
00413E1D  |.  F7FB          idiv    ebx                              ;  eax/0x1A
00413E1F  |.  0FBECD        movsx   ecx, ch                          ;  第6个字母送ecx
00413E22  |.  894C24 20     mov     dword ptr [esp+20], ecx
00413E26  |.  83C2 61       add     edx, 61                          ;  余数加上0x61
00413E29  |.  3BCA          cmp     ecx, edx
00413E2B  |.  0F85 92000000 jnz     <loc_413EC3>
00413E31  |.  8B4C24 18     mov     ecx, dword ptr [esp+18]          ;  ecx=0x12 全局变量中初使化了
00413E35  |.  8BC6          mov     eax, esi                         ;  第一个字母送eax
00413E37  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
00413E39  |.  BE 0A000000   mov     esi, 0A                          ;  esi=0x0a
00413E3E  |.  99            cdq
00413E3F  |.  F7FE          idiv    esi                              ;  eax/0x0a
00413E41  |.  0FBE4424 2E   movsx   eax, byte ptr [esp+2E]           ;  第7个字母送eax
00413E46  |.  83C2 30       add     edx, 30                          ;  余数加上0x30
00413E49  |.  3BC2          cmp     eax, edx
00413E4B  |.  75 76         jnz     short <loc_413EC3>
00413E4D  |.  8B4424 1C     mov     eax, dword ptr [esp+1C]          ;  第2个字母送eax
00413E51  |.  8BF3          mov     esi, ebx                         ;  esi=0x1A
00413E53  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
00413E55  |.  99            cdq
00413E56  |.  F7FE          idiv    esi                              ;  eax/0x1A
00413E58  |.  0FBE4424 2F   movsx   eax, byte ptr [esp+2F]           ;  第8个字母送eax
00413E5D  |.  83C2 61       add     edx, 61                          ;  余数加上0x61
00413E60  |.  3BC2          cmp     eax, edx
00413E62  |.  75 5F         jnz     short <loc_413EC3>
00413E64  |.  8BC7          mov     eax, edi                         ;  第3个字母送eax
00413E66  |.  8B5C24 30     mov     ebx, dword ptr [esp+30]          ;  从第9个字母开始送4个字母到ebx
00413E6A  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
00413E6C  |.  99            cdq
00413E6D  |.  F7FE          idiv    esi                              ;  eax/0x1A
00413E6F  |.  0FBEC3        movsx   eax, bl                          ;  第9个字母送eax
00413E72  |.  83C2 41       add     edx, 41                          ;  余数加上0x41
00413E75  |.  3BC2          cmp     eax, edx
00413E77  |.  75 4A         jnz     short <loc_413EC3>
00413E79  |.  0FBE4424 2B   movsx   eax, byte ptr [esp+2B]           ;  第4个字母送eax
00413E7E  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
00413E80  |.  BE 0A000000   mov     esi, 0A                          ;  esi=0xA
00413E85  |.  99            cdq
00413E86  |.  F7FE          idiv    esi                              ;  eax/0xA
00413E88  |.  0FBEC7        movsx   eax, bh                          ;  第10个字母送eax
00413E8B  |.  83C2 30       add     edx, 30                          ;  余数加0x30
00413E8E  |.  3BC2          cmp     eax, edx
00413E90  |.  75 31         jnz     short <loc_413EC3>
00413E92  |.  8B4424 14     mov     eax, dword ptr [esp+14]          ;  第5个字母送eax
00413E96  |.  BE 1A000000   mov     esi, 1A
00413E9B  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
00413E9D  |.  99            cdq
00413E9E  |.  F7FE          idiv    esi                              ;  eax/0x1A
00413EA0  |.  0FBE4424 32   movsx   eax, byte ptr [esp+32]           ;  第11个字母送eax
00413EA5  |.  83C2 61       add     edx, 61                          ;  余数加0x61
00413EA8  |.  3BC2          cmp     eax, edx
00413EAA  |.  75 17         jnz     short <loc_413EC3>
00413EAC  |.  8B4424 20     mov     eax, dword ptr [esp+20]          ;  第6个字母送eax
00413EB0  |.  23C1          and     eax, ecx                         ;  eax=eax&0x12
00413EB2  |.  8BCE          mov     ecx, esi
00413EB4  |.  99            cdq
00413EB5  |.  F7F9          idiv    ecx                              ;  eax/0x1A
00413EB7  |.  0FBE4424 33   movsx   eax, byte ptr [esp+33]           ;  第12个字母送eax
00413EBC  |.  83C2 41       add     edx, 41                          ;  余数加0x41
00413EBF  |.  3BC2          cmp     eax, edx
00413EC1  |.  74 2A         je      short <loc_413EED>
00413EC3 >|>  C745 14 02000>mov     [arg.4], 2                       ;  loc_413EC3
00413ECA >|>  8D4C24 10     lea     ecx, dword ptr [esp+10]          ;  loc_413ECA
00413ECE  |.  C64424 3C 00  mov     byte ptr [esp+3C], 0
00413ED3  |.  E8 2E770200   call    <CString::~CString(void)>
00413ED8  |.  8D4C24 44     lea     ecx, dword ptr [esp+44]
00413EDC  |.  C74424 3C FFF>mov     dword ptr [esp+3C], -1
00413EE4  |.  E8 1D770200   call    <CString::~CString(void)>
00413EE9  |.  33C0          xor     eax, eax
00413EEB  |.  EB 59         jmp     short <loc_413F46>
00413EED >|>  C745 14 01000>mov     [arg.4], 1                       ;  loc_413EED
00413EF4  |.  8B3D ECD24400 mov     edi, dword ptr [<&KERNEL32.Sleep>;  kernel32.Sleep
00413EFA  |.  33F6          xor     esi, esi
00413EFC >|>  8BCD          /mov     ecx, ebp                        ;  loc_413EFC
00413EFE  |.  E8 DDFCFFFF   |call    <sub_413BE0>                    ;  网络验证
好了,就写到这里了,其实这不是真正的注册机,因为利用了网站的漏洞!附
 
 [ 本帖最后由 manbug 于 2010-1-22 14:08 编辑 ]
 | 
 评分
查看全部评分
 |