首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-04-25 11:01
  • 4493
  • 5434
blog.csdn.net

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:http://iyenn.com/rec/1824593.html
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 就不会乱码了。

  • 下载、文档:https://apktool.org/docs/the-basics/intro
  • github 地址:https://github.com/iBotPeaches/Apktool/releases

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 和 b 是等效。

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

  • 工作区:https://www.pnfsoftware.com/jeb/manual/workspace/
  • Action:https://www.pnfsoftware.com/jeb/manual/actions/
  • 视图:https://www.pnfsoftware.com/jeb/manual/views/
  • 反编译:https://www.pnfsoftware.com/jeb/manual/decompiling/
  • 调试:https://www.pnfsoftware.com/jeb/manual/debugging/
  • 安卓分析:https://www.pnfsoftware.com/jeb/manual/android/
  • 安卓调试:https://www.pnfsoftware.com/jeb/manual/android-debugging/
  • Native 代码 分析:https://www.pnfsoftware.com/jeb/manual/native/
  • WebAssembly 分析:https://www.pnfsoftware.com/jeb/manual/webassembly/
  • ethereum 分析:https://www.pnfsoftware.com/jeb/manual/ethereum/
  • 其他杂项:https://www.pnfsoftware.com/jeb/manual/misc

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

动态调试 smali:http://iyenn.com/rec/1824594.html

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壳检测引擎等等

免费版、专业版 区别

注:本文转载自blog.csdn.net的擒贼先擒王的文章"https://blog.csdn.net/freeking101/article/details/105183001"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top