实现自动脱壳被加密的Net程序集

简介: 本次脱壳的测试对象是CodeLib 2 V14.9.2468.42911 更新日期是2006-10-5 目前的最新版本。运行脱机程序到如下界面:选中列表中的第二项,codelib.exe,选择一个保存路径,点击dump按钮,即可完成脱壳。
本次脱壳的测试对象是CodeLib 2 V14.9.2468.42911 更新日期是2006-10-5 目前的最新版本。

运行脱机程序到如下界面:



选中列表中的第二项,codelib.exe,选择一个保存路径,点击dump按钮,即可完成脱壳。
脱壳完的程序保存到codedump.exe。

注意这个文件是直接dump脱壳的结果,不能直接运行。
使用ildasm 反编译,然后打开il文件
查找 IL_0000:  call       void InFaceMaxtoCode::Startup()
替换为 //IL_0000:  call       void InFaceMaxtoCode::Startup()
即取消对 maxtocode 运行库的引用。
然后运行 ilasm 编译成exe文件。
放在codelib的安装目录中即可正常运行了。


下载地址: http://www.bbsftp.com/temp/codelib_dumped.rar
对 codelib注册算法有兴趣的可以下载回去研究研究。
注意:先重命名安装目录中的codelib.exe,然后解压缩放进去就可以运行了。
这个程序里面还有很多anti,不过都不重要了,可以通过直接修改il来去掉anti。

脱壳机暂时不准备公开,DRT小组内部共享。
这次先简单介绍一下原理,下次有机会再详细介绍一下如何实现通用的内存程序集dumper。
这个dumper首先按照 pe dumper的原理,从内存里面dump出pe文件。
然后在在pe文件中增加一个只读的锻。用来放dump出来的il码。
通过前面几篇帖子介绍的方法,利用net 2.0的新特性取道方法的methodbody,
然后重建header,datatable,将结果存入新锻中,再修改相应method的rva指向新的header。

对所有的方法都这样处理一遍,即可完成dump。

这种方式对压缩壳,加密壳都有效。


目录
相关文章
|
9月前
.Net6新版本的AssemblyLoadContext 加载程序集和卸载程序集
.Net6新版本的AssemblyLoadContext 加载程序集和卸载程序集
94 0
.Net6新版本的AssemblyLoadContext 加载程序集和卸载程序集
|
小程序 C# Windows
|
SQL 架构师 Java
C#&.net系列之——C#如何动态加载调用C++动态链接库?非常简单!!!
今天介绍动态调用的方法。很多时候,Dll库的目录可能是变化的,或是有些场景,需要根据具体的情况,来动态加载这些Dll库。这样使用静态调用的方式就很不方便,C#中我们经常通过配置动态的调用托管Dll,那么是不是也可以这样动态调用C++动态链接呢? 只要通过LoadLibrary, GetProcess, FreeLibrary这几个函数是可以动态调用动态链接的(它们包含在kernel32.dll中)。
C#&.net系列之——C#如何动态加载调用C++动态链接库?非常简单!!!
|
缓存
详解.NET程序集的加载规则
  程序集的加载涉及到很多方面的知识,包括配置文件、全局缓存装配、私有目录等的查找。用LoadAWithPartialName方法加载程序集,必须提供程序集的文本名称,还可以包公钥标记、版本或区域性等,但不必包含完全引用信息,如名称、版本、区域性、公钥标记。
812 0
一起谈.NET技术,Visual Studio对程序集签名时一个很不好用的地方
  由于我们的项目底层使用到一个通过LogicalCallContext实现的上下文数据管理框架,导致所有的Unit Test不能正常运行。具体的现象在《只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题》有过详细的介绍。
847 0
|
存储 数据安全/隐私保护 数据库