Android 知识Android精选

Android逆向基础

2018-11-15  本文已影响56人  luoqiang108

我们Android项目的apk如果没有做任何处理,没有混淆,也没有加固。通过反编译工具反编译出来后就能很清晰的看到你的源代码,可以看到,包名,包结构,类名以及类文件都原封不动的显示出来了。这样的话对于我们的项目而言就没有任何安全性可言了,所以一般我们的项目在发布之前会进行混淆加固处理,那么混淆、加固是什么意思呢?

混淆

混淆就是将源代码中部分包名、类名、变量名,方法名替换成毫无意义的字母(混淆规则代码里定义要保留的类名和方法名,至于为什么要保留,如下图所示,除此之外的其它类名和方法名工具都会自动帮我们混淆),除此之外混淆还会隐藏掉部分类文件。这样一来反编译出来的代码阅读难度就大大增加了。AndroidStudio中已经集成了用于混淆的已经集成 ProGuard工具,我们只要编写好混淆规则代码后,打包后的release 包就已经是混淆过的包了。

ProGuard 是怎么做到混淆的?
1、压缩: 移除无效的类、属性、方法等
2、优化: 优化字节码,并删除未使用的结构
3、混淆: 将类名、属性名、方法名混淆为难以读懂的字母,比如a,b,c

image.png

加固(加壳)

将APK的外层加了一层壳,如果想反编译,必须突破这层壳的保护。加固后的APK,反编译出来,看到的只是外面那层壳的代码,这部分代码很少,而且跟源代码完全不一样,连原本的包名都没有了。加固涉及到的技术手段就很多了,同时也非常的深奥,例如dex 文件加密和字节码变形等。所以小公司如果没有特别的安全需求的话,一般都会选择第三方加固平台如360加固包来进行加固。

脱壳

就是上面加壳的一个逆向过程,脱壳之后就可以拿到加壳前的源代码了,这样就可以通过阅读源码在源码基础上做一些修改或其它操作,从而实现一些原有APP不能实现的功能。

反射

反射在逆向中算是很重要的基础了,得到类后很多变量、方法都是可以通过反射得到的,之前自己总结了一篇反射的博文,这里就不在啰嗦了,之前文章链接:Java反射

Xposed

Dexposed

epic

VirtualApp

VirtualXposed

上一篇 下一篇

猜你喜欢

热点阅读