|
好了,开始分析 爆破很简单 爆破完后,就寻思着写注册机看看 小菜表示第一次写注册机 有点小激动 还好算法不复杂,最终写出来了, 为了避免非零基础人群看过后感到身体不适、头晕恶心、易怒及粗口,请点击右上角~~~~~~~~~~~ 分析错误之处还望大牛赐教!--------------------------------------------------------------------------------【相关附件】程序链接: 附件.rar (2408 K) 下载次数:0 解压密码:xiaohan注册机链接: FIWW注册机.rar (2112 K) 下载次数:0 解压密码:xiaohan 【分析过程】爆破不多说运行程序,OD附加 搜索ASCII码 RES_Registration_Error 直接来到上方的CALL 下段004D3A01 E8 7A4E0000 call Clearpch.004D8880 ; 算法CALL 跟进004D8880004D8880 55 push ebp ; 头部004D8881 8BEC mov ebp,esp004D8883 6A 00 push 0x0004D8885 53 push ebx004D8886 56 push esi004D8887 8BF0 mov esi,eax ; esi传入假注册码004D8889 33C0 xor eax,eax ; eax清零004D888B 55 push ebp004D888C 68 1C894D00 push Clearpch.004D891C004D8891 64:FF30 push dword ptr fs:[eax]004D8894 64:8920 mov dword ptr fs:[eax],esp004D8897 33DB xor ebx,ebx004D8899 8D45 FC lea eax,dword ptr ss:[ebp-0x4]004D889C 8BD6 mov edx,esi ; edx传入假注册码004D889E E8 B9BFF2FF call Clearpch.0040485C004D88A3 8B45 FC mov eax,dword ptr ss:[ebp-0x4] ; eax传入假注册码004D88A6 E8 D9C1F2FF call Clearpch.00404A84004D88AB 83F8 09 cmp eax,0x9 ; 判断注册码位数是否是9位004D88AE /75 56 jnz short Clearpch.004D8906 ; 如果是9位 继续进行注册我们输入的是123456,不足9位,这里就跳过注册了,重新输入9位注册码:123456789 来到这里,继续向下,来到004D88B0,单步004D88B0 8B45 FC mov eax,dword ptr ss:[ebp-0x4] ; 取假注册码传入eax004D88B3 33C9 xor ecx,ecx ; ecx清零004D88B5 8A08 mov cl,byte ptr ds:[eax] ; 假注册码第1位传入cl004D88B7 8BC1 mov eax,ecx ; 假注册码第1位传入eax004D88B9 8B55 FC mov edx,dword ptr ss:[ebp-0x4] ; 取假注册码放在edx中004D88BC 0FB672 03 movzx esi,byte ptr ds:[edx+0x3] ; 假注册码第4位传入esi004D88C0 03C6 add eax,esi ; 假注册码1、4位相加 数值放在eax004D88C2 83E8 60 sub eax,0x60 ; 1、4位的和-0x60 放入eax004D88C5 83F8 08 cmp eax,0x8 ; 判断1、4位之和是否大于8004D88C8 7E 3C jle short Clearpch.004D8906 ; 大于8 则继续注册我们输入的假注册码1、4位之和是1+4=5,小于8,第二次跳过注册,所以把注册码第1位改成5吧 重新输入新注册码523456789,继续向下,来到04D88CA,单步004D88CA 8BC1 mov eax,ecx ; 假注册码第1位传入eax004D88CC 8B55 FC mov edx,dword ptr ss:[ebp-0x4] ; 假注册码传入edx004D88CF 0FB652 02 movzx edx,byte ptr ds:[edx+0x2] ; 假注册码第3位传入edx004D88D3 03C2 add eax,edx ; 假注册码1、3位相加 放在eax004D88D5 03C6 add eax,esi ; 假注册码1、3位之和再加上第4位,结果放在eax004D88D7 2D 90000000 sub eax,0x90 ; 相加后的和-90 传入eax004D88DC B9 0A000000 mov ecx,0xA ; ecx赋值A004D88E1 99 cdq ; 双字节eax以四字节扩展到edx004D88E2 F7F9 idiv ecx ; eax除以ecx(A=10) 取余数 传入edx004D88E4 8B45 FC mov eax,dword ptr ss:[ebp-0x4] ; 假注册码传入eax004D88E7 0FB640 05 movzx eax,byte ptr ds:[eax+0x5] ; 取假注册码第6位放在eax004D88EB 83E8 30 sub eax,0x30 ; eax转换成十六进制004D88EE 3BD0 cmp edx,eax ; 判断第6位是否=刚才取的余数004D88F0 75 14 jnz short Clearpch.004D8906 ; 等于的话 继续注册到这里,我们先算一下假注册码中第6位的数值:(5+3+4)%10=2,正确的应该是2,不是我们之前输入的6, 再次修改下注册码为:523452789,重新注册。再次来到004D88F0,跳转没实现,继续向下单步004D88F2 8B45 FC mov eax,dword ptr ss:[ebp-0x4] ; 假注册码传入eax004D88F5 8078 01 35 cmp byte ptr ds:[eax+0x1],0x35 ; 判断第2位的ASCII码值是否大于35 转换成十六进制就是第2位是否大于5004D88F9 76 0B jbe short Clearpch.004D8906 ; 大于5 继续注册假注册码第2位是2,明显不行,我们换成6,新注册码为:563452789 再次来到004D88F9,跳转没实现,继续单步来到: 004D88FB 8B45 FC mov eax,dword ptr ss:[ebp-0x4] ; 假注册码再次传入eax004D88FE 8078 04 33 cmp byte ptr ds:[eax+0x4],0x33 ; 判断第5位是否小于3004D8902 73 02 jnb short Clearpch.004D8906 ; 小于3 继续注册这里又对第5位做了一个判断,我门修改成2,假注册码变为:563422789,离真注册码越来越近了 再次来到这里,继续向下单步 004D8904 B3 01 mov bl,0x1 ; bl传入1 这时候已经把注册码转到00B99DA0中去了004D8906 33C0 xor eax,eax ; eax清零004D8908 5A pop edx ; edx是刚才的余数 弹出004D8909 59 pop ecx ; ecx是刚才的除数(A=10) 弹出004D890A 59 pop ecx ; 0018EF50到这里,算法就结束了,我们继续向下单步,看看它在哪里返回上一层的算法CALL下面 004D890B 64:8910 mov dword ptr fs:[eax],edx004D890E 68 23894D00 push Clearpch.004D8923004D8913 8D45 FC lea eax,dword ptr ss:[ebp-0x4]004D8916 E8 A9BEF2FF call Clearpch.004047C4004D891B C3 retn004D891C ^ E9 03B8F2FF jmp Clearpch.00404124004D8921 ^ EB F0 jmp short Clearpch.004D8913004D8923 8BC3 mov eax,ebx004D8925 5E pop esi004D8926 5B pop ebx004D8927 59 pop ecx004D8928 5D pop ebp004D8929 C3 retn ;在这里返回到散发CALL下面了这个retn返回到004D3A06了,继续向下, 004D39FE 8B45 FC mov eax,dword ptr ss:[ebp-0x4]004D3A01 E8 7A4E0000 call Clearpch.004D8880 ; 这是我们刚才进入的算法CALL004D3A06 84C0 test al,al ;刚才那个retn回到了这一句004D3A08 75 4B jnz short Clearpch.004D3A55 ;来到这里,我们发现跳转实现了,不提示错误了004D3A0A 6A 10 push 0x10004D3A0C 8D55 F8 lea edx,dword ptr ss:[ebp-0x8]004D3A0F A1 A4EE4D00 mov eax,dword ptr ds:[0x4DEEA4]好了,让程序跑起来,发现出现程序界面了,原来那个烦人的NAG也去掉了。重新运行一下程序,发现注册过后的程序,开启的时候已经不会提示让你注册了综上,我们的注册码经过多次修改,由123456变为563422789,已经成为真注册码了。 总结下吧,真注册码的要满足的条件:一:注册码必须是9位二:注册码第1位跟第4位的和要大于8三:注册码的第1、3、4位之和除以10的余数必须和注册码的第6位相等四:注册码的第2位必须大于5五:注册码的第5位必须小于3 至于剩下的几位数,算法中没做运算,随意取值就行。 OK,下面就是写注册机。至于注册机,怎么顺手怎么写我用易语言简单写了下,相信能看到这里的,都能写出来。源码我一起打包,上传网盘。教程到此结束。-----------------------------------------------------------------------这是我第四次修改帖子了,由于是新手,帖子格式老是调整不好。还好破解算法,用了两个半小时,整理出来,又是四十多分钟,修改了四次,又差不多用了3个小时 在这感谢wgz001大大和Hmily大大指导了,要不我现在还搞不定排版。 终于完工了~~~~~~~~~~
|