飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2550|回复: 4

[原创] 很久以前我在看雪的帖子——家庭银行家2分析

[复制链接]

该用户从未签到

发表于 2008-7-30 06:08:26 | 显示全部楼层 |阅读模式
先说明一下
1 写得很烂,不愿意看的也没什么损失
2 很久以前自己在看雪发的,不是转帖
呵呵,那段时间特别自大,如果发现什么错误,希望共勉……




【文章标题】: 家庭银行家算法完全解析
【文章作者】: NONAME剑人
【作者邮箱】: wangjunyi2008@sina.com
【作者主页】: ....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 编辑 ]

评分

参与人数 1威望 +40 飘云币 +40 收起 理由
hj2008mt + 40 + 40 PYG有你更精彩!

查看全部评分

PYG19周年生日快乐!

该用户从未签到

发表于 2008-7-30 08:37:10 | 显示全部楼层
期待算法分析 /:001
PYG19周年生日快乐!

该用户从未签到

发表于 2008-7-30 23:48:11 | 显示全部楼层
对LZ还是有印象的,曾经的确有点自大。不过明白就好。其实破几款软件,算不得能耐的。
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2008-7-31 08:31:14 | 显示全部楼层
呵呵,是啊,还恳请楼上赐教。
PYG19周年生日快乐!

该用户从未签到

发表于 2008-8-4 19:03:31 | 显示全部楼层
入这行门都是从破解软件开始的,但破多了就知道破解软件并非生活的全部
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表