{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分析(加解密二)

转载于:https://www.cnblogs.com/northstarlight/archive/2010/05/15/1736382.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值