manbug 发表于 2010-1-22 13:58:17

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

[ 破文标题 ] 中原键盘屏幕全记录 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/viewthread.php?tid=53165&extra=page%3D1
进入正题,首先用PEID查壳,无壳,是用VC写的东东。直接跑一次,会提示未注册,要求注册,随便输入个注册码和订单号,从这个订单号就可以看出可能是网络验证的了。点注册后会提示"关闭软件,查看软件是否注册成功!",说明是重启验证了,点确定进入主界面,到处点点看看有什么提示之类的,熟悉一下软件流程,会看到主界面有一个启动监视器或关闭监视器的按钮,可以看出有一个后台监视程序。OK,关闭程序。
整理一下思路:1.未注册会有提示,这是一个突破口。可以通过字符串来找。
                2.重启验证,无非就是写文件或写注册表。可以拦截相关函数
将主程序丢入od,不运行,直接查找字符串,可以查到很多未注册的提示相关的字符串我们找到Ultra String Reference, 条目 274
Address=0040C5FF
Disassembly=push    offset <aVSSI>
Text String=未注册不能设置登录密码!%s\winlog.exe这一行,双击来到代码处0040C5B0   .64:A1 0000000>mov   eax, dword ptr fs:
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:, 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
0040C5DE   .E8 3D150000   call    <sub_40DB20>
0040C5E3   .68 BCD84500   push    offset <aVSS>                  ;未注册提示
0040C5E8   .8D8C24 000100>lea   ecx, dword ptr
0040C5EF   .C78424 100100>mov   dword ptr , 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
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处下硬件访问断点,F9运行程序,程序会中断在下面 004139ED处004139D8|.C746 04 13000>mov   dword ptr , 13
004139DF|.C746 08 12000>mov   dword ptr , 12
004139E6      C746 14 02000>mov   dword ptr , 2      这就是爆破处esi+14正好等于00461A04,将2改为0
004139ED|.E8 9D7D0200   call    <CString::operator=(char const *>可以看到004139E6处是给赋值为2,而我们开始分析此处如果为0的话就会跳过未注册提示,这里我们把2改为0,保存为2.exe后试试;我们运行改为0后的2.exe文件,的确可以将注册提示跳过,并且主程序也提示已经注册,但是有一个问题就是主程序一闪就被关闭了。这说明我们改的地方没有错,而程序存在自校验。自校验分为两种1种是文件校验,另一种是内存校验。其实本程序这两种都不是,而是后台程序校验。我们来分析一下;我们用OD载入未修改的主文件找到004139E6处,将dword ptr , 2改为dword ptr , 0之后按F9运行程序,可以发现程序还是会被关闭,这可以排除文件校验,因为我们只改了内存没改文件!重新载入程序还是将004139E6处,将dword ptr , 2改为dword ptr , 0;然后F8五次后,在程序入口点下硬件访问断点,然后F9运行,发现程序没有中断,还是挂了,说明也没有内存断点。整理一下思路程序本身没有自校验,有可能在后台监控的程序上。那我们找找后台监控的程序名;既然在主程序上有启动监视和关闭监视的话那我们可以从以下API入手:hellExecute(..) WinExec(...) CreateProcess(..)重新载入程序,查找当前模块中的名称,会找到以下两条记录:名称位于 中原键盘, 条目 349
地址=0044D350
区段=.rdata
类型=输入    (已知)
名称=SHELL32.ShellExecuteA

名称位于 中原键盘, 条目 381
地址=0044D2A0
区段=.rdata
类型=输入    (已知)
名称=KERNEL32.WinExec
分别在这两个函数上的每个参考点上下断点后,F9运行程序,会中断在
00401A84|.FF15 50D34400 call    near dword ptr [<&SHELL32.ShellE>; \ShellExecuteA查看右下边的堆栈窗口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这就是我们要找的后台监控程序;为了验证我们的想法是否正确我们重新载入我们破解后的文件2.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这段代码全部 nop掉,F9运行程序,这时个程序没有挂掉,并且标题上写已经注册,如果我们点击启动监控的话,立刻主程序就会被挂掉。说明我们的想法没有错,的确是后台监控发现被爆破后关闭掉了主程序。到这一步之后我们又只有转到winlog.exe这个文件来开刀了。我们在任务管理器中先关闭掉winlog.exe这个进程。还是重新载入2.exe并将上面的nop掉,让这个主程序顺利运行。然后新开一个OD将:\WINDOWS\system32\winlog.exe载入
整理一下思路:后台监控程序一定是读取了我们先前输入的错误注册码和订单验证之后才发现被爆破,因此我们可以在winlog.exe中找到相关的读取函数GetProfileString,这是读取win.ini文件的;我们可以打开win.ini文件发现以下是我们输入的注册码和订单号
version=1010
notetext=manbug
noteid=9494949494在这个函数的每个参考点上下断点,F9运行winlog.exe,观察每次中断时读取的key值如果是 notetext或noteid的话就说明到了关键点了。

并将不是读取这两个key的断点去除,很快就会来到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:          ; |
00408EAA|.8D4C24 10   lea   ecx, dword ptr           ; |
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我们将所有断点都去除,然后ctrl+F9执行到返回调用处。0040540B   .E8 403A0000   call    00408E50
00405410   .51            push    ecx                  CTRL+F9会返回到这里
00405411   .8BCC          mov   ecx, esp
00405413   .8965 E8       mov   dword ptr , 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
00405423   .E8 783C0000   call    004090A0
00405428   .8B45 D8       mov   eax, dword ptr
0040542B   .85C0          test    eax, eax
0040542D   .74 13         je      short 00405442
0040542F   .8B87 E0010000 mov   eax, dword ptr
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我们会看到有个PostMessageA并且是WM_QUIT,难道就是这句把我们的主程序给关了??大家可以验证一下,我是知道就是这句了,因为我验证了N次了。当然关键不在这了。我们找到这段函数的入口处,大家从头到尾分析一下跳转。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:
00405360   .50            push    eax
00405361   .64:8925 00000>mov   dword ptr fs:, esp
00405368   .83EC 30       sub   esp, 30
0040536B   .A1 2089C401   mov   eax, dword ptr
00405370   .53            push    ebx
00405371   .56            push    esi
00405372   .57            push    edi
00405373   .8BF9          mov   edi, ecx
00405375   .8965 F0       mov   dword ptr , esp
00405378   .85C0          test    eax, eax
0040537A   .897D EC       mov   dword ptr , edi
0040537D      74 18         je      short 00405397                ;归根结底就是此处跳了就会发送退出消息,把此处nop就可以了
0040537F   .E8 476E0200   call    0042C1CB
00405384   .8B4D F4       mov   ecx, dword ptr
00405387   .64:890D 00000>mov   dword ptr fs:, 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 , ebx         ; |
004053AE   .C745 FC 00000>mov   dword ptr , 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
004053E5   .74 72         je      short 00405459
004053E7   .8D4D C4       lea   ecx, dword ptr
004053EA   .89B7 E0010000 mov   dword ptr , esi
004053F0   .E8 0B390000   call    00408D00
004053F5   .51            push    ecx
004053F6   .885D FC       mov   byte ptr , bl
004053F9   .8BCC          mov   ecx, esp
004053FB   .8965 E8       mov   dword ptr , esp
004053FE   .68 88444400   push    00444488                         ;ASCII "keyscreen30"
00405403   .E8 EB4F0200   call    0042A3F3
00405408   .8D4D C4       lea   ecx, dword ptr
0040540B   .E8 403A0000   call    00408E50
00405410   .51            push    ecx
00405411   .8BCC          mov   ecx, esp
00405413   .8965 E8       mov   dword ptr , 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
00405423   .E8 783C0000   call    004090A0
00405428   .8B45 D8       mov   eax, dword ptr
0040542B   .85C0          test    eax, eax
0040542D   .74 13         je      short 00405442
0040542F   .8B87 E0010000 mov   eax, dword ptr
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加载未爆破的主程序直接运行起来然后还是查找字符串将所有的“ 未注册提示”所在的汇编代码全部下断点,然后在监控日期列表中选择一条记录之后点下一页。会中断在0040EDC6   .68 BCD84500   push    offset <aVSS>                  ;未注册提示
0040EDCB   .8D8C24 A00000>lea   ecx, dword ptr
0040EDD2   .C78424 B00000>mov   dword ptr , 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
0040EDEE   .E8 9CC90200   call    <CString::operator=(char const *>记下这个地址,关闭程序用od再次载入已经爆破过的程序2.exe直接ctrl+g找到 040EDC6 处缶上找在0040EDB5 处下断点,0040EDB5   . /0F84 CE000000 je      <loc_40EE89>
0040EDBB   . |6A 00         push    0
0040EDBD   . |8D4C24 08   lea   ecx, dword ptr
0040EDC1   . |E8 5AEDFFFF   call    <sub_40DB20>
0040EDC6   . |68 BCD84500   push    offset <aVSS>                  ;未注册提示
0040EDCB   . |8D8C24 A00000>lea   ecx, dword ptr 直接运行程序点开监控日期列表 ,点下一页,会中断,然后单步走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>跟进0040EE8E之后依然单步走004026B3|.48            dec   eax
004026B4|.8941 48       mov   dword ptr , eax
004026B7 >|>E8 B4FBFFFF   call    <sub_402270>                     ;此处F7跟进
004026BC|.B8 01000000   mov   eax, 1断续F8单步走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           ;loc_4022ED其实这些都是要仔细调试,N次测试后才找到的,我在上面只是给了些爆破的思路,大家有兴趣的可以试一下!

二、完美注册的方法
以下是程序本地验证的代码00413DBE|.F3:A4         rep   movs byte ptr es:, byte ptr>
00413DC0|.8B4C24 28   mov   ecx, dword ptr           ;假码前四个字母送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          ;将假码第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           ;从第5个字母开始送4个字母到ecx
00413DEA|.894424 1C   mov   dword ptr , eax
00413DEE|.0FBED1      movsx   edx, cl                        ;第5个字母送edx
00413DF1|.0BC3          or      eax, ebx                         ;eax=eax|0x13
00413DF3|.895424 14   mov   dword ptr , 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
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          ;第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 , 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           ;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          ;第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           ;第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          ;第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           ;从第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          ;第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           ;第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          ;第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           ;第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          ;第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   , 2                     ;loc_413EC3
00413ECA >|>8D4C24 10   lea   ecx, dword ptr           ;loc_413ECA
00413ECE|.C64424 3C 00mov   byte ptr , 0
00413ED3|.E8 2E770200   call    <CString::~CString(void)>
00413ED8|.8D4C24 44   lea   ecx, dword ptr
00413EDC|.C74424 3C FFF>mov   dword ptr , -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   , 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>                  ;网络验证本地验证后然后是网络验证,我已经把注册机写出来了,代码如下:
**** Hidden Message *****好了,就写到这里了,其实这不是真正的注册机,因为利用了网站的漏洞!附

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

月之精灵 发表于 2010-1-22 14:11:49

不错,不错,希望能再次分享您的大作

scgycxzzc 发表于 2010-1-22 15:40:17

谢谢楼主提供,好好学习/:good

lgyywk 发表于 2010-1-22 16:05:31

谢谢分享了。

mgxz 发表于 2010-1-22 19:33:09

看下。。。。。。。。

manbug 发表于 2010-1-22 21:23:11

感谢斑竹 月之精灵 评分
感觉写破文比破解难度还要大些啊,呵呵
不知道什么时候能混个PYG成员!!

229402931 发表于 2010-1-22 22:17:04

加油,希望就在前方!

walili 发表于 2010-1-22 22:26:03

哇塞老兄,你真的是很牛唉。

yayaw 发表于 2010-1-22 22:28:48

看看....不错的东西.

GGLHY 发表于 2010-1-23 00:45:19

好贴!
顶下兄弟了!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 中原键盘屏幕全记录 3.8 爆破及完美注册 附注册机源代码