[原创] 财智记账本 修改遗忘密码的方法

财智记账本 修改遗忘密码的方法

财智记账本 修改遗忘密码的方法
说明:财智记账本真正的可执行文件是Program\MoneyBook.exe

一、脱壳
PEID检测为:UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
OD载入使用ESP定律脱壳
使用ImportREC进地修复,可正常运行。
二、跳过账簿的密码验证
OD载入脱壳后文件,停在这里
009E1E58 >/$  55            PUSH EBP
009E1E59  |.  8BEC          MOV EBP,ESP
009E1E5B  |.  B9 0A000000   MOV ECX,0A
009E1E60  |>  6A 00         /PUSH 0
009E1E62  |.  6A 00         |PUSH 0
009E1E64  |.  49            |DEC ECX
009E1E65  |.^ 75 F9         \JNZ SHORT dump.009E1E60
009E1E67  |.  51            PUSH ECX
009E1E68  |.  53            PUSH EBX
009E1E69  |.  B8 E0069E00   MOV EAX,dump.009E06E0
009E1E6E  |.  E8 3957A2FF   CALL dump.004075AC
009E1E73  |.  33C0          XOR EAX,EAX
009E1E75  |.  55            PUSH EBP
009E1E76  |.  68 0A229E00   PUSH dump.009E220A
F9运行,使程序跑出来
出现新建和打开账簿的窗口,选择有遗忘密码的账簿-》出现输入密码的窗口
此时,我们按F12使用程序暂停下来-》停在系统的领空
F8 单步执行
以下是Delphi程序的消息循环,到这里就已经进行了输入密码窗口的领空。
004A3736  |.  8990 4C020000 MOV DWORD PTR DS:[EAX+24C],EDX
004A373C  |>  A1 1C3C9F00   /MOV EAX,DWORD PTR DS:[9F3C1C]
004A3741  |.  E8 32350000   |CALL dump.004A6C78
004A3746  |.  A1 1C3C9F00   |MOV EAX,DWORD PTR DS:[9F3C1C]
004A374B  |.  80B8 9C000000>|CMP BYTE PTR DS:[EAX+9C],0
004A3752  |.  74 0F         |JE SHORT dump.004A3763
004A3754  |.  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]
004A3757  |.  C780 4C020000>|MOV DWORD PTR DS:[EAX+24C],2
004A3761  |.  EB 14         |JMP SHORT dump.004A3777
004A3763  |>  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]
004A3766  |.  83B8 4C020000>|CMP DWORD PTR DS:[EAX+24C],0
004A376D  |.  74 08         |JE SHORT dump.004A3777
004A376F  |.  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]
004A3772  |.  E8 1DFDFFFF   |CALL dump.004A3494
004A3777  |>  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]
004A377A  |.  8B80 4C020000 |MOV EAX,DWORD PTR DS:[EAX+24C]
004A3780  |.  85C0          |TEST EAX,EAX
004A3782  |.^ 74 B8         \JE SHORT dump.004A373C
004A3784  |.  8945 F8       MOV DWORD PTR SS:[EBP-8],EAX
004A3787  |.  6A 00         PUSH 0


在这个Retn处下F2断点,这里是真正的返回点
004A38B1   .^\EB F0         JMP SHORT dump.004A38A3
004A38B3   .  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
004A38B6   .  5E            POP ESI
004A38B7   .  5B            POP EBX
004A38B8   .  8BE5          MOV ESP,EBP
004A38BA   .  5D            POP EBP
004A38BB   .  C3            RETN   F2下断
F9运行程序,点取消,OD断下
F8单步,返回到这里就返回到关键点了
0059BFA3   .  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
0059BFA6   .  E8 45F1E6FF   CALL dump.0040B0F0
0059BFAB   .  8B8D 94FEFFFF MOV ECX,DWORD PTR SS:[EBP-16C]
0059BFB1   .  8D45 E0       LEA EAX,DWORD PTR SS:[EBP-20]
0059BFB4   .  33D2          XOR EDX,EDX
0059BFB6   .  E8 B52FFFFF   CALL dump.0058EF70                       ;  密码输入窗口
0059BFBB   .  83F8 02       CMP EAX,2                ; 2就是取消按钮
0059BFBE   .  75 09         JNZ SHORT dump.0059BFC9
0059BFC0   .  C745 F0 03000>MOV DWORD PTR SS:[EBP-10],3
0059BFC7   .  EB 75         JMP SHORT dump.0059C03E
0059BFC9   >  8D8D 90FEFFFF LEA ECX,DWORD PTR SS:[EBP-170]
0059BFCF   .  8B55 E0       MOV EDX,DWORD PTR SS:[EBP-20]
0059BFD2   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0059BFD5   .  E8 DEF4FFFF   CALL dump.0059B4B8
0059BFC9在这里下断  F9运行,再次出现输入密码窗口时,OD断下
我们输入错误的密码123-》点确定
0059BFC7   . /EB 75         JMP SHORT dump.0059C03E
0059BFC9   > |8D8D 90FEFFFF LEA ECX,DWORD PTR SS:[EBP-170]
0059BFCF   . |8B55 E0       MOV EDX,DWORD PTR SS:[EBP-20]            ;  把假密码放入EDX
0059BFD2   . |8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0059BFD5   . |E8 DEF4FFFF   CALL dump.0059B4B8
0059BFDA   . |8B85 90FEFFFF MOV EAX,DWORD PTR SS:[EBP-170]           ;  把假密码加密后入到EAX
0059BFE0   . |8B55 DC       MOV EDX,DWORD PTR SS:[EBP-24]            ;  把真密码加密后放到EDX
0059BFE3   . |E8 9C90E6FF   CALL dump.00405084                       ;  判断密码是否正确,关键的CALL
0059BFE8     |75 12         JNZ SHORT dump.0059BFFC                  ;  不相等,就跳向密码错误
0059BFE8这里不跳后,F9运行,已经打开账簿了,可以会发现没有东西了,我没有测试,别人测试的结果
不要慌,我们继续
我用dede找到修改的密码设置窗口中的确定按钮地址 如下:
00743A9C   .  55            PUSH EBP
00743A9D   .  8BEC          MOV EBP,ESP
00743A9F   .  33C9          XOR ECX,ECX
00743AA1   .  51            PUSH ECX
00743AA2   .  51            PUSH ECX
00743AA3   .  51            PUSH ECX
00743AA4   .  51            PUSH ECX
00743AA5   .  51            PUSH ECX
00743AA6   .  51            PUSH ECX
00743AA7   .  51            PUSH ECX
00743AA8   .  51            PUSH ECX
00743AA9   .  53            PUSH EBX
00743AAA   .  56            PUSH ESI
00743AAB   .  57            PUSH EDI
00743AAC   .  8BF0          MOV ESI,EAX
00743AAE   .  33C0          XOR EAX,EAX
00743AB0   .  55            PUSH EBP
00743AB1   .  68 663C7400   PUSH dump.00743C66
00743AB6   .  64:FF30       PUSH DWORD PTR FS:[EAX]
00743AB9   .  64:8920       MOV DWORD PTR FS:[EAX],ESP
00743ABC   .  B3 01         MOV BL,1
00743ABE   .  8D55 FC       LEA EDX,DWORD PTR SS:[EBP-4]
00743AC1   .  A1 FC239F00   MOV EAX,DWORD PTR DS:[9F23FC]
00743AC6   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
00743AC8   .  E8 6769E5FF   CALL dump.0059A434  在这里下F2断点
00743ACD   .  837D FC 00    CMP DWORD PTR SS:[EBP-4],0   
00743AD1   .  0F84 86000000 JE dump.00743B5D
00743AD7   .  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
00743ADA   .  A1 FC239F00   MOV EAX,DWORD PTR DS:[9F23FC]
点账簿菜单中的密码设置,输入旧密码:123 新密码456,点确定,OD断下
00743AC8   .  E8 6769E5FF   CALL dump.0059A434                       ;  取出真密码加密的字符
00743ACD   .  837D FC 00    CMP DWORD PTR SS:[EBP-4],0
00743AD1   .  0F84 86000000 JE dump.00743B5D
00743AD7   .  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
00743ADA   .  A1 FC239F00   MOV EAX,DWORD PTR DS:[9F23FC]
00743ADF   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
00743AE1   .  E8 4E69E5FF   CALL dump.0059A434
00743AE6   .  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
00743AE9   .  50            PUSH EAX
00743AEA   .  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
00743AED   .  8B86 70030000 MOV EAX,DWORD PTR DS:[ESI+370]
00743AF3   .  E8 2826DBFF   CALL dump.004F6120
00743AF8   .  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]            ;  把错误旧密码放入EDX
00743AFB   .  8D4D F4       LEA ECX,DWORD PTR SS:[EBP-C]
00743AFE   .  A1 FC239F00   MOV EAX,DWORD PTR DS:[9F23FC]
00743B03   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
00743B05   .  E8 AE79E5FF   CALL dump.0059B4B8
00743B0A   .  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]             ;  把加密后的旧密码放入EDX
00743B0D   .  58            POP EAX                                  ;  把真密码出栈,放回EAX
00743B0E   .  E8 7115CCFF   CALL dump.00405084                       ;  比较密码是否相等
00743B13      74 48         JE SHORT dump.00743B5D                   ;  相等就跳,这里必须跳
提示密码修改成功
关闭OD
用原版MoneyBook.exe打开,提示输入密码,把我们修改的密码,填入,成功打开了。哈哈

TOP

发新话题