前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

如何防止 DLL 被反编译_技术,永无止境!-----BY_百度空间 相册 广场游戏 登录注册 关注此空间 技术,永无止境!-----BY永无止境! 2008-09-29 22:56 如何防止 DLL 被反编译 如何防止 DLL 被反编译为防止这类反向工程的威胁,最有效的办法是模糊。(据《美国传统辞典》,“模糊”的意思是“使混乱,使糊涂迷惑,使过于混乱或模糊,使得难于感觉或理解”)。模糊工具运用各种手段达到这一目标,但主要的途径是让变量名字不再具有指示其作用的能力、加密字符串和文字、插入各种欺骗指令使反编译得到的代码不可再编译。 一、修改变量名称请看下面一个例子。对未经模糊处理的代码执行反向工程:Private Sub CalcPayroll(ByVal employeeGroup As SpecialList) While employeeGroup.HasMore employee = employeeGroup.GetNext(True) employee.updateSalary DistributeCheck(employee) End While End Sub同样的代码,经过模糊处理再执行反向工程:Private Sub a(ByVal b As a) While b.a a = b.a(True) a.a a(a) End While End Sub 显然,两段代码的处理逻辑相同。但是,要说清楚第二段代码到底在做些什么极其困难,甚至要判断它正在访问哪些方法、哪些变量也很困难。 这种改变变量名称的功能是可配置的,例如,假设你正在构造一个DLL,可以要求不改动API。有趣的是,这一处理过程显然只是简单地把大量变量的名称简缩成单个字符,但获得了非常好的模糊效果。二、加密字符串   字符串加密对付另一个安全问题,其实这一安全问题在本机代码中也同样存在——从二进制代码提取字符和文字是一件很简单的事情。例如,用UNIX的strings工具处理任何二进制文件,可以迅速得到该二进制文件包含的ASCII文本清单。   在最简单的情形下,这个清单只会泄露版权信息和二进制执行文件引用了哪些库。但是,如果程序要访问数据库,这个清单将包含所有的SQL命令;如果代码模块中嵌入了密码,密码也将不密。   对于中间代码,未加密的字符串还会带来一层额外的风险。黑客们通过分析对特定字符串的引用,可以判断出从哪里开始代码受到密码保护,然后加上补丁使代码绕过密码验证部分。   为了解决字符串明文带来的安全问题,大多数模糊器运用了加密字符串的技术。由于解密操作需要一定的开销,所以运行时访问字符串的性能肯定会有所降低。有趣的是,在这方面本机代码反而不占便宜,因为如果要达到同样的效果,对于本机代码开发者必须手工加密和解密每个字符串,而对于中间代码这些工作却可以由模糊器代劳。 三、隐藏执行流程   控制流程模糊是一种用来误导反编译器的技术,它在原始的代码中插入许多goto指令,虽然程序最终执行的指令序列仍跟原来的一样,但太多的“迂回动作”使得分析程序实际的逻辑流程非常困难。下面来看一个例子。   对没有经过控制流程模糊处理的中间代码实施反向工程: Public Function CompareTo(ByVal o As Object) As Integer Dim n As Integer = occurrences - CType(o, WordOccurrence).occurrences If n = 0 Then n = String.Compare(word, CType(o, WordOccurrence).word) End If Return (n) End Function同样的代码,经过控制流程模糊处理后再执行反向工程: Public Overridable Function a(ByVal A_0 As Object) As Integer Dim local0 As Integer Dim local1 As Integer local0 = Me.a - CType(A_0.a, c) If Not (local0 = 0) Then Goto i0 End If Goto i1 While True Return local1 i0: local1 = local0 End While i1: local0 = System.String.Compare(Me.b, CType(A_0.b, c)) Goto i0 End Function  可以看到,经过控制流程模糊处理后,代码被插入了一个伪条件检测语句,接着又执行了一个goto指令。在goto的目的地,原来的语句(以经过模糊处理后的形式)被执行,接着又是一个goto语句将控制转到原先的逻辑流程分支。注意while()循环未被执行,它只是起到一种误导的作用。这个代码片断很小,即使没有原始的代码可供比较和参考,识别出程序实际流程的可能性仍存在。然而,对于一个规模较大的过程,如果没有源代码可供参考,那些专门用来搅浑程序正常执行流程的指令将使分析代码的人疲于奔命,最终不得不放弃。   也就是说,这种模糊处理的根本思想是让恢复原始代码变得极其困难,迫使黑客改变主意,也许是换做轻松一点的,例如“自己写代码算了”。   对控制流程进行模糊处理要在二进制文件中插入一些代码,因而增加了一些运行时间开销。如果代码对运行时间的要求非常苛刻,可以只给那些特别重要的部分加上这一层额外的保护。 一些模糊器的相关链接:  LSW DotNet IL Obfuscator   Demeanor for .NET   Salamander .NET Obfuscator   dotfuscator   Aspose.Obfuscator   .NET IL-Obfuscator   Deploy .NET   Salamander .NET Protector   Thinstall   XenoCode #asp_php_sql资料 分享到: 举报 浏览(1120) 评论 转载 你可能也喜欢 万草丛中一正太 让我爱你多一次(1) __ 小可耐帆帆 心蓝2014发布的图片 纸飞机发布的图片 插画:萌萌的~ 【驴坚强:土耳其5只驴被雪覆盖长“冰柱” 依偎取暖】 最新最有效的店铺推广工具 本文最近访客 xvcxcbvcb longwu90604017 tiancaixgd pzwf cens2007 tianyi_yj 水木客栈 1989晨风 评论 帮助中心 | 空间客服 | 投诉中心 | 空间协议©2014 Baidu