WEB开发网
开发学院网络安全黑客技术 压缩与脱壳-PE文件格式 四 阅读

压缩与脱壳-PE文件格式 四

 2007-01-12 20:12:08 来源:WEB开发网   
核心提示: assume edi:ptr IMAGE_IMPORT_DESCRIPTOR.while !([edi].OriginalFirstThunk==0 && [edi].TimeDateStamp==0 && [edi].ForwarderChain==0 && [edi].Name1==0
assume edi:ptr IMAGE_IMPORT_DESCRIPTOR
.while !([edi].OriginalFirstThunk==0 && [edi].TimeDateStamp==0 && [edi].ForwarderChain==0 && [edi].Name1==0 && [edi].FirstThunk==0)

edi 现在指向第一个 IMAGE_IMPORT_DESCRIPTOR 结构。接下来我们遍历整个结构数组直到遇上一个全 0 结构,这就是数组末尾了。

invoke AppendText,hDlg,addr ImportDescriptor
invoke RVAToOffset,pMapping, [edi].Name1
mov edx,eax
add edx,pMapping

我们要显示当前 IMAGE_IMPORT_DESCRIPTOR 结构的值。 Name1 不同于其他结构成员,它含有指向相关 dll 名的 RVA 。因此必须先将其转换成虚拟地址。

invoke wsprintf, addr temp, addr IDTemplate, [edi].OriginalFirstThunk,[edi].TimeDateStamp,
[edi].ForwarderChain,edx,[edi].FirstThunk invoke AppendText,hDlg,addr temp

显示当前 IMAGE_IMPORT_DESCRIPTOR 结构的值。

.if [edi].OriginalFirstThunk==0
mov esi,[edi].FirstThunk
.else
mov esi,[edi].OriginalFirstThunk
.endif

接下来准备遍历 IMAGE_THUNK_DATA 数组。通常我们会选择 OriginalFirstThunk 指向的那个数组,不过,如果某些连接器错误地将 OriginalFirstThunk 置 0 ,这可以通过检查 OriginalFirstThunk 值是否为 0 判断。这样的话,只要选择 FirstThunk 指向的数组了。

invoke RVAToOffset,pMapping,esi
add eax,pMapping
mov esi,eax

同样的, OriginalFirstThunk / FirstThunk 值是一个 RVA 。必须将其转换为虚拟地址。

上一页  1 2 3 4  下一页

Tags:压缩 脱壳 PE

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接