首页
社区
课程
招聘
[原创]{smartassembly}不完全分析
发表于: 2007-8-17 23:43 24850

[原创]{smartassembly}不完全分析

2007-8-17 23:43
24850

由于工作的原因,很长时间没有写文章了。和kanxue聊下天,觉得坛里关注.net的人不少,但讨论.net的人不多,因此决定还是抽空写一点东西。质量如何倒是第二位的了,关键是能拉动一些讨论的热情。.net加解密这方面,玩儿这个的感觉发展是突飞猛进,上半年刚学的知识,下半年就有点过时了,这种情况下,.net的加解密似乎成了一个小圈子里几个人的爱好。.net保护这两年发展迅猛,个人感觉今年尤其快速。基本现在分四大类了:混淆、加密(壳)、授权、VM。这四方面都是有机的结合,使得保护的强度更上一层楼。有机会,大家应该都了解一下,其中也有很有技术含量的东西,并非早几年那样,拿到个程序,reflector反编译看下,修改了再ilasm就完事儿了。
    废话说到这,今天分析是{smartassembly} v2.2,说不完全分析是因为当逆向了80%的时候,发现0day出破解了。于是没有继续搞下去,只能把所做的工作拿出来献丑,希望引起大家的兴趣,共同研究.net软件安全。
    {smartassembly}是一款.net混淆软件,采用了基本上目前所有主流的混淆技术,其实也就两种:名称、流程。但混淆保护中辅助手段是不可少的:打包、强名称校验、错误元数据等。软件名字起的不错,所以安装后在Program Files目录下总是排在第一。
    拿到软件先运行一下,提示还有几天试用到期,到期后则无法进入。



    习惯性的,用Reflector载入,来到入口点,直接显示// This item is obfuscated and can not be translated。切换成IL,看一下流程混淆的形式,开始的几句代码如下:

    L_0000: call bool  .:: ()
    L_0005: brtrue.s L_000c
    L_0007: leave L_0799
    L_000c: br L_0698
    L_0011: br L_06a2
    L_0016: br L_06ac
    L_001b: brtrue.s L_0022
    L_001d: leave L_0799
    L_0022: br L_06b6
    L_0027: ldlen 
IL_0015:  ldsfld     class [mscorlib]System.IO.Stream ' '.' '::' '
IL_001a:  brtrue   IL_0067

IL_001c:  call       class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::GetExecutingAssembly()
IL_0021:  stloc.1
IL_0022:  ldloc.1
IL_0023:  ldstr      "{e75060b3-2d5b-48f0-8182-1dfcf56cfa33}"
IL_0028:  callvirt   instance class [mscorlib]System.IO.Stream [mscorlib]System.Reflection.Assembly::GetManifestResourceStream(string)
IL_002d:  stsfld     class [mscorlib]System.IO.Stream ' '.' '::' '
IL_0032:  ldloc.1
IL_0033:  callvirt   instance class [mscorlib]System.Reflection.AssemblyName [mscorlib]System.Reflection.Assembly::GetName()
IL_0038:  callvirt   instance uint8[] [mscorlib]System.Reflection.AssemblyName::GetPublicKeyToken()
L_0096: ldc.i4 0x3076
L_009b: call string  . :: (int32)
L_00a0: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (6)
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
沙发沙发沙发
2007-8-18 00:40
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
3
每句话都要学习
2007-8-18 01:20
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
4
强贴留名。
2007-8-18 02:25
0
雪    币: 50121
活跃值: (20750)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
估计很多人的思维还停留在这一阶段
2007-8-18 09:18
0
雪    币: 1946
活跃值: (268)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
6
NET刚处于技术发展阶段,很多技术说不定的,所以不多研究。
2007-8-18 09:41
0
雪    币: 5275
活跃值: (476)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
7
是啊,不过研究还处于发展期的事物有利有弊。特别对于加解密来说,我经常问inraining,为什么它拿到一个软件很快就“完工”了,他说的一句话很有道理:分析一个软件最好的方法就是了解它的历史。

所以现在学的不可能将来都有用处,但肯定不会一点用处没有。
2007-8-18 09:58
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码