171215 逆向-.Net的保护和对抗(1)

1625-5 王子昂 总结《2017年12月15日》 【连续第441天总结】
A. .Net的保护和对抗(1)
B.

强名称


这是一种框架提供的验证机制,主要功能是标识版本和原作者
在编译生成可执行文件后可以通过密钥对程序签署强名称,签署后如果直接修改源程序则会报校验错误

对抗方法:

  • 直接移除
    • CLR头的flag位
    • CLR头的StrongNameSignature偏移
    • Assembly表中的flags项
    • Assembly表中的PublicKey项
  • 重新签署强名称
  • 给系统打补丁

名称混淆


从最早的DotFuscator免费版,到更多强大的混淆软件都是用来混淆名称的

最简单的名称混淆原理是改变PE文件中#Strings流的数据,使得类、方法、属性等名称被替换
但是有一个很关键的问题,对应Dll及其中的方法名称也需要被改变
这就引入了一个破绽:系统Dll的方法名是无法被改变的,因此调用的库函数无法被混淆

流程混淆


  • 方法级的流程混淆
    一般为建立新类和方法,包装系统库函数或是其他的内部函数来隐藏

  • IL代码级别的流程混淆
    将原方法的IL代码次序打乱,比较类似asm汇编的花指令。但由于本身特点,所以效果相对而言要次很多。不过能干扰Reflector一类的反汇编器直接得到高级语言代码

压缩壳


基于.Net平台编写

原理为将源程序压缩,运行的时候动态解压到内存中进行运行

不过为了防止dump,有的壳会做一些手脚,例如分方法解密,执行完后清除等等

基于Win32平台编写

与传统壳相同,加密以外壳程序来调用。特点为外壳程序为Win32

对抗方法还是多种多样的Dump,对于动态地、部分地解密需要进行多次Dump

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值