5D艺术网首页
商城
|
资讯
|
作品
|
博客
|
教程
|
论坛
登录
注册
加为好友
发短消息
来自:
性别:秘密
最后登录:2012-10-18
http://passion.5d.cn/
首页
|
新闻
|
话题
|
博客
|
相册
|
艺术作品
|
社交关系
|
留言板
|
社交圈
2006/10/30 | Import表和壳
类别(俺没分类)
|
评论
(0)
|
阅读(39)
|
发表于 22:08
(这里的“指向”都指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是啥。
0
评论
Comments
日志分类
首页
[233]
俺没分类
[233]