01.app逆向、反编译、hook原理

1. app逆向原理

安卓正向开发流程:
安卓工程师---》使用java语法(kotiln)+安卓框架(SDK)---》java+c【JNI】-->AndroidStadio---》编译成 xx.apk--->资源文件(图片,声音)/xx.dex/xx.so

安卓逆向
安卓逆向工程师---》拿到破解的app的xx.apk -->反编译(java代码反编译出来)---》搜索关键字读java代码逻辑---》Hook工具----》Python 模拟发送请求,破解加密---》获取到我们想要的数据

为什么现在apk越来越大

  • 使用第三方组件
  • 视频,声音,图片文件(占大头)
  • java代码编译后
  • so代码编译后

2. 什么是反编译

反编译是指将已编译的安卓应用程序(APK文件)转换回其源代码的过程。
通常,安卓应用程序在开发过程中会经过编译,将源代码转换为可执行的二进制代码,这使得源代码不可见和难以理解。反编译的过程旨在还原应用程序的源代码,以便进行分析、理解和修改。

通过安卓反编译,你可以获取应用程序的源代码,了解其实现逻辑、算法、资源文件和其他关键信息。这对于安卓应用程序的安全评估、漏洞分析、逆向工程、定制化和学习都有重要意义。

常见的反编译工具有哪些?
apktool:apktool是一款常用的开源工具,用于反编译和重新打包APK文件。它可以将APK文件解压为资源文件和Smali代码,并提供了对Smali代码进行分析和编辑的功能。

JADX:JADX是一款功能强大的开源工具,用于将APK文件转换为可读的Java源代码。它能够还原大部分Java代码,并提供源代码分析和导航功能。(咱们学习用)

JD-GUI:JD-GUI是一款免费的Java反编译工具,可以将已编译的Java类文件转换为可读的Java源代码。尽管它主要用于Java反编译,但对于某些Smali代码的反编译也有一定的支持

3. 什么是hook

HOOK指的是通过修改或替换目标应用程序的函数或方法来改变其行为的技术。

  • 比如app有个登录功能(函数)---》通过hook--》动态修改,替换登录的代码--》实现我们自己的操作
  • 打印出传入的参数,打印出加密后的字符串

这种技术允许开发者或黑客在不修改应用程序源代码的情况下,对其进行定制、调试、修改或篡改。

动态链接库(DLL)注入:通过加载一个自定义的动态链接库来替换目标应用程序的某些函数或方法。这种方式通常需要在ROOT权限下进行,并且需要一些额外的工具和技术,如Xposed Framework或Frida。

Xposed框架:Xposed是一款强大的安卓框架,它提供了一种简单的方式来HOOK安卓应用程序。通过Xposed框架,开发者可以编写模块,用于修改或替换目标应用程序的函数或方法

Frida框架:Frida是一款功能强大的动态分析工具,它提供了在运行时修改和HOOK应用程序的能力。通过Frida,开发者可以使用JavaScript编写脚本,动态修改目标应用程序的行为