使用x64dbg反混淆非托管壳

Posted 麒麟网络

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用x64dbg反混淆非托管壳相关的知识,希望对你有一定的参考价值。

SystemDomain::ExecuteMainMethod处下断点,是一个非常折中的方案,不会过于深入clr内部,也不会随随便便被hook住
运行到这里的时候主程序集已经被这些非托管壳还原到对应位置
为什么这说,请看下图

这是主线程的调用堆栈(我在主线程里运行了消息泵,所以暂停住了)
可以看到底端是不知名的地址,应该是TMD之类的壳生成的
再向上看,有个clr._CorExeMain和clr._CorExeMainInternal,clr._CorExeMain是导出函数

有被hook的风险,所以在这里下断点不适合,clr._CorExeMainInternal其实也可以,但是感觉不太好(没测试过)
然后是
······
clr.RunMain
clr.Assembly::ExecuteMainMethod
clr.SystemDomain::ExecuteMainMethod
clr.ExecuteEXE
······
这4个应该都可以,都是比较安全的,几乎不可能被hook住,直接dump下这时的主模块就没啥问题了
不过只测试了clr.SystemDomain::ExecuteMainMethod,测试了3个壳(2个强壳,1个打包器),都是可以的

以上是关于使用x64dbg反混淆非托管壳的主要内容,如果未能解决你的问题,请参考以下文章

JPA 混淆(托管与非托管实体)

如何在 C++ 非托管代码 Json 中反序列化一个字节 [] 的 json 字符串?

C# 托管和非托管混合编程

检查非托管 DLL 是 32 位还是 64 位?

检查非托管 DLL 是 32 位还是 64 位?

Visual Studio 非托管 C++ 智能文件资源管理器