安卓逆向_2 --- Androidkiller、apktool、jadx、jeb、gda

1、逆向工程


逆向工程 (Reverse engineering) 也称 "反向工程、还原工程"。在计算机软件中是指通过对他人软件 (比如:exe、apk 等编译后程序) 进行逆向分析研究,以推导出软件的 "设计思路、原理、结构、算法、处理过程、运行方法" 等,某些情况下还可以推导出软件的源代码。

高级语言源程序经过编译变成可执行文件,反编译就是逆过程。

2、反编译 工具

  1. 入门级:Apktool、dextojar 都是基于命令行
        Apktool:对 Android apk 文件进行逆向工程的工具
        dex2jar:将dex文件变成一个(包含class文件的)jar 文件。
        jd-gui 用于显示 CLASS 文件中的 Java 源代码。
        jd-gui 下载:https://github.com/java-decompiler/jd-gui
  2. 初级:
        Androidkiller 是基于 apktool 的图形化反编译工具
        jadx 是另外一个 图形化的反编译工具
  3. 高级 :jeb 是收费工具且功能强大,可以动态调试 smali 代码。

更多 反编译工具

https://github.com/search?q=jadx
https://github.com/search?q=decompile

可以 github 直接搜索 相关 关键字

关于 反编译 注意事项:

  • 1、反编译的目的是分析代码,不是运行代码。
  • 2、一般反编译后的代码是无法直接编译通过。
  • 3、有些 app 进行了安全加固,例如:加壳、混淆,导致无法反编译或者反编译后是乱码。

AndroidKiller

Android Killer 是经典的 Android 反编译工具。工具毕竟很老了,无论是界面还是功能上都很难得到保证,还是推荐 JEB Decompiler 等仍在维护的反编译工具。

github:https://github.com/CherylVolta/android-killer
直接下载解压:https://codeload.github.com/CherylVolta/android-killer/zip/refs/heads/main
使用方法请参考此文或自行搜索:https://blog.csdn.net/yiran1919/article/details/132760445
AndroidKiller 安装、设置及使用教程:https://www.52pojie.cn/thread-726176-1-1.html
动态调试 smali:https://blog.csdn.net/zhangjianming2018/article/details/124512370
AndroidKiller 修改应用名称:https://www.cnblogs.com/zeussbook/p/11014144.html
Android 反编译美柚:https://www.jianshu.com/p/19b62aace407

smali 插桩 插件: :https://www.jianshu.com/p/a7d9c28337e5

apktool

apktool 是谷歌提供的 apk 编译工具,可以 反编译回编译 (重新编译并打包,就是修改资源文件之后 rebuild 一个 apk)。APK 其实就是一个压缩包,可以把 .apk 修改为 .zip。通过这种方式来获取资源文件,但是 xml 会乱码。这时就需要使用 apktool 反编译 apk ,查看 xml 就不会乱码了。

Dex、Smali、Class、Java、Jar 之间的相互转换

工具作用
javacjava ------> class
ddxclass ------> dex
baksmalidex ------> smali
smalismali ------> dex
dex2jardex ------> jar ( class的压缩包 )
apktoolapk ------> smali

官网文档:https://apktool.org/docs/install

windows 下安装

包装脚本不是必需的,但它很有帮助,可以让你不必重复输入 java -jar apktool.jar

  1. 下载 Windows 包装器脚本。(右键单击,将链接另存为apktool.bat)
  2. 下载最新版本的 Apktool。
  3. 将下载的 jar 重命名为 .apktool.jar
  4. 将 和 移动到 Windows 目录。(通常apktool.jarapktool.batC://Windows)
  5. 如果您无权访问 ,则可以将这两个文件放在任何位置,并将该目录添加到环境变量系统 PATH 变量中。C://Windows
  6. 尝试通过命令提示符运行。apktool

Linux 下安装

  1. 下载 Linux 包装脚本。(右键单击,将链接另存为apktool)
  2. 下载最新版本的 Apktool。
  3. 将下载的 jar 重命名为 .apktool.jar
  4. 将 和 移动到 。(需要 root)apktool.jarapktool/usr/local/bin
  5. 确保这两个文件都是可执行的。(chmod +x)
  6. 尝试通过 CLI 运行。apktool

macOS 下安装

  1. 下载 Mac 包装器脚本。(右键单击,将链接另存为apktool)
  2. 下载最新版本的 Apktool。
  3. 将下载的 jar 重命名为 .apktool.jar
  4. 将 和 移动到 。(需要 root)apktool.jarapktool/usr/local/bin
  5. 确保这两个文件都是可执行的。(chmod +x)
  6. 尝试通过 CLI 运行。apktool

反编译 apk ( d 参数 )

反编译命令:apktool d com.xxx.apk

decode 和 d  是等效。

apktool d bar.apk -o baz
apktool decode bar.apk -o baz

执行过程中会输出主要步骤 log,反编译结束后,反编译的内容均在目录下的 相应文件夹下 -- 文件夹名字与 apk 同名。

可以使用 -o 来指定反编译的输出目录,如上命令为 反编译 bar.apk 到 baz 目录,也可以使用绝对路径,输出到任意目录。

反编译 apk 成 dex 文件:java -jar apktool_2.3.4.jar -s d crackme02.apk

重新打包成apk ( b 参数 )

修改后需要重新打包成 apk 的命令:apktool b 项目目录

项目目录 就是上一步反编译后生成的目录。build 和 是等效。

apktool b bar -o new_bar.apk
apktool build bar -o new_bar.apk

可以使用 -o 来指定重新打包的输出目录,如上命令为 重新编译bar目录下的结构到 new_bar.apk,也可以使用绝对路径,输出到任意目录。

重新打包工程中,同样会输出主要步骤的 log。重新生成的 apk 位于目录中的 dist 目录下

注意:重新生成的 apk,是没有经过签名的,不能直接进行安装。需要重新签名

打包完成后会发现指定的目录下出现了打包好的 apk 文件。但是这个apk没有签名,需要重新签名之后,才能安装。

签名

首先需要生成 keystore 文件

命令:keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore

keytool 是 jdk 自带工具,在Java/bin 目录下

进行签名,命令:jarsigner -verbose -keystore abc.keystore -signedjar nopassword_signed.apk nopassword.apk abc.keystore

执行之后在当前目录下生成一个 xxx_signed.apk,代表apk已经签名了,可以安装了。

framework

每一个版本的 apktool 都自带有最新 AOSP 的 framework,能支持绝大多数的 apk 反编译。

framework 文档:https://apktool.org/docs/in-depth/frameworks

jadx (推荐)

gitHub 下载:https://github.com/skylot/jadx
Android 反编译利器,jadx 的高级技巧:https://www.jianshu.com/p/e5b021df2170

使用 jadx 直接打开 apk 文件,就可以查看 反编译的源码​。

jeb (推荐)

官网:https://www.pnfsoftware.com/
中文网站:https://www.jebdecompiler.com/
jeb_pro 下载:https://down.52pojie.cn/Tools/Android_Tools/
jeb_pro 下载:https://crifan.github.io/android_re_tool_jeb/website/download_run/
oracle java下载:https://www.oracle.com/cn/java/technologies/downloads/
注意:需要  Java17+  以上环境,否则启动 jeb_demo 报错

JEB Decompiler是一款功能强大的反编译工具,主要用于代码分析和逆向工程。它能够将Android应用程序的Dalvik字节码反编译为可读的Java源代码,同时支持对ARM平台编写的程序和恶意软件进行逆向工程。相比 jadx,JEB 除了支持apk文件的反编译和Android App的动态调试,还支持 ARM、MIPS、AVR、Intel-x86、WebAssembly、Ethereum(以太坊)等程序的反编译、反汇编,动态调试等。另外,JEB能解析和处理一些PDF文件,是一个极其强大的综合性逆向和审计工具

jeb 版本概述

  • 收费版本:JEB Pro (可以动态调试 smali 代码)。JEB Pro 附带了以下反编译器:
        Dalvik(Android Dex 文件)
        Intel x86:x86_32、x86_64、x87 (fpu)、MMX、SSE、其他 ISA 扩展(对 sse2+ 和 avx 的支持有限/WIP)
        ARM:32 位、Thumb(16 位)、aarch64(64 位)、大多数 ISA 扩展
        MIPS(32 位、64 位)
        RISC-V(RV32、RV64)
        Simatic S7 PLC (MC7),适用于 S7-300/S7-400 程序(手册)
        WebAssembly 模块 (wasm)
        以太坊合约(EVM代码)
        Java(类文件)
  • 免费版本:社区版、演示版
    社区版 (JEB Community Edition) = JEB Home Edition x86,不支持Android(的arm),仅支持(32位和64位的)x86。
    演示版 (JEB Demo) 包含 JEB Pro 的大部分功能,附带完整版中提供的所有模块,但是使用时功能有很多限制,主要用于试用(功能演示)。

不同版本功能对比

目前,JEB 依赖于两个独立的反编译器管道:

  • DEXDEC( dexdec ) 是 Dex/Dalvik(以及 Java)反编译器。此反编译器专门用于 Dalvik 输入。参考实现的主要接口是IDexDecompilerUnit。
    GENDEC( gendec ) 是通用反编译管道,可以处理所有类型的代码、本机代码、托管代码或其他代码。GENDEC 比 DEXDEC 更模块化、更开放。所有本机(x86、arm 等)以及非本机(以太坊、WebAssembly)反编译器插件都是基于 GENDEC 构建的。参考实现的主要接口是INativeDecompilerUnit。

如何反编译

  • 按T​​ab键反编译代码:汇编视图中,在想要反编译的代码区域按T​​ab键反编译代码。反编译的代码单元将获得焦点,并且插入符号将定位在与低级字节码或机器码最接近的代码区域上。
  • 使用选项进行反编译:右键菜单中还提供使用选项进行反编译的功能。

jeb 使用教程

调试逆向分为 动态分析技术 和 静态分析技术

  • 静态分析技术:是指逆向者利用反汇编工具将二进制的可执行文件翻译成汇编代码,通过对代码的分析来逆向软件;    
  • 动态调试:则是指逆向者利用调试器跟踪软件的运行,寻求逆向的途径。
        动态调试有两种方法:
                方法 1:Jeb 调试
                方法 2:AndroidStudio + smalidea 插件动态调试。

菜单栏 ---> 编辑 ---> 语言 ---> 可以设置简体中文

中文教程:https://www.jebdecompiler.com/support.html

jeb 使用教程:https://crifan.github.io/android_re_tool_jeb/website/function_ui/

动态调试 smali:https://blog.csdn.net/freeking101/article/details/105910877

jeb 动态调试 smali:https://www.52hb.com/thread-49414-1-1.html

动态调试 其实操作很简单,首先确保 App 已经安装在了手机上,并且能在电脑上通过 adb 命令与手机连接。然后运行adb命令。
示例命令:adb shell am start -D -n com.goldze.mvvmhabit/.ui.MainActivity
这条命令的功能就是让 APP 以调试模式启动
-D 指定 APP 以调试模式启动
-n 指定启动入口,这里设置示例APP 包名和MainActivity
运行命令后,手机上会显示如下界面

这时回到 JEB 的界面,点击 工具栏 里的 Debug 按钮,之后会检测出正在运行的 Android 设备,点击下方的 Attach 按钮,Debugger 就成功挂载了手机上的 App 进程。

与此同时,手机上的 "Waiting for Debugger" 提示也消失了,示例 App 正常运行并加载出了第一页数据,这证明挂载成功了。

在 JEB 中可以选中想要调试的 Smali 代码,然后点击菜单栏中的 “Debugger” -> “Toggle Breakpoint” 来添加断点

gda (不依赖 java)

gda:https://github.com/charles2gan/GDA-android-reversing-Tool
官网:http://www.gda.wiki:9090/index.php

激活Pro版所有功能 :https://www.52pojie.cn/thread-1938478-1-1.html
蓝奏:https://www.lanzouw.com/b00mojrkva  密码:baap    解压密码:CXVUSER
拖拽操作,秒杀 Jadx,媲美 JEB,内置中文版,菜单栏 ---> Config ---> Set Chinese

轻松上手:https://zhuanlan.zhihu.com/p/28354064
GDA使用手册:https://bbs.kanxue.com/thread-266700-1.htm

GDA 不只是一款反编译器,同时也是一款轻便且功能强大的综合性逆向分析利器,不依赖 java 环境。支持 apk, dex, odex, oat, jar, class, aar文件的反编译,支持python及java脚本自动化分析。其包含多个由作者独立研究的高速分析引擎:反编译引擎、漏洞检测引擎、 恶意行为检测引擎、污点传播分析引擎、反混淆引擎、apk壳检测引擎等等

免费版、专业版 区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值