当前位置:首页 > Java知识 > 正文内容

代码混淆器是干什么的软件(代码混淆器简单实现)

abcsky887个月前 (10-26)Java知识86

本篇文章给大家谈谈

  “我想离开浪浪山。”  在数次尝试破解某个App 时,某个逆向工程师无奈感慨道。

代码混淆器是干什么的软件(代码混淆器简单实现)

  逆向工程师顾名思义就是把一个个完整的软件逆推,还原成一段段代码,方便破解  比如给他们一个手机App、电脑程序,用不了多久,他们就能逆推出程序的运行逻辑,找到其中的关键代码,篡改、破解、发现漏洞  这其中最好的例子就是盗版软件。

开发者们累死累活才写好的程序,分分钟就被人逆向破解,植入广告和木马,重新打包成盗版  但逆向工程师并非是反面形象,亦有好坏之分,正义的逆向者只是做安全研究,而那些非正义的逆向者却拿着这项技能四处干坏事牟利。

因此,二者的对立也尤为明显,一方为了防破解使出浑身解数,一方为了破解网络营销推广引流技术绞尽脑汁  今天,我们就来讲讲关于让非正义的逆向工程师们头疼的代码混淆代码混淆究竟是什么?  关于代码混淆,百度百科给出的解释是:代码混淆(Obfuscation)是将电脑程序的原始代码或机器代码,转换成功能上等价,但是难于被人阅读和理解的行为。

混淆后的代码,会将原先有明确含义的类名、字段、函数等转为无意义的单词,这样对于计算机来说,执行逻辑还是正常的,但是当人们去分析混淆后的代码时,会加大阅读和理解的难度,以此来加强代码的保护

什么意思呢?  我们可以简单理解为代码开发者是想给破解者(逆向工程师)制造一个假象,从而让他们从其他角度去尝试破解,但破解之后发现方向是错的,便又需要重新找角度破解,增网络营销推广引流技术加破解难度,也给开发者们充分时间来对抗破解。

  举个例子  你想去超市买水果,但又不想让人知道,于是你先去买了卫生纸回来,又去了健身房,然后又去超市买了可乐,最后才去超市买了水果  这样一来,别人对你的行动目的就不是明确的,需要多次猜测推理才能知道你的目的。

代码混淆的逻辑便是如此,代码开发者们为了隐藏目的,会在代码里加入各种多余的垃圾指令和代码,把原来的逻辑拆分成各种怪癖语法,从而达到防破解的目的如何做代码混淆?  讲到这里,你一定也好奇,代码混淆究竟是怎么做的?

对此,顶象移动安全总监Bob解释道:代码混淆主要有以下几方面工作:  1、代码中的包含各种元素,比如变量、函数、类的名字,这些名字有实际网络营销推广引流技术意义,直白的告诉破解者这个代码的功能用途.如果能改成无意义的名字,使得破解者阅读时无法根据名字猜测其功能用途;

  2、良好的代码有着直白的代码逻辑,破解者阅读时可以轻易的反推出功能用途.如果将它们变为功能上等价、但是更难理解的形式,比如将循环改为递归、精简中间变量等,破解者需要付出更高的代价才能明白其功能用途;

  3、对于一些解释型的代码,比如JavaScript,通常以源代码的形式发布,代码有良好的格式并且包含注释直接描述了代码的功能用途.如果能打乱代码的格式,删除源码注释,删除空格,将多行代码挤到一行代码等,破解者将难以从源码中获取有效信息;

对代码的阅读通常需要借助一些逆向工具,比如IDA,JAD网络营销推广引流技术X,JDGUI.如果能用某种方式让这些逆向工具失效,可以逼迫破解者使用效率地下的手工分析, 进而干扰反编译的工作  一般而言,代码混淆的常见手段分为以下几种:。

  1、名称混淆  将有意义的类,字段、方法名称更改为无意义的字符串生成的新名称越短,字节代码越小在名称混淆的字节代码中,包,类,字段和方法名称已重命名,并且难以恢复原始名称  2、代码缩减  删除代码中对运行无用的注释,空格,换行,回车,调试信息,行号等,可以减小代码体积同时降低代码中有效的信息量.。

3、控制流混淆  用于if, switch, while,for等关键字,对代码进行细微的修改,模糊控制流,而不改变代码在运行时的行为通常情网络营销推广引流技术况下,选择和循环等逻辑构造会被更改,因此它们不再具有直接等效的源代码。

流模糊的字节码通常强制反编译器将一系列标签和非法的go to语句插入到它们生成的源代码中  4、数据流混淆  对一些通用的计算,将其替换为等价的形式.比如a=b+c替换为a=b+1+c-1.  5、花指令

  在正常的指令序列中添加一些指令,对运行时无害,但是会触发逆向工具的Bug,造成逆向工具崩溃,无法反汇编,无法反编译,功能异常等.  此外,还有异常混淆、字符串加密混淆、引用混淆等  对于Java来说,常用的混淆工具如下:。

1、yGuard  yGuard是一款免费的Java混淆器(非开源),它有Java和.NET两个版本yG网络营销推广引流技术uard 完全免费,基于 Ant 任务运行,提供高可配置的混淆规则  2、proguard  proguard是一个免费的 Java类文件的压缩,优化,混肴器。

它删除没有用的类,字段,方法与属性使字节码最大程度地优化,使用简短且无意义的名字来重命名类、字段和方法  3、allatori  第二代Java混淆器所谓第二代混淆器,不仅仅能进行字段混淆,还能实现流混淆。

代码混淆不等于加密  那么,混淆等同于加密吗?  答案当然是否定的  加密顾名思义就是要在我们想要隐藏的东西上上锁,可以是一道锁,也可以是多道锁,而混淆则不同,在进行混淆处理时,信息将保持原样,只是以一种模糊的格式呈现出来,因为我们将网络营销推广引流技术其复杂性提高到不可能(或几乎不可能)被理解或解析的程度。

  相对于加密而言,则进一步证明了代码混淆在防破解方面的高明之处我们都知道,加密的东西必须解密才能使用,就像一把锁和一堆钥匙,总有一把钥匙可以成功打开锁,让你看到其中的逻辑,但代码混淆不同,虽然没有加密,但代码开发者们却让逆向工程师们一遍遍在破解的迷宫里来回转圈,干扰破解。

  这就会导致两种情况:一种是逆向工程师死磕到底,一种是放弃破解转而去破解更容易破解的App,从而达到保护App 的效果  当然,代码混淆并不能真正防止逆向工程,只能增加难度,对于安全性要求很高的场景,仅使用代码混淆并不能保证原始代码的安全。

并且,对于代码混淆而言被混淆的代码难网络营销推广引流技术于理解,因此调试以及除错也变得困难起来开发人员通常需要保留原始的未混淆的代码用于调试对于支持反射的语言,代码混淆有可能与反射发生冲突App加固非一时之功  正如前文所说,代码混淆并不能真正防止逆向工程,总有拨开云雾的一天,仅使用代码混淆并不能保证原始代码的安全,也不能完成保证App 加固不被破解,此时就需要多方出手,为App 的防破解环境加筑更多城墙。

比如字符串加密、控制流平坦化、指令替换、符号混淆、混淆多样化、不透明谓词、防动态调试、防动态注入、HOOK检测、代码段检验、完整性校验等等多种技术手段  对于App 加固而言,这从来都不是一件简单的事情,一方有难,八法支援才是保护App 不被破解网络营销推广引流技术的良方。

  (来源:新视线)责任编辑:孙青扬

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://4blc.com/post/200.html

分享给朋友:

“代码混淆器是干什么的软件(代码混淆器简单实现)” 的相关文章

198页(180页的书要多久看完)

今天给各位分享 这不马上就要“金三银四”了吗?近期有很多朋友在考虑跳槽,“面试造火箭,工作拧螺丝”这话说得十分吻合他们的现状!而说到准备面试,那是真不容易,趁着空挡我也收集了不少Java高级面试资源!而这180页100+题15W+字解析的《Java高级面试指南》更是深得我心,100...

java和net哪个好就业(软件工程和java一样吗)

本文分享给大家的是: 在回答问题前先来谈谈什么是java和.net吧 相信说清楚了不知道了!JAVAJava是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。 Java语言作...

java的内存模型和内存结构(javajvm内存模型)

本篇文章给大家谈谈 感谢大家的认可,我在github上维护的《Java工程师成神之路》目前正在更新中,欢迎关注https://github.com/hollischuang/toBeTopJavaer​github.com/hollischuang/toBeTopJavaer。...

java 中static(java中static作用)

本文分享给大家的是: 在Java中,static是一个关键字,用于表示一个变量或方法是静态的,即与类相关联而不是与类的实例相关联在Java中,每当创建一个类的新实例时,都会为该类的所有非静态变量和方法创建新的实例但是,静态变量和方法只会创建一次,并与该类本身相关联。 静态变...

java培训一般多少费用(java就业真实现状)

本文分享给大家的是: 初识java1、java是什么(1)java是一种计算机编程语言编程是把我们的要求和想法,按照能够让计算机看懂的规则和约定编写出来,编程的结果就是一些计算机能够看懂并能够执行和处理的东西,我们把它叫做软件或者程序,事实上,程序就是我们对计算机发出的命令集(指令...

计算机科学与技术要学java吗(计算机专业要学c++吗)

今天给各位分享   首先,从专业知识学习的角度来说,从C语言开始学起是更适合的选择,因为后续的数据结构、操作系统、编译原理等课程,往往都会以C语言为工具  C语言是典型的面向过程式编程语言,抽象程度没有Java高,所以初期的学习难度并不大,但是由于是第一门编程语言,所以很多同学也会...