- UID
- 29646
注册时间2007-3-4
阅读权限30
最后登录1970-1-1
龙战于野
该用户从未签到
|
【破文标题】家财宝 家庭日记帐管理 V1.0算法分析(高手飘过)
【破文作者】我的水平太菜就不写名字了
【作者邮箱】
【作者主页】
【破解工具】PEID+DEDE+OD
【破解平台】WindowsXP
【软件名称】家财宝 家庭日记帐管理
【软件大小】2.05M
【原版下载】 http://www.skycn.com/soft/42771.html
【保护方式】注册码
【软件简介】家财宝是一款适用于家庭或个人日记帐(包括收入、支出、帐户转帐、债务、债权)管理
软件。
系统提供多帐薄管理;家庭成员管理;自定义收支类别。
【破解声明】只为讨论、学习与分享破解技术,勿用于非法用途,请多多支持软件开发者!
------------------------------------------------------------------------
【破解过程】 很久没来给PYG做贡献了,今天来发篇算法,很简单的算法/:013 ,高手可以飘过了。- 004C8600 /. 55 push ebp
- 004C8601 |. 8BEC mov ebp,esp
- 004C8603 |. 33C9 xor ecx,ecx
- 004C8605 |. 51 push ecx
- 004C8606 |. 51 push ecx
- 004C8607 |. 51 push ecx
- 004C8608 |. 51 push ecx
- 004C8609 |. 51 push ecx
- 004C860A |. 51 push ecx
- 004C860B |. 51 push ecx
- 004C860C |. 53 push ebx
- 004C860D |. 56 push esi
- 004C860E |. 8BD8 mov ebx,eax
- 004C8610 |. 33C0 xor eax,eax
- 004C8612 |. 55 push ebp
- 004C8613 |. 68 47874C00 push Account.004C8747
- 004C8618 |. 64:FF30 push dword ptr fs:[eax]
- 004C861B |. 64:8920 mov dword ptr fs:[eax],esp
- 004C861E |. 8D55 F4 lea edx,[local.3]
- 004C8621 |. 8B83 0C030000 mov eax,dword ptr ds:[ebx+30C]
- 004C8627 |. E8 20ECF8FF call Account.0045724C ; 取注册码
- 004C862C |. 837D F4 00 cmp [local.3],0 ; 注册码位数和0比较
- 004C8630 |. 75 13 jnz short Account.004C8645 ; 注册码不为0位就跳
- 004C8632 |. 8B83 0C030000 mov eax,dword ptr ds:[ebx+30C]
- 004C8638 |. 8B10 mov edx,dword ptr ds:[eax]
- 004C863A |. FF92 C4000000 call dword ptr ds:[edx+C4]
- 004C8640 |. E9 D2000000 jmp Account.004C8717
- 004C8645 |> 8D55 F0 lea edx,[local.4]
- 004C8648 |. 8B83 10030000 mov eax,dword ptr ds:[ebx+310]
- 004C864E |. E8 F9EBF8FF call Account.0045724C ; 取机器码
- 004C8653 |. 8B45 F0 mov eax,[local.4] ; 机器码放到EAX中
- 004C8656 |. E8 351FF4FF call Account.0040A590 ; 这个CALL是干什么的不明白啊 希望高手能指点一下
- 004C865B |. DD5D F8 fstp qword ptr ss:[ebp-8]
- 004C865E |. 9B wait
- 004C865F |. DB2D 54874C00 fld tbyte ptr ds:[4C8754] ; DS:[]里面的东西应
- 该是作者的生日19810529
- 004C8665 |. DC45 F8 fadd qword ptr ss:[ebp-8] ; 19810529与机器码相加,十进
- 制的
- 004C8668 |. DD5D F8 fstp qword ptr ss:[ebp-8] ; 得出一个数值我把他
- 叫做变换码
- 004C866B |. 9B wait
- 004C866C |. DD45 F8 fld qword ptr ss:[ebp-8]
- 004C866F |. 83C4 F4 add esp,-0C
- 004C8672 |. DB3C24 fstp tbyte ptr ss:[esp] ; |
- 004C8675 |. 9B wait ; |
- 004C8676 |. 8D45 EC lea eax,[local.5] ; |
- 004C8679 |. E8 921DF4FF call Account.0040A410 ; \Account.0040A410
- 004C867E |. 8B45 EC mov eax,[local.5] ; 变换码放到EAX中
- 004C8681 |. 50 push eax
- 004C8682 |. 8D55 E8 lea edx,[local.6]
- 004C8685 |. 8B83 0C030000 mov eax,dword ptr ds:[ebx+30C] ; 变换码放到DS:
- [EBP+30C]
- 004C868B |. E8 BCEBF8FF call Account.0045724C ; 取注册码
- 004C8690 |. 8B55 E8 mov edx,[local.6] ; 注册码放到EDX中
- 004C8693 |. 58 pop eax
- 004C8694 |. E8 9BC0F3FF call Account.00404734 ; 这个是比较CALL
- 004C8699 |. 75 64 jnz short Account.004C86FF
- 004C869B |. B2 01 mov dl,1
- 004C869D |. A1 A8DC4300 mov eax,dword ptr ds:[43DCA8]
- 004C86A2 |. E8 0157F7FF call Account.0043DDA8
- 004C86A7 |. 8BF0 mov esi,eax
- 004C86A9 |. BA 02000080 mov edx,80000002
- 004C86AE |. 8BC6 mov eax,esi
- 004C86B0 |. E8 9357F7FF call Account.0043DE48
- 004C86B5 |. B1 01 mov cl,1
- 004C86B7 |. BA 68874C00 mov edx,Account.004C8768 ; ASCII
- "SOFTWARE\EStarSoft\Account"
- 004C86BC |. 8BC6 mov eax,esi
- 004C86BE |. E8 E957F7FF call Account.0043DEAC
- 004C86C3 |. 8D55 E4 lea edx,[local.7]
- 004C86C6 |. 8B83 0C030000 mov eax,dword ptr ds:[ebx+30C]
- 004C86CC |. E8 7BEBF8FF call Account.0045724C
- 004C86D1 |. 8B4D E4 mov ecx,[local.7]
- 004C86D4 |. BA 8C874C00 mov edx,Account.004C878C ; ASCII "ProductID"
- 004C86D9 |. 8BC6 mov eax,esi
- 004C86DB |. E8 6859F7FF call Account.0043E048
- 004C86E0 |. 8BC6 mov eax,esi
- 004C86E2 |. E8 B1ADF3FF call Account.00403498
- 004C86E7 |. B8 A0874C00 mov eax,Account.004C87A0
- 004C86EC |. E8 F3E7F6FF call Account.00436EE4
- 004C86F1 |. A1 DC0F5000 mov eax,dword ptr ds:[500FDC]
- 004C86F6 |. 8B00 mov eax,dword ptr ds:[eax]
- 004C86F8 |. E8 6FEDFAFF call Account.0047746C
- 004C86FD |. EB 18 jmp short Account.004C8717
- 004C86FF |> B8 C0874C00 mov eax,Account.004C87C0
- 004C8704 |. E8 DBE7F6FF call Account.00436EE4
- 004C8709 |. 8B83 0C030000 mov eax,dword ptr ds:[ebx+30C]
- 004C870F |. 8B10 mov edx,dword ptr ds:[eax]
- 004C8711 |. FF92 C4000000 call dword ptr ds:[edx+C4]
- 004C8717 |> 33C0 xor eax,eax
- 004C8719 |. 5A pop edx
- 004C871A |. 59 pop ecx
- 004C871B |. 59 pop ecx
- 004C871C |. 64:8910 mov dword ptr fs:[eax],edx
- 004C871F |. 68 4E874C00 push Account.004C874E
- 004C8724 |> 8D45 E4 lea eax,[local.7]
- 004C8727 |. BA 02000000 mov edx,2
- 004C872C |. E8 1BBCF3FF call Account.0040434C
- 004C8731 |. 8D45 EC lea eax,[local.5]
- 004C8734 |. E8 EFBBF3FF call Account.00404328
- 004C8739 |. 8D45 F0 lea eax,[local.4]
- 004C873C |. BA 02000000 mov edx,2
- 004C8741 |. E8 06BCF3FF call Account.0040434C
- 004C8746 \. C3 retn
- ------------------------------------------------------------------------------------------
- 我们进去算法部分看看吧,代码如下:
- 00404734 /$ 53 push ebx
- 00404735 |. 56 push esi
- 00404736 |. 57 push edi
- 00404737 |. 89C6 mov esi,eax
- 00404739 |. 89D7 mov edi,edx
- 0040473B |. 39D0 cmp eax,edx ; 比较变换码和注册码
- 0040473D |. 0F84 8F000000 je Account.004047D2 ; 相等则跳
- 00404743 |. 85F6 test esi,esi
- 00404745 |. 74 68 je short Account.004047AF
- 00404747 |. 85FF test edi,edi
- 00404749 |. 74 6B je short Account.004047B6
- 0040474B |. 8B46 FC mov eax,dword ptr ds:[esi-4] ; 变换码放到DS:[ESI
- -4],变换码位数放回到EAX
- 0040474E |. 8B57 FC mov edx,dword ptr ds:[edi-4] ; 注册码放到DS:[EDI
- -4],注册码位数放回到EAX
- 00404751 |. 29D0 sub eax,edx ; 变换码位数减去注册
- 码位数
- 00404753 |. 77 02 ja short Account.00404757 ; 变换码的位数大于注
- 册码的位数的话就跳
- 00404755 |. 01C2 add edx,eax ; 如果变换码位数没有
- 比注册码位数大的话,这里通过加注册码位数的方法来还原变换码位数
- 00404757 |> 52 push edx ; 变换码位数压栈
- 00404758 |. C1EA 02 shr edx,2 ; 右移2位,相当于除4
- 0040475B |. 74 26 je short Account.00404783 ; 不等于0的话就不会
- 跳,即变换码的位数比1大就不跳了(应该不可能跳吧)
- 0040475D |> 8B0E /mov ecx,dword ptr ds:[esi] ; 变换码前4位以ASCII
- 的形式放到ECX中
- 0040475F |. 8B1F |mov ebx,dword ptr ds:[edi] ; 注册码前4位顺序以
- ASCII的形式放到ECX中
- 00404761 |. 39D9 |cmp ecx,ebx ; 两者比较
- 00404763 |. 75 58 |jnz short Account.004047BD ; 不等则跳
- 00404765 |. 4A |dec edx ; EDX减一
- 00404766 |. 74 15 |je short Account.0040477D ; EDX等于0的话就跳
- 00404768 |. 8B4E 04 |mov ecx,dword ptr ds:[esi+4] ; 变换码再取4位顺序
- 以ASCII的形式放到ECX中
- 0040476B |. 8B5F 04 |mov ebx,dword ptr ds:[edi+4] ; 注册码再取4位顺序
- 以ASCII的形式放到ECX中
- 0040476E |. 39D9 |cmp ecx,ebx ; 两者比较
- 00404770 |. 75 4B |jnz short Account.004047BD ; 不等则跳
- 00404772 |. 83C6 08 |add esi,8 ; 加8,相当于留下了8
- 位后的东西
- 00404775 |. 83C7 08 |add edi,8 ; 加8,相当与留下了8
- 位后的东西
- 00404778 |. 4A |dec edx ; EDX再减一
- 00404779 |.^ 75 E2 \jnz short Account.0040475D
- 0040477B |. EB 06 jmp short Account.00404783
- 0040477D |> 83C6 04 add esi,4
- 00404780 |. 83C7 04 add edi,4
- 00404783 |> 5A pop edx
- 00404784 |. 83E2 03 and edx,3 ; 与3取与运算,相当
- 于2进制的只保留最后两位
- 00404787 |. 74 22 je short Account.004047AB
- 00404789 |. 8B0E mov ecx,dword ptr ds:[esi] ; 上面的指向的保留的
- 放到ECX中
- 0040478B |. 8B1F mov ebx,dword ptr ds:[edi] ; 上面的指向的保留的
- 放到EBX中
- 0040478D |. 38D9 cmp cl,bl ; 比较低位部分
- 0040478F |. 75 41 jnz short Account.004047D2 ; 不等则跳
- 00404791 |. 4A dec edx
- 00404792 |. 74 17 je short Account.004047AB
- 00404794 |. 38FD cmp ch,bh ; 比较高位部分
- 00404796 |. 75 3A jnz short Account.004047D2 ; 不等则跳
- 00404798 |. 4A dec edx ; EDX减1
- 00404799 |. 74 10 je short Account.004047AB
- 0040479B |. 81E3 0000FF00 and ebx,0FF0000
- 004047A1 |. 81E1 0000FF00 and ecx,0FF0000
- 004047A7 |. 39D9 cmp ecx,ebx
- 004047A9 |. 75 27 jnz short Account.004047D2
- 004047AB |> 01C0 add eax,eax
- 004047AD |. EB 23 jmp short Account.004047D2
- 004047AF |> 8B57 FC mov edx,dword ptr ds:[edi-4]
- 004047B2 |. 29D0 sub eax,edx
- 004047B4 |. EB 1C jmp short Account.004047D2
- 004047B6 |> 8B46 FC mov eax,dword ptr ds:[esi-4]
- 004047B9 |. 29D0 sub eax,edx
- 004047BB |. EB 15 jmp short Account.004047D2
- 004047BD |> 5A pop edx
- 004047BE |. 38D9 cmp cl,bl ; 比较低位,即比较第
- 一位
- 004047C0 |. 75 10 jnz short Account.004047D2 ; 不等则跳
- 004047C2 |. 38FD cmp ch,bh ; 比较高位,即比较第
- 二位
- 004047C4 |. 75 0C jnz short Account.004047D2 ; 不等则跳
- 004047C6 |. C1E9 10 shr ecx,10 ; 变换码“这段”除以
- 1024(2的10次方),16进制右移4位
- 004047C9 |. C1EB 10 shr ebx,10 ; 注册码“这段”除以
- 1024(2的10次方),16进制右移4位
- 004047CC |. 38D9 cmp cl,bl ; 比较低位,即比较“
- 这段”第三位
- 004047CE |. 75 02 jnz short Account.004047D2 ; 不等则跳
- 004047D0 |. 38FD cmp ch,bh ; 比较高位即比较这段
- 第四位
- 004047D2 |> 5F pop edi
- 004047D3 |. 5E pop esi
- 004047D4 |. 5B pop ebx
- 004047D5 \. C3 retn
复制代码 算法总结:这个算法总的就是比较注册码与变换码是否相等,从0040473D到这段代码的结束其实是在分
段比较,分别分4位、4位、2位来比较,所以我上面的说明用了“这段”的说法,这段比较不等后还进行
段内的逐位比较(不明白是什么用意,除非与变换码一样才会注册成功,其他的是不行的,为什么还要这
样比较呢?希望高手能解答一下),所以总的来说就是注册码直接与变换码的直接比较。
算法注册机相信只要学过编程都可以写的出来,大家可以自己写下留做纪念*^_^*
补充一下:刚才看了tianxj的回帖 发现我一个地方写错了 算法总结说了一堆的废话却没有说到重点
注册码确实就是机器码+19810529,感谢tianxj的补充 表示感谢
------------------------------------------------------------------------
【破解总结】算法不难,碰巧让我菜鸟碰上了,不敢私藏。愿与像我这样的菜鸟分享。最好是看我的破
文之前先自己动手弄一下,实在不行了再来看我的破文,保证提升的比较快*^_^*
感谢PYG的培养,带我走进破解的大门
------------------------------------------------------------------------
【版权声明】破文版权归我,转载版权归你。欢迎转载,盗版不究。如果能帮我改正和补充一下的话我
会更高兴的*^_^*
[ 本帖最后由 傻人有傻福 于 2008-3-6 19:55 编辑 ] |
评分
-
查看全部评分
|