ViRb3/de4dot-cex

GitHub: ViRb3/de4dot-cex

专为ConfuserEx混淆优化的.NET去混淆工具,可还原控制流、解密常量与资源,将被混淆的代码恢复为可读可运行状态。

Stars: 570 | Forks: 134

## de4dot CEx 一个完全支持原生 ConfuserEx 的 de4dot 分支 ## 功能 * 支持 x86 (native) 模式 * 支持普通模式 * 解密并内联常量 * 解密资源 * 修复控制流 * 修复代理调用 * 去混淆后的程序集可运行 ## 注意事项 * 在运行此去混淆器之前,你**必须**先解包被混淆的程序集。最简单的方法是在方法解密后立即转储模块。 * 此去混淆器使用方法调用来解密常量,因此如果混淆程序集中存在恶意软件,你始终面临**运行**恶意软件的风险。请务必谨慎,并使用虚拟机/Sandboxie! ### [原始 README](README-orig.md) ## 样本 ### 之前(混淆符号已缩短): ``` ublic byte[] ShiftAddress(uint address) { byte[] array = new byte[4]; for (;;) { IL_07: int num = -2174478396; for (;;) { uint num2; switch ((num2 = (uint).a(num)) % 7u) { case 0u: goto IL_07; case 1u: { int num3 = 0; num = (int)(num2 * 81144519u ^ 2359132411u); continue; } case 2u: num = (int)(num2 * 2975731004u ^ 34171348176); continue; case 3u: { int num3; num3++; num = (int)(num2 * 2174567110u ^ 244457623u); continue; } case 5u: { int num3; num = ((num3 >= 4) ? 631278122 : 1299552879); continue; } case 6u: { int num3; array[num3] = (byte)(address >> num3 * 8 & 255u); num = 556578930; continue; } } return array; } } return array; } ``` ### 之后: ``` public byte[] ShiftAddress(uint address) { byte[] array = new byte[4]; for (int i = 0; i < 4; i++) { array[i] = (byte)(address >> i * 8 & 255u); } return array; } ``` ### 之前(混淆符号已缩短): ``` public bool WriteBytes(uint address, List buffer) { byte[] array = buffer.ToArray(); IntPtr intPtr; uint num = Memory.a(this.Handle, b((long)((ulong)address)), array, (uint)array.Length, out intPtr); for (;;) { IL_25: int num2 = 482469350; for (;;) { uint num3; switch ((num3 = (uint).c(num2)) % 5u) { case 0u: this.d.Account.Log.WriteLine(.e(3167610260u)); num2 = (int)(num3 * 3588940066u ^ 1074051690u); continue; case 2u: return false; case 3u: goto IL_25; case 4u: num2 = (int)(((num != 0u) ? 4496537787u : 434512514u) ^ num3 * 589449693u); continue; } goto Block_1; } } Block_1: return true; } ``` ### 之后: ``` public bool WriteBytes(uint address, List buffer) { byte[] array = buffer.ToArray(); IntPtr intPtr; if (Memory.WriteProcessMemory(this.Handle, (IntPtr)((long)((ulong)address)), array, (uint)array.Length, out intPtr) == 0u) { this.Owner.Console.Log.WriteLine("WriteBytes failed: WriteProcessMemory failed"); return false; } return true; } ```
标签:ConfuserEx, DAST, de4dot, Ruby on Rails, x86, 云安全监控, 云资产清单, 代码还原, 内存转储, 反混淆, 多人体追踪, 常量解密, 恶意软件分析, 控制流复原, 网络安全, 脱壳, 逆向工程, 隐私保护, 静态分析