【破文标题】非常简单的速用流水帐财务软件 2.0注册算法
【破文作者】XXNB
【作者邮箱】
【作者主页】http://free.ys168.com/?binbinbin7456
【破解工具】OD
【破解平台】xpsp2
【软件名称】速用流水帐财务软件 2.0
【软件大小】2150KB
【原版下载】http://www.onlinedown.net/soft/48569.htm
【保护方式】注册码
【软件简介】速用流水帐财务软件可能会成为中国软件市场上最热门的产品,因为所有的企业都需要记帐,与纸管理相比,电脑记录信息的可靠性、准确性、搜索效率都优胜很多,遗憾的是国内众多软件公司在费尽心思做“大”软件的同时却忽略了使用者的习惯和接受程度,并且对于同样的财务数据,如何做出几本帐薄来应付不同情况的需要,也没有拿出什么较好的解决方案。......
【破解声明】向大侠们学习!!!献给学算法的朋友们!
------------------------------------------------------------------------
【破解过程】
------------------------------------------------------------------------
1、字符串查找“注册码错误,请重新操作”来到关键代码处:
0051EC08 /. 55 push ebp //我们就在这里下断吧,然后F9运行。点“注册”按钮后断在这里。
0051EC09 |. 8BEC mov ebp, esp
0051EC0B |. 6A 00 push 0 //往下执行,F8
0051EC0D |. 6A 00 push 0
0051EC0F |. 6A 00 push 0
0051EC11 |. 33C0 xor eax, eax
0051EC13 |. 55 push ebp
0051EC14 |. 68 51ED5100 push 0051ED51
0051EC19 |. 64:FF30 push dword ptr fs:[eax]
0051EC1C |. 64:8920 mov fs:[eax], esp
0051EC1F |. A1 F01F5200 mov eax, [521FF0]
0051EC24 |. 8B00 mov eax, [eax]
0051EC26 |. 50 push eax //ASCII "C:\WINDOWS\mdnsm.ini"
0051EC27 |. 8D45 F8 lea eax, [ebp-8]
0051EC2A |. 50 push eax
0051EC2B |. B9 64ED5100 mov ecx, 0051ED64 ; urv
0051EC30 |. BA 70ED5100 mov edx, 0051ED70 ; sv
0051EC35 |. B8 7CED5100 mov eax, 0051ED7C ; supermoney
0051EC3A |. E8 CD2AFFFF call 0051170C
0051EC3F |. 8B45 F8 mov eax, [ebp-8]
0051EC42 |. BA 90ED5100 mov edx, 0051ED90 ; regver
0051EC47 |. E8 D85AEEFF call 00404724
0051EC4C |. 75 0F jnz short 0051EC5D //爆破地方到了。
0051EC4E |. B8 A0ED5100 mov eax, 0051EDA0 ; 软件注册已经成功,谢谢您的支持!
0051EC53 |. E8 ACADF1FF call 00439A04
0051EC58 |. E9 D9000000 jmp 0051ED36
0051EC5D |> E8 DE2FFFFF call 00511C40
0051EC62 |. 8D55 FC lea edx, [ebp-4]
0051EC65 |. E8 A2AEEEFF call 00409B0C
0051EC6A |. A1 74205200 mov eax, [522074]
0051EC6F |. 8B00 mov eax, [eax]
0051EC71 |. 05 10030000 add eax, 310
0051EC76 |. BA CCED5100 mov edx, 0051EDCC ; 软件注册
0051EC7B |. E8 EC56EEFF call 0040436C
0051EC80 |. 68 E0ED5100 push 0051EDE0 ; 序列号为:(这里就是取硬盘序列号,作者真的好懒。^-^)
0051EC85 |. FF75 FC push dword ptr [ebp-4]
0051EC88 |. 68 F4ED5100 push 0051EDF4 ; ,请输入注册码
0051EC8D |. A1 74205200 mov eax, [522074]
0051EC92 |. 8B00 mov eax, [eax]
0051EC94 |. 05 14030000 add eax, 314
0051EC99 |. BA 03000000 mov edx, 3
0051EC9E |. E8 F559EEFF call 00404698
0051ECA3 |. A1 74205200 mov eax, [522074]
0051ECA8 |. 8B00 mov eax, [eax]
0051ECAA |. 05 18030000 add eax, 318
0051ECAF |. E8 6456EEFF call 00404318
0051ECB4 |. A1 74205200 mov eax, [522074]
0051ECB9 |. 8B00 mov eax, [eax]
0051ECBB |. 8B10 mov edx, [eax]
0051ECBD |. FF92 EC000000 call [edx+EC] //运行到这里,跳出注册框。随便输入假码。
2、继续往下看
0051ECC3 |. 48 dec eax ; 按“确定”之后会停在这里
0051ECC4 |. 75 70 jnz short 0051ED36 ; 没输入的话就...
0051ECC6 |. 8D55 F4 lea edx, [ebp-C]
0051ECC9 |. 8B45 FC mov eax, [ebp-4] ; 机器码
0051ECCC |. E8 072EFFFF call 00511AD8 ;最重要的算法关键Call到了 《-----
0051ECD1 |. 8B55 F4 mov edx, [ebp-C] ; 真码
0051ECD4 |. A1 74205200 mov eax, [522074]
0051ECD9 |. 8B00 mov eax, [eax]
0051ECDB |. 8B80 18030000 mov eax, [eax+318] ; 假码
0051ECE1 |. E8 3E5AEEFF call 00404724 ; 比较函数
0051ECE6 |. 75 44 jnz short 0051ED2C ; 关键跳 《----------
0051ECE8 |. A1 F01F5200 mov eax, [521FF0]
0051ECED |. 8B00 mov eax, [eax]
0051ECEF |. 50 push eax
0051ECF0 |. B9 90ED5100 mov ecx, 0051ED90 ; regver
0051ECF5 |. BA 70ED5100 mov edx, 0051ED70 ; sv
0051ECFA |. B8 7CED5100 mov eax, 0051ED7C ; supermoney
0051ECFF |. E8 1C2BFFFF call 00511820
0051ED04 |. A1 F01F5200 mov eax, [521FF0]
0051ED09 |. 8B00 mov eax, [eax]
0051ED0B |. 50 push eax
0051ED0C |. B9 0CEE5100 mov ecx, 0051EE0C ; alive
0051ED11 |. BA 1CEE5100 mov edx, 0051EE1C ; systemstate
0051ED16 |. B8 7CED5100 mov eax, 0051ED7C ; supermoney
0051ED1B |. E8 002BFFFF call 00511820
0051ED20 |. B8 30EE5100 mov eax, 0051EE30 ; 软件注册成功,谢谢您的支持!
0051ED25 |. E8 DAACF1FF call 00439A04
0051ED2A |. EB 0A jmp short 0051ED36
0051ED2C |> B8 58EE5100 mov eax, 0051EE58 ; 注册码错误,请重新操作
3、跟进0051ECCC call 00511AD8 可以看到如下关键代码:
00511AE7 |. 8955 F8 mov [ebp-8], edx
00511AEA |. 8945 FC mov [ebp-4], eax
00511AED |. 8B45 FC mov eax, [ebp-4]
00511AF0 |. E8 D32CEFFF call 004047C8
00511AF5 |. 33C0 xor eax, eax
00511AF7 |. 55 push ebp
00511AF8 |. 68 031C5100 push 00511C03
00511AFD |. 64:FF30 push dword ptr fs:[eax]
00511B00 |. 64:8920 mov fs:[eax], esp
00511B03 |. 8B45 FC mov eax, [ebp-4] ; 机器码
00511B06 |. E8 CD2AEFFF call 004045D8 ; 计算位数
00511B0B |. 8BF8 mov edi, eax
00511B0D |. 85FF test edi, edi
00511B0F |. 7E 2F jle short 00511B40
00511B11 |. BE 01000000 mov esi, 1 ; 计数器
00511B16 |> 8B45 FC /mov eax, [ebp-4] ;循环开始
00511B19 |. 8A5C30 FF |mov bl, [eax+esi-1] ; 取第一位
00511B1D |. 80FB 30 |cmp bl, 30
00511B20 |. 72 1A |jb short 00511B3C ; 小于0,跳
00511B22 |. 80FB 39 |cmp bl, 39
00511B25 |. 77 15 |ja short 00511B3C ; 大于9,跳
00511B27 |. 8D45 F0 |lea eax, [ebp-10]
00511B2A |. 8BD3 |mov edx, ebx
00511B2C |. E8 CF29EFFF |call 00404500
00511B31 |. 8B55 F0 |mov edx, [ebp-10]
00511B34 |. 8D45 F4 |lea eax, [ebp-C]
00511B37 |. E8 A42AEFFF |call 004045E0
00511B3C |> 46 |inc esi
00511B3D |. 4F |dec edi
00511B3E |.^ 75 D6 \jnz short 00511B16 ; 循环结束。上面的循环功能是选出序列号里面的数字。
00511B40 |> 837D F4 00 cmp dword ptr [ebp-C], 0 ; 如果你的硬盘序列号都没有数字的话。嘻嘻~。有的话这里就显示出来了
00511B44 |. 75 0D jnz short 00511B53
00511B46 |. 8D45 F4 lea eax, [ebp-C]
00511B49 |. BA 1C1C5100 mov edx, 00511C1C ; 0
00511B4E |. E8 5D28EFFF call 004043B0
00511B53 |> 8B45 F4 mov eax, [ebp-C] ; 数字序列到eax
00511B56 |. 8038 30 cmp byte ptr [eax], 30
00511B59 |. 75 0B jnz short 00511B66 ; 第一位不为0的话就跳。
00511B5B |. 8D45 F4 lea eax, [ebp-C]
00511B5E |. E8 CD2CEFFF call 00404830
00511B63 |. C600 31 mov byte ptr [eax], 31
00511B66 |> 8B45 F4 mov eax, [ebp-C]
00511B69 |. E8 6E78EFFF call 004093DC ; 转成16进制函数
00511B6E |. 05 BD070000 add eax, 7BD ; +7BD
00511B73 |. 83D2 00 adc edx, 0
00511B76 |. 52 push edx ; /Arg2
00511B77 |. 50 push eax ; |Arg1
00511B78 |. 8D45 EC lea eax, [ebp-14] ; |
00511B7B |. E8 9877EFFF call 00409318 ; \转10进制函数
00511B80 |. 8B55 EC mov edx, [ebp-14] ; 10进制显示刚才运算的结果
00511B83 |. 8D45 F4 lea eax, [ebp-C]
00511B86 |. E8 2528EFFF call 004043B0
00511B8B |. 8D45 E8 lea eax, [ebp-18]
00511B8E |. 8B55 F4 mov edx, [ebp-C]
00511B91 |. 8A12 mov dl, [edx] ; 第一个数字到dl
00511B93 |. E8 6829EFFF call 00404500
00511B98 |. 8B45 E8 mov eax, [ebp-18]
00511B9B |. E8 C877EFFF call 00409368
00511BA0 |. 8BD8 mov ebx, eax ; 直接成为16进制
00511BA2 |. 80C3 41 add bl, 41 ; +41
00511BA5 |. 8D45 F4 lea eax, [ebp-C]
00511BA8 |. E8 832CEFFF call 00404830
00511BAD |. 8818 mov [eax], bl ; +41后的结果转成字符,然后替换掉刚才字符串的相应值
00511BAF |. 8D45 E4 lea eax, [ebp-1C]
00511BB2 |. 8B55 F4 mov edx, [ebp-C]
00511BB5 |. 8A52 01 mov dl, [edx+1] ; 继续取第二位进行运算
00511BB8 |. E8 4329EFFF call 00404500
00511BBD |. 8B45 E4 mov eax, [ebp-1C]
00511BC0 |. E8 A377EFFF call 00409368
00511BC5 |. 8BD8 mov ebx, eax
00511BC7 |. 80C3 41 add bl, 41 ; +41
00511BCA |. 8D45 F4 lea eax, [ebp-C]
00511BCD |. E8 5E2CEFFF call 00404830
00511BD2 |. 8858 01 mov [eax+1], bl ; 和上面一样
00511BD5 |. 8B45 F8 mov eax, [ebp-8]
00511BD8 |. 8B55 F4 mov edx, [ebp-C]
00511BDB |. E8 8C27EFFF call 0040436C ; 只变换前面两个数字!!成为字符
00511BE0 |. 33C0 xor eax, eax
00511BE2 |. 5A pop edx
00511BE3 |. 59 pop ecx
00511BE4 |. 59 pop ecx
00511BE5 |. 64:8910 mov fs:[eax], edx
00511BE8 |. 68 0A1C5100 push 00511C0A
00511BED |> 8D45 E4 lea eax, [ebp-1C]
00511BF0 |. BA 05000000 mov edx, 5
00511BF5 |. E8 4227EFFF call 0040433C
00511BFA |. 8D45 FC lea eax, [ebp-4]
00511BFD |. E8 1627EFFF call 00404318
00511C02 \. C3 retn
【算法总结】
1、首先得到用户的硬盘序列号。作为机器码。
2、通过循环得到硬盘序列号中的数字,就是不要字符。数字连接成一个串,准备做真码的最后运算。
3、取第一、第二个数字加上41(A),然后相应的16进制数值转成相应的字母,替换掉第一、第二位置的数字。得到真正的注册码。