{samartassembly}4.1.39分析(加解密一)

 2009-11-21       作者:rzh 网名:看雪_grassdrago

 

目标:样例程序AppCllDll.exe (引用MyDllTestDll),见样例程序

环境:.net2.0

工具:Reflector5.1.6.0

      Visual Strdio2005

      CFF Explorer.exe

      UltraEdit32

      WinDbg6.11.0001.404 x86

      PeBrowseDbg9.1.3.0

      ILasm/ILdasm

      {samartassembly}4.1.39

 

分析方式:按照{ samartassembly }功能 (以下简称{sa}),采用先分解最后综合的方式逐步分析。

分析内容:原理、算法、反向工程的方法和步骤。

 

 一、错误元数据的修正

准备:使用{sa}对样例程序AppCllDll.exe添加错误元数据后,保存为AppCllDll.ErrData.Exe进行分析。

      {sa}设置如下:

       1)选择添加错误流数据

       2)选择添加错误元数据

       3)选择添加致ILdasm出错的数据

 

 

 

Reflector打开效果:

 

 

 

分析

 第一个被发现的错误为:错误的数据流。

CFF Explorer察看结果:

 MetaData Header NumberOfStreams 6 ,应为5;

 MetaData Streams 增加了一个名为{smartassembly}的流并排在第一位,其它流是正确的。

 元数据变化情况为:

   增加了部分类型、引用、属性、方法。(包括正确和错误的两种)

 

 

 

 

上述存在的错误都会导致Reflector出错。

 

修正步骤如下:

 

1)修正错误流

 

我们的目的是为了把正确的数据搬移上来,然后把流的数量改回5,也即去掉最后的一个。

 a)    CFF Explorer中对MetaData Streams进行察看:

 

 

b) 使用UltraEdit32二进制编辑,把下面五项搬到上面来,第六项则不用理会

   b1) UltraEdit32打开文件,搜索#Strings串儿,大至定位

  b2)在其上面一行处,刚好是要改的数据,如下:

 

 

也即:offset 00000084 size 00000020 和名称:{smartassembly}

 

现在我们一小块一小块地把它们覆盖上来,不能增不能减,不能错位。从A4 00 00 00 14 06 00 00 等等的A4开始覆盖在84 00 00 00 84开始处,结果如下:

 

 

现在用CFF Explorer看看,已搬上来了,对比原来的数据,前五个都是正确的了:

 

b3)CFF ExplorerMetaData Header NumberOfStreams改为5,保存。重新打开看看,已修好了:

 

 

现在可以用Reflector打开了,但还存在错误元数据的问题,继续。

 

2)修正错误元数据

   a)方法一:ILdasm反编译,再用ilasm编译回来。(ilasm帮助修复)

   b)方法二:用Reflector的插件Reflexil保存一下,再打开。

   c)方法三:写几行码调用Mono.Cecil.dll保存一下。(原理同方法二,请Mono帮助修复)

 

 结果验证

 

Reflector打开及查看:

 

 

运行情况

 

运行情况

 

 

{samartassembly}4.1.39分析(加解密二)

posted on 2010-05-15 20:06  northstarlight  阅读(1564)  评论(0编辑  收藏  举报

导航