记录一次C#/.NET以及VB p-code/native的逆向破解
玩了5份样本,2份dotnet的,2份native的和1份pcode的。
dotnet framework程序
-
dotnet的相对会简单,只需要使用dnspy工具打开目标程序,找到逻辑点后,点编辑函数,然后去掉校验逻辑。随后保存到程序集即可。
-
遇到加了混淆以后对外显示原始方法名称,但是点进去以后发现所有方法全都是直接返回null的。
-
通过[DotNet Id_1.0.0.3](https://pan.baidu.com/s/1K5tQuynpYTS83gydNopKcg?pwd=tmnl) 提取码:tmnl 查壳发现其是`maxtocode`混淆的
-
这种可通过de4dot_.NET_Reactor_v6.x_Modded 提取码:csz9。这种脱壳以后不会有乱码,注意后续Reactor产品可能也会继续升级,对应的反混淆工具也需要相应跟着一起升级。
-
VB程序
-
VB Decompiler
-
基础的伪代码获取工具,可能会提示“file is packed”即使文件没有被加过壳
-
-
VBRezQ
-
VB的窗体和虚拟指令获取,但是如果对象是pcode编译,则只能获取到方法名,获取不到内容
-
-
VBDec
-
同样也是获取窗体和虚拟指令的,但是可能会报错导致获取不全而中断
-
-
WKTVBDebugger
-
动态调试pcode编译,并且以虚拟指令的方式显示,通过修改BranchE(1C)/T(1D)来变更目标程序的逻辑
-
以上几个工具下载 提取码:123t
脱壳
-
其他的一些比较难的如VMProtect等壳,可以是通过esp原理使用动调的方式手动去掉
-
壳往往都是通过对外界表现出黑匣子效应,对程序本身表现出透明效应。所以壳会在程序初始化的时候将堆栈保存下来,在解密完成后恢复堆栈。故往往会有
pushad
这样的指令,此时只要监控该栈位置,以发现在popad
的位置,该位置离程序真正的main函数或者入口函数会非常接近。
-