安全中国首页 > 文章中心 > 编释语言
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:www.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

《加密解密 技术内幕》7.3 加壳时处理IAT

更新时间:2008-3-30 1:46:22
责任编辑:阿loosen
热 点:
  避免壳运行时处理IAT能被跳过的弊端。达到原程序没有一刻是完好的的目的。 

加壳时处理IAT要的是找到文件中IAT所在位置和大小。 

  VC和DELPHI程序不同。 

  一、VC notepad.exe分析 

  PE header(eifanew)在e8处。 

  IAT RVA在eifanew+d8处,1000 

  IAT Size在eifanew+dc处,324,这2个值是系统参考值,系统在装入文件时就会参考这2个值。 

  物理位置上的IAT放在第一个节。即400处。 

  PE头接着就是第一个节,所以取SizeOfHeader值就可以定位到第一个节。 

  SizeOfHeader在eifanew+54处,400。 

  现在有了IAT的物理位置和大小。 

  二、DELPHI project1.exe分析 

  eifanew+d8和eifanew+dc处都为0。 

  IAT RVA在eifanew+80处,54000,即目录表的IMPORT_DIR.VirtualAddress 

  IAT Size在eifanew+84处,1f4,即目录表的IMPORT_DIR.Size 

  这2个值也是系统参考值,系统在装入文件时参考这2个值,把IAT放进去。 

 

  跳转表在第一个节开始。 

 

  三、系统装入IAT工作流程猜测 

  先在eifanew+d8和eifanew+dc取IAT RVA和IAT Size,值非空即将第一个节IAT Size 

个字节装入IAT RVA指向的地址。 

  若取得的IAT RVA和IAT Size为0即取eifanew+80和eifanew+84的IMPORT_DIR.VirtualAddress 

和IMPORT_DIR.Size值,将这2个值作为IAT RVA和IAT Size参考值。再去BaseOfData 

取各API的字串和DLL字串,根据字串取API地址,再把地址放到IAT RVA中。 

 

  四、加壳时加密IAT 

  要在加壳时加密IAT,对VC的程序很简单。对DELPHI复杂很多。一:取IMPORT_DIR值, 

再用取各API地址,把地址写回第一个节,再把IAT RVA和IAT Size的值改成IMPORT_DIR的值。 

这样就完成了DELPHI程序IAT向VC程序的转变。再用对VC程序IAT加密的方法对其进行加密。 

但有一难点,原来的第一个节没办法处理。所以加壳时加密IAT只能针对个别程序。 

 

  五、其它 

  DELPHI这种对API地址处理的方式也有其好处,跨平台。

 
相关文章
一日一文章
 
一日一软件
一日一动画