看流星社区

 找回密码
 注册账号
查看: 1895|回复: 0

简单调用任意未导出SSDT函数方法

[复制链接]

该用户从未签到

发表于 2013-4-4 08:53:14 | 显示全部楼层 |阅读模式
SSDT未导出函数的调用,对于有SSDT导出表的32位系统来说,可以使用导出表+索引号的方式调用,没有导出的64位系统来说,一般都是各种硬编码。

实际上,还有兼容性和稳定性更好点的方法:

计算两个已知的导出函数的地址差值ulAddressDiff;

计算这两个函数的索引号差值ulIndexDiff;

计算每个索引号差值所占字节大小ulSizeInBytePerFunc=ulAddressDiff/ulIndexDiff;

根据已知导出函数的地址+索引号以及上一步的值,得出索引号是0的函数的地址pIndex0FuncAddress;

以后调用任何未导出函数时,pFuncAddress=pIndex0FuncAddress+ulSizeInBytePerFunc*ulFuncIndex;

ulFuncIndex最好从ntdll获取,这样比较稳定(即使64位系统,一样可以在32位进程按32位进程获取index的方法获取)。


原理:

Zw的函数,实际都是个Stub而已,所有Zw的函数除了索引号不一样,其他几乎完全一样。而且,所有Zw函数在几乎所有目前已知的系统上,都是按照索引号的顺序依次整齐排列的。
又因为Zw函数内部,使用了“相对call”,所以他们的顺序以及排列方式几乎不太可能变动而且实在也没有变动的必要。

so....上述方法稳定性和兼容性,我自认为比以往发现的其他调用未导出的SSDT函数的方法要稳定
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-30 08:06

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表