压缩与脱壳-PE文件格式 四
2007-01-12 20:12:08 来源:WEB开发网invoke AppendText,hDlg,addr NameHeader
.while dword ptr [esi]!=0
现在我们准备遍历 IMAGE_THUNK_DATAs 数组以查找该 DLL 引入的函数名,直到遇上全 0 项。
test dword ptr [esi],IMAGE_ORDINAL_FLAG32
jnz ImportByOrdinal
第一件事是校验 IMAGE_THUNK_DATA 是否含有 IMAGE_ORDINAL_FLAG32 标记。检查 IMAGE_THUNK_DATA 的 MSB 是否为 1 ,如果是 1 ,则函数是通过序数引出的,所以不需要更进一步处理了。直接从 IMAGE_THUNK_DATA 提取低字节获得序数,然后是下一个 IMAGE_THUNK_DATA 双字。
invoke RVAToOffset,pMapping,dword ptr [esi]
mov edx,eax
add edx,pMapping
assume edx:ptr IMAGE_IMPORT_BY_NAME
如果 IMAGE_THUNK_DATA 的 MSB 是 0 ,那么它包含了 IMAGE_IMPORT_BY_NAME 结构的 RVA 。需要先转换为虚拟地址。
mov cx, [edx].Hint
movzx ecx,cx
invoke wsprintf,addr temp,addr NameTemplate,ecx,addr [edx].Name1
jmp ShowTheText
Hint 是字类型,所以先转换为双字后再传递给 wsprintf ,然后我们将 hint 和函数名都显示到编辑控件中。
ImportByOrdinal:
mov edx,dword ptr [esi]
and edx,0FFFFh
invoke wsprintf,addr temp,addr OrdinalTemplate,edx
在仅用序数引出函数的情况中,先清空高字再显示序数。
ShowTheText:
invoke AppendText,hDlg,addr temp
add esi,4
在编辑控件中插入相应的函数名 / 序数后,跳转到下个 IMAGE_THUNK_DATA 。
.endw
add edi,sizeof IMAGE_IMPORT_DESCRIPTOR
处理完当前 IMAGE_THUNK_DATA 数组里的所有双字,跳转到下个 IMAGE_IMPORT_DESCRIPTOR 开始处理其他 DLLs 的引入函数了。
附录 :让我们再来讨论一下 bound import 。当 PE 装载器装入 PE 文件时,检查引入表并将相关 DLLs 映射到进程地址空间。然后象我们这样遍历 IMAGE_THUNK_DATA 数组并用引入函数的真实地址替换 IMAGE_THUNK_DATAs 值。这一步需要很多时间。如果程序员能事先正确预测函数地址, PE 装载器就不用每次装入 PE 文件时都去修正 IMAGE_THUNK_DATAs 值了。 Bound import 就是这种思想的产物。
为了方便实现, Microsoft 出品的类似 Visual Studio 的编译器多提供了 bind.exe 这样的工具,由它检查 PE 文件的引入表并用引入函数的真实地址替换 IMAGE_THUNK_DATA 值。当文件装入时, PE 装载器必定检查地址的有效性,如果 DLL 版本不同于 PE 文件存放的相关信息,或则 DLLs 需要重定位,那么装载器认为原先计算的地址是无效的,它必定遍历 OriginalFirstThunk 指向的数组以获取引入函数新地址。
Bound import 在本课中并非很重要,我们确省就是用到了 OriginalFirstThunk 。要了解更多信息可参见 LUEVELSMEYER 的 pe.txt 。
- ››PendingIntent实现原理和代码
- ››Pentium III处理器的单指令多数据流扩展指令(1)...
- ››Pentium III处理器的单指令多数据流扩展指令(2)...
- ››Pentium III处理器的单指令多数据流扩展指令(3)...
- ››Perl 6 发布
- ››PermissionInfo Android权限枚举方法
- ››Perl 和 Amazon 云,第 1 部分:通过构建简单的照...
- ››Perl 和 Amazon 云,第 2 部分:通过 HTML 表单将...
- ››Perl 和 Amazon 云,第 3 部分:上传图像并创建、...
- ››Perl 和 Amazon 云,第 4 部分:深入探究完整 mod...
- ››Perl 和 Amazon 云,第 5 部分:了解完整 mod_per...
- ››PE文件学习笔记(1)
更多精彩
赞助商链接