- UID
- 40450
注册时间2007-12-6
阅读权限10
最后登录1970-1-1
周游历练
该用户从未签到
|
先说明一下
1 写得很烂,不愿意看的也没什么损失
2 很久以前自己在看雪发的,不是转帖
呵呵,那段时间特别自大,如果发现什么错误,希望共勉……
【文章标题】: 家庭银行家算法完全解析
【文章作者】: NONAME剑人
【作者邮箱】: [email protected]
【作者主页】: ....Have No....
【作者QQ号】: 464252600(验证:反汇编)
【软件名称】: 家庭银行家 2.0 build 53
【软件大小】: 1.27MB
【下载地址】: 上NEWHUA
【加壳方式】: ASP
【保护方式】: ASP SHELL
【编写语言】: Borland Delphi 4.0 - 5.0
【使用工具】: OllyDbg UnAspPack PeiD
【操作平台】: WindowsXP Pro正
【软件介绍】: "家庭银行家" 是一款面向家庭和个人用户的理财软件
日常收支情况记录
1 方便、快捷、迅速的输入方式:操作类似于电子表格,可以全部用键盘完成输入过程
2 功能强大的查询功能:一改以往复杂的专业查询方式,用接近自然语言的查询条件组合,迅速找出您所需要的数据
3 归类分析:让您马上了解每个收支子项目中钱赚了多少,钱又花了多少
4 功能强大的图表分析:功能日益强劲的图表分析功能,让您用最直观地方式了解收支组成
5 每日收支记录统计分析:让您迅速地察看每天收支情况
6 灵活、自由、全面的各项设置:所有的收支项目内容都可以自由定制,以最适应自己生活习惯的方式运行
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
呵呵,好久以前的软件了。2003年的,之所以找老版本是希望作者不会为一点点小的利益而*** :)
(由于手头没有精华,不好判断是不是写重了……各位发现了表鞭我……)
先用PeiD查壳,ASP的壳,手头正好有脱壳工具,就懒得动手扒皮了(我有撸子:) )
脱完以后用OD加载,没有自效验,没有反DEBUG,好!(窃喜)再来,看注册,居然是内存注册,好!(再次窃喜)
OD插件里选“超级字串参考+”,选UNICODE,往上上上拉,找到了“注册失败,请检查您的注册码是否输入正确。”没?
好!我们来分析……
00736122 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00736125 |. 50 PUSH EAX ; //入假注册码
00736126 |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
00736129 |. 8B83 F0020000 MOV EAX,DWORD PTR DS:[EBX+2F0]
0073612F |. E8 8851D0FF CALL HomeBank.0043B2BC
00736134 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; 入注册名
00736137 |. 33C9 XOR ECX,ECX
00736139 |. 8B83 00030000 MOV EAX,DWORD PTR DS:[EBX+300]
0073613F |. E8 74DFF5FF CALL HomeBank.006940B8 ; 关键CALL!!!
00736144 |. 84C0 TEST AL,AL
00736146 |. 75 1A JNZ SHORT HomeBank.00736162
00736148 |. 6A 10 PUSH 10
0073614A |. B9 B8617300 MOV ECX,HomeBank.007361B8 ; 家庭银行家
0073614F |. BA C4617300 MOV EDX,HomeBank.007361C4 ; 注册失败,请检查您的注册码是否输入正确。
00736154 |. A1 E8747500 MOV EAX,DWORD PTR DS:[7574E8]
00736159 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0073615B |. E8 A847D2FF CALL HomeBank.0045A908
00736160 |. EB 2E JMP SHORT HomeBank.00736190
00736162 |> 8B83 00030000 MOV EAX,DWORD PTR DS:[EBX+300]
00736168 |. E8 2FDCF5FF CALL HomeBank.00693D9C
0073616D |. 84C0 TEST AL,AL
0073616F |. 74 1F JE SHORT HomeBank.00736190
00736171 |. 6A 40 PUSH 40
00736173 |. B9 B8617300 MOV ECX,HomeBank.007361B8 ; 家庭银行家
00736178 |. BA F0617300 MOV EDX,HomeBank.007361F0 ; 注册成功,谢谢。请退出程序后重新进入。
显然
----------------------------
00736144 |. 84C0 TEST AL,AL
00736146 |. 75 1A JNZ SHORT HomeBank.00736162
----------------------------
两句说明了上面有重要CALL,接进去
006940B8 /$ 55 PUSH EBP
006940B9 |. 8BEC MOV EBP,ESP
006940BB |. 83C4 F0 ADD ESP,-10
006940BE |. 53 PUSH EBX
006940BF |. 33DB XOR EBX,EBX
006940C1 |. 895D F0 MOV DWORD PTR SS:[EBP-10],EBX
006940C4 |. 895D F4 MOV DWORD PTR SS:[EBP-C],EBX
006940C7 |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
006940CA |. 8955 FC MOV DWORD PTR SS:[EBP-4],EDX ; [EBP-4]入假用户名
006940CD |. 8BD8 MOV EBX,EAX
006940CF |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; 取出用户名
006940D2 |. E8 3904D7FF CALL HomeBank.00404510
006940D7 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
006940DA |. E8 3104D7FF CALL HomeBank.00404510
006940DF |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
006940E2 |. E8 2904D7FF CALL HomeBank.00404510
006940E7 |. 33C0 XOR EAX,EAX
006940E9 |. 55 PUSH EBP
006940EA |. 68 A2416900 PUSH HomeBank.006941A2
006940EF |. 64:FF30 PUSH DWORD PTR FS:[EAX]
006940F2 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
006940F5 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
006940F8 |. E8 5F02D7FF CALL HomeBank.0040435C
006940FD |. 3B43 3C CMP EAX,DWORD PTR DS:[EBX+3C]
00694100 |. 7F 19 JG SHORT HomeBank.0069411B
00694102 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00694105 |. E8 5202D7FF CALL HomeBank.0040435C
0069410A |. 3B43 40 CMP EAX,DWORD PTR DS:[EBX+40]
0069410D |. 7C 0C JL SHORT HomeBank.0069411B
0069410F |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00694112 |. E8 4502D7FF CALL HomeBank.0040435C
00694117 |. 85C0 TEST EAX,EAX
00694119 |. 75 04 JNZ SHORT HomeBank.0069411F
0069411B |> 33DB XOR EBX,EBX
0069411D |. EB 60 JMP SHORT HomeBank.0069417F
0069411F |> 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
00694122 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00694125 |. E8 7A5DD7FF CALL HomeBank.00409EA4 ; 假注册码全大写
0069412A |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
0069412D |. 8D45 08 LEA EAX,DWORD PTR SS:[EBP+8]
00694130 |. E8 3F00D7FF CALL HomeBank.00404174
00694135 |. 8D4D F0 LEA ECX,DWORD PTR SS:[EBP-10]
00694138 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0069413B |. 8BC3 MOV EAX,EBX
0069413D |. E8 66FCFFFF CALL HomeBank.00693DA8 ; 关键
00694142 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00694145 |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
00694148 |. E8 CF5DD7FF CALL HomeBank.00409F1C
0069414D |. 85C0 TEST EAX,EAX
0069414F |. 74 04 JE SHORT HomeBank.00694155
00694151 |. 33DB XOR EBX,EBX
00694153 |. EB 2A JMP SHORT HomeBank.0069417F
00694155 |> 8D43 38 LEA EAX,DWORD PTR DS:[EBX+38]
00694158 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0069415B |. E8 D0FFD6FF CALL HomeBank.00404130
00694160 |. 8D43 44 LEA EAX,DWORD PTR DS:[EBX+44]
00694163 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
00694166 |. E8 C5FFD6FF CALL HomeBank.00404130
0069416B |. 8D43 4C LEA EAX,DWORD PTR DS:[EBX+4C]
0069416E |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
00694171 |. E8 BAFFD6FF CALL HomeBank.00404130
00694176 |. 8BC3 MOV EAX,EBX
00694178 |. E8 B7010000 CALL HomeBank.00694334
0069417D |. B3 01 MOV BL,1
0069417F |> 33C0 XOR EAX,EAX
00694181 |. 5A POP EDX
00694182 |. 59 POP ECX
00694183 |. 59 POP ECX
00694184 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
00694187 |. 68 A9416900 PUSH HomeBank.006941A9
0069418C |> 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
0069418F |. BA 04000000 MOV EDX,4
00694194 |. E8 67FFD6FF CALL HomeBank.00404100
00694199 |. 8D45 08 LEA EAX,DWORD PTR SS:[EBP+8]
0069419C |. E8 3BFFD6FF CALL HomeBank.004040DC
006941A1 \. C3 RETN
这时候动态破解吧,很容易可以看出这个关键CALL是在0069413D
再来
00693DD9 |. E8 7E05D7FF CALL HomeBank.0040435C ; EAX=假用户名的位
00693DDE |. 3B46 3C CMP EAX,DWORD PTR DS:[ESI+3C]
00693DE1 |. 7F 0D JG SHORT HomeBank.00693DF0
00693DE3 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00693DE6 |. E8 7105D7FF CALL HomeBank.0040435C
00693DEB |. 3B46 40 CMP EAX,DWORD PTR DS:[ESI+40] ; 如果《=3 则
00693DEE |. 7D 0C JGE SHORT HomeBank.00693DFC
00693DF0 |> 8BC7 MOV EAX,EDI
00693DF2 |. E8 E502D7FF CALL HomeBank.004040DC
00693DF7 |. E9 9F000000 JMP HomeBank.00693E9B
00693DFC |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00693DFF |. E8 5805D7FF CALL HomeBank.0040435C
00693E04 |. 8BD8 MOV EBX,EAX
00693E06 |. EB 31 JMP SHORT HomeBank.00693E39
00693E08 |> 8B45 FC /MOV EAX,DWORD PTR SS:[EBP-4] ; 入假用户名
00693E0B |. 8A4418 FF |MOV AL,BYTE PTR DS:[EAX+EBX-1] ; 循环,提字符串,不用解释吧(最终到EDX)
解释一下上面,是从末尾开始取字符串
00693E0F |. 25 FF000000 |AND EAX,0FF ; EAX和0FF做与运算
00693E14 |. 33D2 |XOR EDX,EDX ; EDX=0
00693E16 |. 52 |PUSH EDX
00693E17 |. 50 |PUSH EAX
00693E18 |. 8B46 58 |MOV EAX,DWORD PTR DS:[ESI+58]
00693E1B |. 8B56 5C |MOV EDX,DWORD PTR DS:[ESI+5C]
00693E1E |. E8 763BD7FF |CALL HomeBank.00407999 ;计算那个EAX……
00693E23 |. 52 |PUSH EDX ; /Arg2
00693E24 |. 50 |PUSH EAX ; |Arg1
00693E25 |. 8D45 E4 |LEA EAX,DWORD PTR SS:[EBP-1C] ; |把EAX做成字符串放到EBP-C里入栈
00693E28 |. E8 1F67D7FF |CALL HomeBank.0040A54C ; \HomeBank.0040A54C
00693E2D |. 8B55 E4 |MOV EDX,DWORD PTR SS:[EBP-1C]
00693E30 |. 8D45 F4 |LEA EAX,DWORD PTR SS:[EBP-C]
00693E33 |. E8 2C05D7FF |CALL HomeBank.00404364
00693E38 |. 4B |DEC EBX
00693E39 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; 入假用户名
00693E3C |. E8 1B05D7FF |CALL HomeBank.0040435C ; 求位
00693E41 |. 83E8 06 |SUB EAX,6 ; EAX=EAX-6(1:E-6=8)
00693E44 |. 3BD8 |CMP EBX,EAX ; 原位数=eax就出循环
00693E46 |. 7C 04 |JL SHORT HomeBank.00693E4C
00693E48 |. 85DB |TEST EBX,EBX
00693E4A |.^ 7F BC \JG SHORT HomeBank.00693E08
00693E4C |> 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
00693E4F |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] ; EAX=上面的字符相连
用动态分析,注释说得很详细了……
好了,现在得出一个大长串 我的用户名是NoNameSwordMan得出48955918864438
再下面
00693E4F |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] ; EAX=上面的字符相连
00693E52 |. E8 F925D7FF CALL HomeBank.00406450
00693E57 |. 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX 1
00693E5A |. 8955 EC MOV DWORD PTR SS:[EBP-14],EDX 2
00693E5D |. 8B5E 50 MOV EBX,DWORD PTR DS:[ESI+50]
00693E60 |. 85DB TEST EBX,EBX
00693E62 |. 7F 11 JG SHORT HomeBank.00693E75
00693E64 |. FF75 EC PUSH DWORD PTR SS:[EBP-14] ; /Arg2
00693E67 |. FF75 E8 PUSH DWORD PTR SS:[EBP-18] ; |Arg1
00693E6A |. 8BD7 MOV EDX,EDI ; |
00693E6C |. 33C0 XOR EAX,EAX ; |
00693E6E |. E8 4967D7FF CALL HomeBank.0040A5BC ; \HomeBank.0040A5BC
00693E73 |. EB 26 JMP SHORT HomeBank.00693E9B
00693E75 |> FF75 EC PUSH DWORD PTR SS:[EBP-14] ; /Arg2
00693E78 |. FF75 E8 PUSH DWORD PTR SS:[EBP-18] ; |Arg1
00693E7B |. 8BD7 MOV EDX,EDI ; |
00693E7D |. 8BC3 MOV EAX,EBX ; |
00693E7F |. E8 3867D7FF CALL HomeBank.0040A5BC ; \HomeBank.0040A5BC
00693E84 |. 8B07 MOV EAX,DWORD PTR DS:[EDI] ------------最佳看注册码点
00693E86 |. E8 D104D7FF CALL HomeBank.0040435C
00693E8B |. 8BC8 MOV ECX,EAX
00693E8D |. 2B4E 50 SUB ECX,DWORD PTR DS:[ESI+50]
00693E90 |. 8B56 50 MOV EDX,DWORD PTR DS:[ESI+50]
00693E93 |. 42 INC EDX
00693E94 |. 8BC7 MOV EAX,EDI
00693E96 |. E8 0907D7FF CALL HomeBank.004045A4
00693E9B |> 33C0 XOR EAX,EAX
00693E9D |. 5A POP EDX
00693E9E |. 59 POP ECX
00693E9F |. 59 POP ECX
00693EA0 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
00693EA3 |. 68 C83E6900 PUSH HomeBank.00693EC8
00693EA8 |> 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
00693EAB |. E8 2C02D7FF CALL HomeBank.004040DC
00693EB0 |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
00693EB3 |. E8 2402D7FF CALL HomeBank.004040DC
00693EB8 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00693EBB |. E8 1C02D7FF CALL HomeBank.004040DC
00693EC0 \. C3 RETN
动分,得知1 2和附近的一些步骤是在做10---》16位(后编辑注:我查了查原来的精华,确实有这个软件的文章----
-----我的表情 #_# 5555~`,不过这步说错了,这是在10--16,不是提位,这是10---16的一种方法(4个一分割) )
OK,把你刚才的那个大长串放到CALC里,再转到16进制……OK!REG FINISH!
整理一下
可用的用户名/序列号
NoNameSwordMan
2c8670275036
最佳爆破点
00736146,改JNZ为JMP
[ 本帖最后由 NONAME剑人 于 2008-8-4 19:49 编辑 ] |
评分
-
查看全部评分
|