Side-by-side Assemblies

最近准备往AntiSpy中加入应用层检测Hook的功能。在写这个功能的时候碰上了一些问题,花了很长时间才搞定,在此记录下,后来人可以少走俺的这些“弯路”。

在枚举“阿里旺旺”进程的钩子时,发现此进程加载了两个同名的Dll,即“ comctl32.dll”。
而其中comdlg32.dll的导入表中会引入  comctl32.dll 模块的导出函数,这里就有一个问题了,comdlg32.dll模块到底导入的是哪个 comctl32.dll 导出的函数呢?

Google了下才发现,此技术叫Side-by-side Assemblies( http://msdn.microsoft.com/en-us/library/aa376307.aspx)。用到此技术的模块通常会被放在Windows\winsxs目录下。

当PE文件的Dll加载器加载相关的模块时,会 根据PE文件发布时自带的manifest 加载适当版本的Dll ,如果不发布该项manifest ,Dll加载器按默认版本加载Dll,例如,xp系统的默认   Comctl32.DLL   版本 5.0

用资源编辑器打开comdlg32.dll,并定位到manifest。
...
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
...
这里要求使用的是6.0.0.0版本,因此,此处 comdlg32.dll 导入的是第二个版本的 Comctl32.DLL  模块。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值