TA的每日心情 | 无聊 2018-2-10 09:25 |
---|
签到天数: 119 天 [LV.6]常住居民II
|
财智记账本 修改遗忘密码的方法
说明:财智记账本真正的可执行文件是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打开,提示输入密码,把我们修改的密码,填入,成功打开了。哈哈
[ 本帖最后由 aytcgjb 于 2007-10-31 13:28 编辑 ] |
|