剑舞天痕

我的日历

最新评论

访问计数

获取 RSS

Passion 最新的 20 条日志

你现在的位置:剑舞天痕>俺没分类>Import表和壳

Import表和壳 [1030,2006]

Passion 发表在 俺没分类

(这里的“指向”都指RVA,也即PE文件被加载入内存后的偏移,而非文件原始偏
移。)

输入表在某个Section开始,开始就是一堆IMAGE_IMPORT_DESCRIPTOR的数组列表,每个记录对应一个DLL。
一个IMAGE_IMPORT_DESCRIPTOR包括OrginalFirstThunk和FirstThunk,这两者指向的内容都是一堆RVA数组(DWORD的)。
也包括一Name,其内容指向一DLL名称的字符串。

PE加载时,会搜OrginalFirstThunk指向的每一个DWORD,每个DWORD都指向一字符串。OS根据字符串的内容获得API地址,填到FirstThunk的对应DWORD地方,就OK了。如果无OrginalFirstThunk也可不处理,但要保证FirstThunk被其他方式填对。

有些加壳的,在运行被加壳程序时就手工填对了FirstThunk,并弄没了OriginalFirstThunk,甚至把函数名字符串也给弄没了。那时候就得从内存中抓IAT,从正确的FirstThunk里头找到函数的函数名,并把字符串存到IAT的某处并把偏移存到OriginalFirstThunk中。

所谓的修复出来的东西能不能跨平台,区别大概也在这里:不能跨的,OriginalFirstThunk里头没东西,只有FirstThunk填对了地址,换个OS就不对了。能跨的,OriginalFirstThunk填对了DLL和函数名,加载时能动态被获得地址填入FirstThunk,所以能跨平台。

原来壳的HOOK API是自己修改了IAT,将其指向自身壳的API HOOK函数实现程序被调用时的跳转。此时ImpRec也难以直接找到被HOOK的API是啥。

全部分类中有 1 篇日志 | 每页显示1篇 |

评论(共 条) 我要评论

{CommentContent}

Posted by {CommentAuthor} at {CommentTime} | {CommentUrl}