bpmb 4C74D0 x
bpmb 5A3875 x
再跑
虽然没有断在 4C74D0 但断在了5A3875
这时候, ESP是 13FFC4, EBP是 13FFF0
13FFC4 的值是 7C816D4F 正好是接在kernel32的 CALL oep的后面
南蛮妈妈觉得到这儿可以dump了, 清掉所有断点
壳在TLS的CALL中创建了10几个线程
这个时候如果把当前eip改成jmp eip出来用LordPE dump是不行的
如果把线程都杀了, 写个int 3 ,让od接管来dump也不太稳定
用IceExt的!dump
总大小是 2DF000
理想的应该是!dump \??\f:\1.bin 400000 2DF000
但Windows管理内存是段页式的, 并不是所有的页都在内存中
找一块空地, r eip , 6DEF00
a 6DEF00
写一段话,保证要dump的都在内存中
006DEF00 B8 00104000 mov eax,EXECrypt.00401000
006DEF05 8B18 mov ebx,dword ptr ds:[eax]
006DEF07 05 00100000 add eax,1000
006DEF0C 3D 00804C00 cmp eax,EXECrypt.004C8000
006DEF11 ^ 7C F2 jl short EXECrypt.006DEF05
006DEF13 90 nop
006DEF14 90 nop
执行到6DEF13后, 就可以
!dump \??\f:\1.bin 400000 c8000 //PE头和CODE段
再从4C8000到519000过一遍
!dump \??\f:\2.bin 4c8000 51000 //DATA段到rsrc段
再是519000到5AF000
!dump \??\f:\3.bin 519000 96000 //m.2mwp5l段
最后是5AF000到6DF000
!dump \??\f:\4.bin 5af000 130000 //nt5pe0gm段
三 修复PE格式
把1.bin 2.bin 3.bin 4.bin 用WinHex 拼起来
然后用LordPE打开 拼起来的文件, 修一些东西
EntryPoint: 002DEE6A -> C74D0
SectionTable: 把每个ROffset 改成和 VOffset一样的值; RSize 改成和 VSize一样的值
TlsTable: (001AF110, 00000018) -> (F2000, 18)
得到 1.exe
四 输入表
随便找个delphi的程序把输入表扣出来, 贴到1.exe
贴的时候, 要选上新建IAT, 去掉修复ep to oep ,选上新增区段
南蛮妈妈借的是flashfxp
得到1_.exe, 这时可以用od载入1_.exe
看到IAT是在 4ED168开始
修复加密的输入表, 南蛮妈妈的处理方法是
随便找一个属于kernel32中的
eip改成到加密的地址的入口
对kernel32的.text段下内存访问断点
走着走着, 会看到,它把kernel32的导出函数地址一个一个拿出来加密, 和真实的api地址的密文比较