- UID
- 64991
注册时间2010-1-1
阅读权限20
最后登录1970-1-1
以武会友
该用户从未签到
|
[ 破文标题 ] 中原键盘屏幕全记录 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
复制代码 这一行,双击来到代码处- 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 *>
复制代码 看到0040C5D4 处有一个je会跳过注册提示,由于软件面里有很多类似的提示改这一处je达不到爆破效果,我们向上找,会么到test eax, eax说明当eax为0时则跳,继续向上找eax的值是怎么来的。mov eax, dword ptr [<dword_461A04>] 可以看到eax的值来自[461A04]处,我们在461A04处下硬件访问断点,F9运行程序,程序会中断在下面 004139ED处- 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 *>
复制代码 可以看到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(..)重新载入程序,查找当前模块中的名称,会找到以下两条记录:- 名称位于 中原键盘, 条目 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文件发现以下是我们输入的注册码和订单号- [keyscreen30]
- 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:[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
复制代码 我们将所有断点都去除,然后ctrl+F9执行到返回调用处。- 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
复制代码 我们会看到有个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:[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
复制代码 把0040537D 处nop掉就可以了,大家可以保存之后运行一下,当然要将保存的文件名改为winlog.exe并放在C:\WINDOWS\system32\这里主程序就不会挂掉了。到这里爆破还只能算是告一段落,还没有达到完全爆破,大家可以看主窗口的监控日期列表,随便点一天的记录,然后点向下一页,会发现没有任何变化,仍然只能看第一页,和未注册一样,说明可能有暗桩,那我们再次打开未被破解的主程序点向下一页会提示未注册,只能看一页,而爆破后的程序没有提示,因为被我们跳过了。怎么办?再次用od加载未爆破的主程序直接运行起来然后还是查找字符串将所有的“ 未注册提示”所在的汇编代码全部下断点,然后在监控日期列表中选择一条记录之后点下一页。会中断在- 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 *>
复制代码 记下这个地址,关闭程序用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 [esp+8]
- 0040EDC1 . |E8 5AEDFFFF call <sub_40DB20>
- 0040EDC6 . |68 BCD84500 push offset <aVSS> ; 未注册提示
- 0040EDCB . |8D8C24 A00000>lea ecx, dword ptr [esp+A0]
复制代码 直接运行程序点开监控日期列表 ,点下一页,会中断,然后单步走- 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 [ecx+48], 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 [esp+10] ; loc_4022ED
复制代码 其实这些都是要仔细调试,N次测试后才找到的,我在上面只是给了些爆破的思路,大家有兴趣的可以试一下!
二、完美注册的方法
以下是程序本地验证的代码- 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 编辑 ] |
评分
-
查看全部评分
|