您的位置:首页 > 编程语言

代码混淆对APK加固所起的作用

2014-05-22 18:06 253 查看
在安卓应用愈发普及的今天,应用开发者也逐渐发现自己辛苦构思钻研出来的思路,灵光一现的创意,花费重金打造出来的素材,会被其他开发者轻易窃取,例如我们想看某证券公司实现服务端证书校验的代码逻辑。

 

1.篡改的步骤如下:

步骤一:反编译APK

 

使用dex2jar工具,反编译该apk逆向得到JAVA源代码。

执行dex2jar.bat xxx.apk

 



 

可以得到如下的文件:

 



 

步骤二:实际操作app应用,利用经验定位到代码

 

定位到所关心的代码逻辑段

 

使用jd-gui这个工具,可以很轻易的打开刚才生成的jar包文件,并可以清晰的看到apk的java源代码:

 



 

可以很清晰的看到里面的实现逻辑,跟原始的源代码无异。

利用经验,可以定位到校验服务端证书的代码段:

 



 

步骤三:查看并剽窃源代码

 

看懂源代码后,想要剽窃哪段源代码,都可以轻易的通过复制-粘贴就能把源代码拷贝下来,放进自己的工程中,实现目标app里面的相同逻辑。

 

2.代码混淆保护技术

为了保护自己的劳动成果,开发者也不愿坐以待毙,他们会采取一些技术手段来保障自己的利益,例如说采用代码混淆技术来抵御劳动果实剽窃者偷取自己的算法和实现思路。

在Android开发中,我们最先想到的代码混淆技术,自然是免费的方案,ProGuard。下面我们简单介绍一下如何采用ProGuard技术来抵御剽窃者,以及ProGuard技术有哪些局限性。

Android从2.3的SDK开始,将ProGuard混淆代码的功能加入了进来。

从google官方发布的开发工具ADT的eclipse中,我们可以看到工程中有一个project.properties的配置文件,如下:

 



 

要想启用ProGuard混淆保护,只需要将这个配置文件中的一行配置uncomment即可:

 



 

即启用 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt,非常简单易用,当然如果需要更深层的定制,需要修改混淆配置脚本,指定哪些类需要混淆,哪些类不用混淆。

 

混淆后,通过第一部分的反编译手段,看到的代码是:

 



 

已经不如第一部分中没有做任何保护的代码那么好读了,变量名与类名都变成了a, b之类的毫无意义的单词,不是那么好理解了。

然而,我们却也发现,混淆后,代码中的字符串还是原始明文存在的,如”scf_core”, “cib”, “main”等,可以极大方便分析人员看懂原有的意思,同时,这混淆后的代码还是具备原始逻辑的,只要我们拷贝过来,编译好,可以运行同等功能的应用。所以,这样的混淆保护功效是极其微弱的。像JEB等逆向分析工具,也可以对a,b之类的无意义的名称进行重命名,那样这个保护的作用就完全散失了。

要想对代码进行保护,我们还是需要更为专业,更深层次的方案。

 

3.APK加固保护方案

思路被剽窃,代码被偷走,这对开发者来说是损失惨重的,自己花力气辛辛苦苦研制出来的产品,被竞争对手一夜之间就抄袭走了。

使用梆梆安全加固可以避免这种损失。

 

安全加固的步骤:

 

步骤1:将APK提交到梆梆安全的网站

 

步骤2:下载加固后的未签名APP

 

步骤3:使用【梆梆签名】bangclesigner进行签名。

 

在梆梆安全加固网站提交APP:



加固完成下载后,使用dex2jar进行反编译后:

 



代码都被保护起来了,只保留了梆梆安全加固壳的入口函数(该入口函数是梆梆安全的入口函数,和原来的没有任何关系)。而原始app的代码逻辑都无法被看到,也更没办法被剽窃了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息