{samartassembly}4.1.39分析(加解密一)
2009-11-21 作者:rzh 网名:看雪_grassdrago
目标:样例程序AppCllDll.exe (引用MyDll、TestDll),见样例程序
环境:.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 Explorer把MetaData Header 的NumberOfStreams改为5,保存。重新打开看看,已修好了:
现在可以用Reflector打开了,但还存在错误元数据的问题,继续。
2)修正错误元数据
a)方法一:ILdasm反编译,再用ilasm编译回来。(ilasm帮助修复)
b)方法二:用Reflector的插件Reflexil保存一下,再打开。
c)方法三:写几行码调用Mono.Cecil.dll保存一下。(原理同方法二,请Mono帮助修复)
结果验证:
Reflector打开及查看:
运行情况:
运行情况:
posted on 2010-05-15 20:06 northstarlight 阅读(1569) 评论(0) 编辑 收藏 举报