需要注意的是 Make imports segment 是 PE 文件特有的选项,该选项会隐藏输入表区域
的所有数据,同时你获得的好处便是能在图表功能中看到 API 的调用。假如你希望查看在
输入表的范围内的代码或者数据,你需要使用从菜单中选择 “ 编辑 ” => “ 区段 ” 以删除遮
挡数据的部分区段。
为了更真实的模拟从内存中截取代码的情况,在这里选择 Binary file ,载入偏移量 选
400000 ( 根据实际代码在内存中的基址来选择 ) , 然后 IDA 就开始尝试分析可能存在于该文
件中的代码了。对照 OD 中的 OEP 地址,在 IDA 中可以看到以下代码:
seg000:004010CC push ebp
seg000:004010CD mov ebp, esp
seg000:004010CF sub esp, 44h
seg000:004010D2 push esi
seg000:004010D3
call
ds:dword_4063E4
seg000:004010D9 mov esi, eax
seg000:004010DB mov al, [eax]
seg000:004010DD cmp al, 22h
seg000:004010DF jnz short loc_4010FC
OEP 处的部分代码
OD 中对应的显示:
004010D3 FF15 E4634000
call
dword ptr [4063E4] ; kernel32.GetCommandLineA
使用以下 ollyscript (附件中的 ollyGetSym.txt )提取 IAT 的符号:
var ea
var Ecount // 0
0
0
0 分隔号的记数器
var oFile
ask
"
请输入 IA T 起始地址
"
cmp $RESULT, 0
je ECancel
mov ea, $RESULT
ask
"
输出文件?
"
cmp $RESULT, 0
je ECancel
mov oFile, $RESULT
TryGetSym:
GN [ea] // 获取该地址的符号
cmp $RESULT,00000000 // OLLYSCRIPT
OLLYSCRIPT
OLLYSCRIPT
OLLYSCRIPT 是区分 00000000
00000000
00000000
00000000 和 0
0
0
0 的
je ETest
WRTA
oFile,$RESULT_2