关于PE病毒编写的学习(八)——定位API的N种方法(2010年10月25更新)

由于大部分的文件感染型病毒框架都不可以像“前置病毒”那样拥有自己的输入表,因此需要自行定位API

说一千道一万,想要定位API,向是要定位Kernel32.dll的基地址

 

总结所以这些方法,可以分为是五个小方向,它们又产生很多变种。

 

一、定位kernel32.dll基地址的方法

(1)硬编码方式

    由于kernel32.dll的基地址在相同版本windows下,基本上它的位置是固定的。这种方法在早期的PE病毒中很常见,现在已经很少使用了。

 

(2)利用程序初始化时,首先寄存器或堆栈中保留的kernel32.dll内存模块中的某个地址,之后无论哪种变体,都是以这个kernel内的地址向前搜索,找到kernel.dll的基地址。

以下地方就存储着这些地址: 

                                     ①寄存器EDI

                                     ②刚刚初始化的堆栈:[esp]、[esp+4H]、[esp+10H]

 

以[esp+10h]为例,我们看一下参考代码(另外注释里有一些常见错误代码的写法):

Start: 

  mov edx,[esp+10h]
SearchDosHeader:
  dec  edx
  xor  dx,dx                       ;加速搜索,因为DLL以1M长度对齐,所以这里以64K字节为跨度来加速搜索
  cmp word ptr[edx],'ZM'  ;不要自作聪明写成'MZ',那是以字节逐个读取的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值