吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3945|回复: 7
收起左侧

[.NET逆向] 利用Mono.Cecil的Bug来Anti .NET Decompiler by Wwh / NCK

[复制链接]
wwh1004 发表于 2018-8-6 15:43
本帖最后由 wwh1004 于 2018-8-6 17:19 编辑

原理与实践篇: https://www.52pojie.cn/thread-778602-1-1.html

据我分析,.NET内部加载未压缩的元数据表流的流程应该是这样:
1.png
代码我自己写的,意思是:
遍历所有流头,记录下第一次出现的CLR需要的表流和堆。



为什么这么说呢,我们用dnSpy看看这个UnpackMe(文件名是UnpackMe,程序集名称是CrackMe,emmmm)
https://forum.tuts4you.com/topic/38164-ben-mhenni-protector-v50-moded/
没tuts4you账号的点下方
链接: https://pan.baidu.com/s/1yQWAJsAXay_Bo6IbndCHhg 密码: 2bd5这个UnpackMe启动极慢,最少要十几秒,混淆极端严重(主要是无效元数据导致的)
第一步先用各种Dump工具把.NET程序集Dump出来,不懂的可以看我以前发的教程 https://www.52pojie.cn/thread-762832-1-1.html
dnSpy将无效元数据流标记红色,有效为橙色
2.png
WTF?为什么dnSpy认为第二次出现的#US #Strings是有效的呢?
仔细查看第一次出现的#US,#Strings,其实可以发现这个不是真正的#US,#Strings
3.png
#Strings堆也是一样的,名字都是多了一个空格,即"#Strings ",从这里可以看出CLR是识别空格的
接下来我们看看真正的#Strings,和真#Strings之后的那些#Strings
4.png
5.png
6.png
可以看到,被识别到的真#Strings和之后的混淆选项的名字一样,都是"#Strings"
这样可以运行吗?答案是可以的,可以自行测试。

我们再来看看dnlib的代码是怎么写的
7.png
可以看到和我们分析的是一致的。
BUT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Mono.Cecil是这么写的,Mono.Cecil并不能识别未压缩的元数据
8.png
这是什么意思呢?
选择出最后一个CLR所需的表流和堆来使用
那就会出现什么问题呢?
如果用ILSpy .NET Reflector JustDecompiler等使用Mono.Cecil作为元数据解析类库的反编译器完全无法获得正确表流和堆
比如这样:
9.png
10.png
当然,0xd4d大神的使用dnlib的dnSpy和JB的dotPeek完全不受影响,因为这些工具正确识别了CLR认为有效的表流和堆

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
凉游浅笔深画眉 + 3 + 1 ♥

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

凉游浅笔深画眉 发表于 2018-8-6 16:21
估计这种帖子有兴趣的人不多,看懂的人今后可能都会加上这个anti吧!
cyhcuichao 发表于 2018-8-6 17:38
sajuuk1129 发表于 2018-8-6 18:17
头像被屏蔽
sstm 发表于 2018-8-7 10:03
提示: 作者被禁止或删除 内容自动屏蔽
昊昊哥 发表于 2018-8-7 10:38
小白看得头晕
czyjcx 发表于 2018-8-7 16:29
收藏学习
MR.Jee 发表于 2018-8-7 17:55
谢谢@Thanks!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-30 18:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表