APP项目开发完成之后,当测试人员测试了,没有(yǒu)Bug了,一般情况下,公(gōng)司会有(yǒu)一些技(jì )术人员负责发布、推广APP产(chǎn)品。这是一般正规的大公(gōng)司会有(yǒu)专门的市场推广部门,技(jì )术维护部门,对APP进行加密混淆打包,如:使用(yòng)Ant加密,还有(yǒu)使用(yòng)第三方的加密方式如爱 加 密等。想必APP产(chǎn)品為(wèi)什么需要加密混淆,做為(wèi)开发人员、老板都明白其中(zhōng)的隐含之处。然而,还有(yǒu)一种方式可(kě)以打包混淆APP,那就是 android 通过eclipse混淆代码 打包 + proguard 方式。
什么是代码混淆?
代码混淆是将程序的代码转换成一种功能(néng)上等价,但是难于阅读和理(lǐ)解的形式的行為(wèi)。比如将代码中(zhōng)的各种元素,如变量、函数、类的名(míng)字改写成无意义的名(míng)字,使破解者在阅读时无法根据名(míng)字猜测其用(yòng)途,增加反编译的阅读难度。
代码混淆的方式
為(wèi)避免出现盗版,提高应用(yòng)安(ān)全性,技(jì )术人员对一款APP进行了代码混淆。图1是进行代码混淆前后的代码结构对比。右侧截图是对源代码文(wén)件中(zhōng)的一些类名(míng)做了变换,改成了以英文(wén)字母命名(míng)的名(míng)称,这样破解者在阅读时就不容易理(lǐ)解其特指的含义。
代码混淆的利与弊
这种代码混淆方法简单、便于操作(zuò)。但也因此会给开发者的调试工(gōng)作(zuò)带来困难,开发人员通常需要保留原始的未混淆的代码用(yòng)于调试。由于混淆是不可(kě)逆的,在混淆的过程中(zhōng)一些不影响正常运行的信息将永久丢失,这些信息的丢失会使程序变得更加难以理(lǐ)解。
代码混淆破解
虽然做了代码混淆,但混淆只是对源代码的类名(míng)和一些变量名(míng)做了变换,增加了破解者阅读的难度,并不能(néng)真正阻止反编译。下面是对进行过混淆的《九天传说》APP进行破解并插入恶意广告的过程演示。首先,使用(yòng)apktool工(gōng)具(jù)进行反编译,可(kě)以得到smali代码文(wén)件,再定位找到主Activtiy的代码,主Activity可(kě)以从AndroidManifest文(wén)件中(zhōng)查到。九天传说的主Activity查到為(wèi)com.tp.ttgame.jiutian.JiuTian。
下图是处理(lǐ)com\tp\ttgame\jiutian\JiuTian.smali中(zhōng)的onCreate函数,向其中(zhōng)添加有(yǒu)米广告的初始化代码截图。
再将添加banner的函数插入其中(zhōng),并在onResume函数中(zhōng)调用(yòng)
这样代码部分(fēn)就修改完成了。最后再修改AndroidManifest文(wén)件,需要将有(yǒu)米广告必要的配置写进去。
最后,将有(yǒu)米广告SDK的内容转成smali,并将其跟九天程序的smali合并。用(yòng)apktool重新(xīn)打包之后生成的程序就是一款含有(yǒu)有(yǒu)米广告的盗版应用(yòng)了。图7是启动该盗版应用(yòng)后的界面,能(néng)看到右下角增加的有(yǒu)米广告内容。
同理(lǐ),破解者还可(kě)以将正版APP中(zhōng)的广告替换掉,这样,当用(yòng)户下载该盗版应用(yòng)并点击广告后,所带来的广告收入就直接进入了破解者的腰包。重要的是盗版应用(yòng)中(zhōng)的广告大多(duō)是恶意广告,会在用(yòng)户不知情的情况下下载程序,造成流量的消耗和资费的损失,影响用(yòng)户體(tǐ)验更损害正版APP的品牌形象。所以,单纯的通过代码混淆并不能(néng)完全保证应用(yòng)安(ān)全。
如何避免手机APP被破解和盗版?
目前越来越多(duō)的开发者选择使用(yòng)爱加密来保护应用(yòng)安(ān)全,这种方式到底是否可(kě)靠,下面再為(wèi)大家做下演示。下图是对《九天传说》APP进行加固保护前后的代码结构对比,能(néng)看到右侧截图中(zhōng)加固后的代码文(wén)件都已经被隐藏起来,只保留了加固后的保护程序,破解者在反编译时无法找到源程序真正的代码,即可(kě)有(yǒu)效的避免手机APP被破解和盗版。
除了可(kě)以对手机APP的代码进行保护外,加固后还具(jù)备反调试、反篡改、反窃取和反逆向等功能(néng),能(néng)有(yǒu)效防止代码注入,避免游戏外挂或木(mù)马程序的恶意篡改行為(wèi),从根源上防止应用(yòng)被二次打包,杜绝盗版应用(yòng)的产(chǎn)生。避免手机APP被破解和盗版除了可(kě)以使用(yòng)专业的第三方加固产(chǎn)品外,更需要开发者提高安(ān)全意识,如编写代码要规范,减少程序漏洞;及时修复漏洞,不给破解者可(kě)乘之机等。
爱加密(www.ijiami.cn)是國(guó)内顶尖的移动信息安(ān)全體(tǐ)系服務(wù)商(shāng),专注于為(wèi)移动领域的金融、游戏、企业级应用(yòng)及移动互联网开发者提供安(ān)全可(kě)靠的移动应用(yòng)保护解决方案,服務(wù)范围覆盖Andriod和iOS两大主流智能(néng)手机系统。