6. MASM32的bug和脱壳
VC6中,以下文件libc.lib是静态版,带D的是Debug版,带I的是Import版,带MT的是MultiThread版,带P的是CPP版。
此函数宏的定义有些不同,MASM错把GetEnvironmentStringsA当成了函数
LPCH
WINAPI
GetEnvironmentStrings(
VOID
);
LPWCH
WINAPI
GetEnvironmentStringsW(
VOID
);
#ifdef UNICODE
#define GetEnvironmentStrings GetEnvironmentStringsW
#else
#define GetEnvironmentStringsA GetEnvironmentStrings
#endif // !UNICODE
修改kernel32.inc文件后还要重新生成kernel32.lib,要用到C:\Users\Hang\Downloads\RadASM\masm32\tools\inc2l\inc2l.exe,此文件也有bug,调用ml和link时路径不对,也要修复。
对于压缩壳:
从EP开始运行,第一个push之后,对栈下访问断点,F9运行,直到断在本模块,并看见许多push,pop等恢复现场的操作时,找到jmp XXXX的代码,一般就是跳转到OEP。
如果想dump出无壳程序,停在OEP时dump是好时机,dump之后一般还要修复导入表才能正常使用。脱壳后的文件可以静态分析,也便于打补丁。
1. 先点dump,保存好文件
- 再点IAT AutoSearch,观察VA和Size是否正确
- 点Get Imports
- 最后点Fix Dump,修复之前dump下来的文件