wwh1004 发表于 2018-7-8 18:22

[入门级]使用x64dbg暴打非托管壳(TMD,SE,EVB等)

本帖最后由 wwh1004 于 2018-7-9 10:56 编辑

TMD=Themida,SE=Safengine Shielden,EVB=Enigma Virtual Box为什么说是入门级,因为你需要会使用工具和使用x64dbg下断点,别的你都不需要会了,文章中演示的都属于简单情况。
什么?完全不会x64dbg?看看我上午发的这篇教程,只需要看如何下断点,2分钟包学会:https://www.52pojie.cn/thread-762711-1-1.html


文章中用到的工具:

AssemblyRebuilder by wwh1004:https://www.52pojie.cn/thread-699172-1-1.html

ExtremeDumper by wwh1004:https://www.52pojie.cn/thread-712611-1-1.html

Universal Fixer by CodeCracker:https://www93.zippyshare.com/v/wyCquy7N/file.html
这个文件被包含在上面这个压缩包里(路径ToolsArchive_Part1.zip\PC_CONTENTS\MY_NET_TOOLS\Unpackers\Universal_Fixer.exe)。压缩包里有CodeCracker大神无偿分享的各种工具,.NET逆向必备神器级工具包

x64dbg:https://github.com/x64dbg/x64dbg/releases
注意装上插件SharpOD并按SharpOD的推荐设置设置好

dnSpy by 0xd4d:https://github.com/0xd4d/dnSpy/releases



视频在线观看:https://www.bilibili.com/video/av26414595
视频下载: https://pan.baidu.com/s/1LToTIuQ2-TtbRjJQLeCvCg 密码: ffc4
文章看不懂的地方务必手动转到视频对应位置查看
下方还有红字标明的原理,算是核心内容了

补充一个实战,脱画眉大神的" 【.Net UnpackMe】 免费的壳,也可以加出别人脱不掉的效果!不服来战,坐等被虐。",https://www.52pojie.cn/thread-459231-1-1.html。
视频在线观看:https://www.bilibili.com/video/av26458567
视频下载:https://pan.baidu.com/s/1mM3TervBoyXqdCrK-D6zEA 密码: 8xt8



先用ConfuserEx加一层壳,只是演示如何脱非托管壳,所以ConfuserEx只设置加anti dump

然后开始演示Themida:

Themida保护全开

配置好x64dbg
调试加壳后文件,添加dll断点,clr.dll(这一步可以看视频是怎么添加的),等断下来后,转到符号窗口

点击clr.dll(右键加载符号文件,我的已经下载过了,没下载过的可能要等10分钟+),搜索SystemDomain::ExecuteMainMethod,在这里下断点

成功断下
接下来没x64dbg什么事情了,是不是非常简单,完全只需要用工具

把ExtremeDumper的转储方式设置为MegaDumper(用MegaDumper也可以,只不过觉得那个界面太难看了,而且还很卡...)
右键,查看模块,Dump主模块

使用Universal Fixer修复,一般把我选中的这些勾上,别的都不选就可以了
运行正常,反编译也正常:




原理:
在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个打包器),都是可以的

Shielden:
Dump前操作一样,只不过Dump之后要用CFF Explorer手动清理导入表
至于为什么要清理,看@brezeer 的https://www.52pojie.cn/thread-439154-1-1.html
或者也可以使用我的AssemblyRebuilder,重建程序集,程序体积完全恢复正常,一切OK(如果还有强壳包裹了就不OK了,AssemblyRebuilder会让接下来的脱壳无法进行,这时清考虑手动清理导入表)

Enigma Virtual Box:
没啥说的了,会了TMD SE,这个也就会了

接下来我放出之前加壳的文件,大家可以自己尝试一下
链接: https://pan.baidu.com/s/1CjtqeTTEmMi_F1TR7hO8aQ 密码: 3261

SCL 发表于 2018-7-12 18:54

楼主真厉害。。。。

zxzt 发表于 2019-4-18 21:25

dump下了,更之前的代码一样,是我哪里操作错了
An exception occurred when decompiling this method (06000267)

ICSharpCode.Decompiler.DecompilerException: Error decompiling smgw.ModuleLicense smgw.AuthHelper::License()
---> System.NullReferenceException: 未将对象引用设置到对象的实例。
   在 ICSharpCode.Decompiler.ILAst.ILAstOptimizer.IntroducePropertyAccessInstructions(ILExpression expr, ILExpression parentExpr, Int32 posInParent) 位置 C:\projects\dnspy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:行号 1589
   在 ICSharpCode.Decompiler.ILAst.ILAstOptimizer.IntroducePropertyAccessInstructions(ILNode node) 位置 C:\projects\dnspy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:行号 1579
   在 ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) 位置 C:\projects\dnspy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:行号 244
   在 ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) 位置 C:\projects\dnspy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:行号 123
   在 ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) 位置 C:\projects\dnspy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:行号 88
   --- 内部异常堆栈跟踪的结尾 ---
   在 ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) 位置 C:\projects\dnspy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:行号 92
   在 ICSharpCode.Decompiler.Ast.AstBuilder.<>c__DisplayClass89_1.<AddMethodBody>b__0() 位置 C:\projects\dnspy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:行号 1531

dwh007 发表于 2018-7-8 18:50

大神请分享 SharpOD插件,谢谢

dwh007 发表于 2018-7-8 19:09

dwh007 发表于 2018-7-8 18:50
大神请分享 SharpOD插件,谢谢

谢谢,找到了,

冥界3大法王 发表于 2018-7-8 19:48

插件还是自己汉化过的给力啊~~
提示也更像人话儿。

fandongjie 发表于 2018-7-8 20:33

谢谢分享,学习了,高难度啊

170077000 发表于 2018-7-8 20:49

这个可以有X32还没用过听说比OD好很多可是使用的视频好像很少

kilkilo502 发表于 2018-7-8 20:53

学习了多谢老师的教程

梦幻110110 发表于 2018-7-8 21:14


楼主能不能发下你配置好的x64dbg谢谢

wwh1004 发表于 2018-7-8 21:24

梦幻110110 发表于 2018-7-8 21:14
楼主能不能发下你配置好的x64dbg谢谢

下载原版x64dbg,装上SharpOD,按SharpOD压缩包里的图片设置,自己动手吧

QB56 发表于 2018-7-8 21:33

用心的教程,热心奉上
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: [入门级]使用x64dbg暴打非托管壳(TMD,SE,EVB等)