家财宝 家庭日记帐管理 V1.0算法分析(高手飘过)
【破文标题】家财宝 家庭日记帐管理 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:
004C861B|.64:8920 mov dword ptr fs:,esp
004C861E|.8D55 F4 lea edx,
004C8621|.8B83 0C030000 mov eax,dword ptr ds:
004C8627|.E8 20ECF8FF call Account.0045724C ;取注册码
004C862C|.837D F4 00 cmp ,0 ;注册码位数和0比较
004C8630|.75 13 jnz short Account.004C8645 ;注册码不为0位就跳
004C8632|.8B83 0C030000 mov eax,dword ptr ds:
004C8638|.8B10 mov edx,dword ptr ds:
004C863A|.FF92 C4000000 call dword ptr ds:
004C8640|.E9 D2000000 jmp Account.004C8717
004C8645|>8D55 F0 lea edx,
004C8648|.8B83 10030000 mov eax,dword ptr ds:
004C864E|.E8 F9EBF8FF call Account.0045724C ;取机器码
004C8653|.8B45 F0 mov eax, ;机器码放到EAX中
004C8656|.E8 351FF4FF call Account.0040A590 ;这个CALL是干什么的不明白啊 希望高手能指点一下
004C865B|.DD5D F8 fstp qword ptr ss:
004C865E|.9B wait
004C865F|.DB2D 54874C00 fld tbyte ptr ds: ;DS:[]里面的东西应
该是作者的生日19810529
004C8665|.DC45 F8 fadd qword ptr ss: ;19810529与机器码相加,十进
制的
004C8668|.DD5D F8 fstp qword ptr ss: ;得出一个数值我把他
叫做变换码
004C866B|.9B wait
004C866C|.DD45 F8 fld qword ptr ss:
004C866F|.83C4 F4 add esp,-0C
004C8672|.DB3C24 fstp tbyte ptr ss: ; |
004C8675|.9B wait ; |
004C8676|.8D45 EC lea eax, ; |
004C8679|.E8 921DF4FF call Account.0040A410 ; \Account.0040A410
004C867E|.8B45 EC mov eax, ;变换码放到EAX中
004C8681|.50 push eax
004C8682|.8D55 E8 lea edx,
004C8685|.8B83 0C030000 mov eax,dword ptr ds: ;变换码放到DS:
004C868B|.E8 BCEBF8FF call Account.0045724C ;取注册码
004C8690|.8B55 E8 mov edx, ;注册码放到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:
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,
004C86C6|.8B83 0C030000 mov eax,dword ptr ds:
004C86CC|.E8 7BEBF8FF call Account.0045724C
004C86D1|.8B4D E4 mov ecx,
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:
004C86F6|.8B00 mov eax,dword ptr ds:
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:
004C870F|.8B10 mov edx,dword ptr ds:
004C8711|.FF92 C4000000 call dword ptr ds:
004C8717|>33C0 xor eax,eax
004C8719|.5A pop edx
004C871A|.59 pop ecx
004C871B|.59 pop ecx
004C871C|.64:8910 mov dword ptr fs:,edx
004C871F|.68 4E874C00 push Account.004C874E
004C8724|>8D45 E4 lea eax,
004C8727|.BA 02000000 mov edx,2
004C872C|.E8 1BBCF3FF call Account.0040434C
004C8731|.8D45 EC lea eax,
004C8734|.E8 EFBBF3FF call Account.00404328
004C8739|.8D45 F0 lea eax,
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: ;变换码放到DS:[ESI
-4],变换码位数放回到EAX
0040474E|.8B57 FC mov edx,dword ptr ds: ;注册码放到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: ;变换码前4位以ASCII
的形式放到ECX中
0040475F|.8B1F |mov ebx,dword ptr ds: ;注册码前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: ;变换码再取4位顺序
以ASCII的形式放到ECX中
0040476B|.8B5F 04 |mov ebx,dword ptr ds: ;注册码再取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: ;上面的指向的保留的
放到ECX中
0040478B|.8B1F mov ebx,dword ptr ds: ;上面的指向的保留的
放到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:
004047B2|.29D0 sub eax,edx
004047B4|.EB 1C jmp short Account.004047D2
004047B6|>8B46 FC mov eax,dword ptr ds:
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 编辑 ] /:001 跟着楼主走一遍。。。 楼主的解释很详细哇,我也照着来两次哇,哈哈。谢谢分享
/:014 :loveliness: 菜鸟不懂算法..
004C8699 75变74
004F0615 75变74
MS这样就爆破成功了。。。
[ 本帖最后由 magic659117852 于 2008-3-6 14:44 编辑 ] 用od载入,查找字符串ASCII,,找到注册失败,直接有一个向上跳的关键跳,在关键跳上关键CALL下断,直接追码就可以了 我的是 1213452007 =真晕! 我都看迷糊了!!! 004C8656|.E8 351FF4FF call Account.0040A590 ;这个CALL是干什么的不明白啊 希望高手能指点一下
我不是高手,那个CALL是将字符串转为浮点数字 004C8694|.E8 9BC0F3FF call Account.00404734 ;应该是算法CALL
这个不是算法 CALL,是比较CALL/:L 算法就是采用浮点运算
注册码=机器码+19810529 tianxj 好强/:good
页:
[1]
2