下你所需,载你所想!
汇集开发技术源码资料

加载64位Dll,底层执行64位命令

:15.388KB :1 :2023-05-26 16:37:56

部分简介

再说我拓展了了什么内容,新增加了获取x64的ntdll的基质和导出表的命令,顺便封装了一下LdrLoadDll和LdrGetProcedureAddress,这样程序就可以实现随意加载x64Dll,然后只需加载kernelbase.dll(x64)和kernel32.dll,即可正常调用大部分的x64API。
注意:不要想着去加载x64版本的user32.dll,跑不起来,绘制层的依赖过于复杂(不过有水平可以搞搞64位的win32u.dll,那个随便玩)
测试了一下,确实能正常跑一些x64的库,具体更多内容自己去研究吧,这份代码的还是有很多内容可以拓展的。
多提一句:切换到x64时为什么要保存fs寄存器?因为段寄存器不是你想象的那么简单,在AMD处理器上,syscall之后,段描述符会被放在CPU缓存中,在回到正常R3的代码后,你以为CS段寄存器已经恢复到x86正常了,实际上CPU还在用缓存中的段描述符,根本没法正常执行代码,一执行就会导致内存错误,所以需要讲fs寄存器保存下来,到时候用fs寄存器来恢复正常的DS和CS段寄存器。(注意:有调试器附加根本不会发现这个问题,因为有调试器运行的情况下,段寄存器会随调试器行为刷新,根本发现不了问题)
代码中导出的x64的DebugActiveProcess就不用折腾了,用IDA看了NtDebugActiveProcess,这个命令被内核卡了,Wow64进程调试不了64位进程。

加载64位Dll,底层执行64位命令

热门推荐

相关文章