Android逆向基础

作者: luoqiang108 | 来源:发表于2018-11-15 16:19 被阅读56次

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

混淆

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

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

image.png

加固(加壳)

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

脱壳

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

反射

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

Xposed

Dexposed

  • Dexposed是阿里巴巴新开源的一个非侵入式的AOP(面向切面编程)框架,与Xposed不同的是不需要root,仅可以hook自己的程序代码和应用程序中调用的 Android 框架中的函数(项目通过引包引入的Android框架函数,如import android.widget.Toast类中的函数),不可hook其它应用进程(包含系统应用进程如com.android.systemui.statusbar.policy.Clock系统时间进程)的一些方法。
  • Dexposed框架的AOP原理来自Xposed,不同的是,Xposed通过劫持 zygote(须root),而Dexposed通过劫持 java method,将java method改变为native,并且将这个方法的实现链接到一个通用的Native Dispatch方法上。(下图为原理,援引自Qcon大会手淘hotpatch技术介绍ppt),最大的用处自然是hot patch,用这种东西来热替换某个导致崩溃的方法。手淘还有做的一件事,就是用它作性能监控。


    Dexposed原理.jpg
  • 原理:Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
  • 仅支持在Dalvik(Android L(5.0)以前)虚拟机上无侵入地实现运行时方法拦截。然而,随着ART(Android 5.0后)取代Dalvik来运行Android时,Dexposed就不支持了,取而代之就出现了下面的epic来填补这个不足。

epic

VirtualApp

VirtualXposed

相关文章

  • Android逆向开发

    1、逆向开发基础 2、Android Hook 插件开发 3、Android 系统编译 4、Android arm...

  • Android逆向基础

    我们Android项目的apk如果没有做任何处理,没有混淆,也没有加固。通过反编译工具反编译出来后就能很清晰的看到...

  • 零基础入门Android逆向视频课程

    教程目录: 第一章:Android JAVA 逆向基础 课时1 :Android环境配置与常用工具介绍 课时2 :...

  • 逆向工程 实践篇

    Android逆向工程 实践篇
    上篇给大家介绍的是基础+小De...

  • Android笔记

    [toc] Android笔记 前言: 本笔记基于MacOS系统 学习意图: 为了做逆向打基础 笔记内容: and...

  • iOS逆向目录

    越狱最新进展 一.逆向基础 iOS逆向基础01-越狱iOS逆向基础02-编译&调试iOS逆向基础03-符号表iOS...

  • Android逆向基础——smali基础学习

    Android逆向之Java基础 说明 java系列主要是为了复习一下java基本语法,最主要的目的还是为了研究一...

  • 顶级黑客标配图书

    逆向工程基础 + Android + iOS + Web应用,安全类天团配置,给你最好的安全指导! 1、有趣的二进...

  • Android逆向基础:Smali语法

    Smali是什么 Smali是Android虚拟机的反汇编语言。我们都知道,Android代码一般是用java编写...

  • Xposed实时获取微信公众号推送

    友情提示:阅读本文需要稍微有一点点Xposed开发基础,一点点Android逆向的基础,以及一点点Kotlin基础...

网友评论

    本文标题:Android逆向基础

    本文链接:https://www.haomeiwen.com/subject/khydfqtx.html