按照前辈们的经验,两次int3后代码段设断找到OEP
00401B08 - FF25 08124000 jmp [401208] ; msvbvm60.ThunRTMain
00401B0E 0000 add [eax], al
00401B10 - E9 44E7C100 jmp 01020259
00401B15 3B82 5224C0CB cmp eax, [edx+CBC02452]
00401B1B 0000 add [eax], al
00401B1D 0000 add [eax], al
可见此为vb程序。
查看00401208,
00401000 >7354A056 msvbvm60.__vbaVarSub
00401004 7354BC18 msvbvm60.__vbaVarTstGt
.........
00401120 734649DE msvbvm60.__vbaI2I4
00401124 00E064DC
00401128 7354BB42 msvbvm60.__vbaVarOr
.........
00401290 7351D66D msvbvm60.rtcR8ValFromBstr
00401294 00000000
00401298 00100017
0040129C 004075EC XXXX.004075EC
004012A0 0040762C XXXX.0040762C
004012A4 004075F4 XXXX.004075F4
004012A8 004012B0 XXXX.004012B0
004012AC 00000000
004012B0 00000001
004012B4 00000001
004012B8 004075E6 XXXX.004075E6
确定IAT为00401000长度294,其中00401124处有加密。
找到IAT加密部分代码:
00E075EC 6933 C08A433B imul esi, [ebx], 3B438AC0
00E075F2 3BF0 cmp esi, eax
00E075F4 75 5E jnz short 00E07654
00E075F6 EB 01 jmp short 00E075F9
发现esi为D3,A4时不加密;1C时加密。esi=1C时手工修改esi=D3得到完整IAT
但是00E075F4 75 5E jnz short 00E07654处patch代码
JMP 01070000
01070000:JE 00E075F9
CMP ESI,0D3
JE 00E07654
CMP ESI,0A4
JE 00E07654
MOV ESI,0D3
JMP 00E07654
报错,程序中止运行,为什么会这样???(问题一)
OS: Advanced Server, No ServicePack
CPU: AuthenticAMD, AMD AMD Sempron(tm) Processor 2800+, MMX @ 1600 MHz
Application data:
VmVyc2lvbjogUUhGeWJtc........................
…………………………………………………………………………………………
采用手工修复IAT,继续,参照论坛上相关文章,发现程序中有不少CALL 01040000,怀疑是Call壳,(不知是否正确?问题二)补上相关代码后也没见什么效果,lordpe修复大小提示修复前后大小相同。
import修复OEP:00401b10,rav:00001000,大小:294获得输入信息成功,修复抓取文件成功。
…………………………………………………………………………………………
OD载入dumped_.exe
00401B08 $- FF25 08124000 jmp [<&msvbvm60.ThunRTMain>] ; msvbvm60.ThunRTMain
00401B0E 0000 add [eax], al
00401B10 > - E9 44E7C100 jmp 01020259
00401B15 3B82 5224C0CB cmp eax, [edx+CBC02452]
00401B1B . 0000 add [eax], al
修改为
00401B08 $- FF25 08124000 jmp [<&msvbvm60.ThunRTMain>] ; msvbvm60.ThunRTMain
00401B0E 0000 add [eax], al
00401B10 > 68 98294000 push 00402998
00401B15 E8 EEFFFFFF call <jmp.&msvbvm60.ThunRTMain>
00401B1A 90 nop
00401B1B . 0000 add [eax], al
OEP处push 00402998 56 42 35 21 F0 1F 76 62 36 63 68 73 2E 64 6C VB5!?vb6chs.dll
运行报错:“0x00401b08”指令引用的“0xcc401208”内存。该内存不能为“read”。终止or调试?(这是怎么回事?问题三)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课