-
-
[旧帖]
[原创]解析DNGUARD 加解密原理。
0.00雪花
-
发表于:
2009-12-24 14:59
6358
-
[旧帖] [原创]解析DNGUARD 加解密原理。
0.00雪花
解析DNGUARD 加解密原理。
经过分析DNGuard大致原理如下。
1. c#写的库且有全局模块。目的是.net程序启动后在客户程序没有执行前运行
ZYXDNGuarder.Startup();
实现如下:
internal static void Startup()
{
if (!m_bStartup)
{
try
{
bool flag1 = (IntPtr.Size != 4) ? CheckRuntime64() : CheckRuntime();
}
catch
{
}
m_bStartup = RunHVM2();
m_bStartup = true;
}
}
很明了,32位运行CheckRuntime() 去HOOK JIT内核.
64位运行CheckRuntime64() 去HOOK JIT内核
目的就是为了在IL代码交给JIT前进入自己的函数用于解密已经加密的代码。
RunHVM2(); 虚拟机部分的处理。是否用了HVM用到在JIT部分就要处理虚拟化的代码了。
2. 加密过程估计是这样。
1>> 自己实现的"且有全局模块c#"程序集要与待加密的程序集合并。
2>> 合并后待加密程序集也有全局模块了,(很好的处理用于HOOK JIT解密代码 等等)。
3>> 合并后枚举各模块类函数等。加密IL,各方法中添加自己的解密代码。
为什么每个类cctor里都有ZYXDNGuarder.Startup() 感觉全局有一个应该够了吧。
4>> 获取需要添加的大小等,扩展资源节。
5>> .text 应该是没什么用。BSJB等全部贴到了资源节。
6>> 最后才应该是反各种工具的功能吧。ildasm reflector cff等。
3. 水平有限不知道是否正确。忘大侠指正啊。。
不涉及核心,只为邀请吗?谢谢。。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)