前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >26款优秀的Android逆向工程工具

26款优秀的Android逆向工程工具

作者头像
知识与交流
发布于 2023-03-25 02:02:22
发布于 2023-03-25 02:02:22
8.5K0
举报
文章被收录于专栏:黑客技术家园黑客技术家园
工欲善其事必先利其器,好的Android逆向工程工具在逆向破解工程中起到事半功倍的作用。

1. SMALI/BAKSMALI

SMALI/BAKSMALI是一个强大的apk文件编辑工具,用于Dalvik虚拟机(Google公司自己设计用于Android平台的虚拟机)来反编译和回编译classes.dex。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了.dex格式所有功能(注解,调试信息,线路信息等)。

2. ANDBUG

Andbug是一款针对Android平台的Dalvik虚拟机的调试工具,工具基于jdwp协议,使用了python封装,其灵活性和可定制性对逆向工程师和开发人员而言可谓是神器级别的安卓安全工具。它与Android的Eclipse插件调试使用相同的接口,其Java 调试线协议(JDWP)和Dalvik调试监视器(DDM)允许用户监视Dalvik虚拟机,检查进程状态。

不同于谷歌自己的Android软件开发工具包调试工具,AndBug不要求源代码。但是,它需要使用python封装,因为对于大多数重要的任务,它需要使用一个脚本断点(scripted breakpoints)的概念,称为“hooks”。

3. ANDROGUARD

androguard (也称Android guard) 是 Android 应用程序的逆向工程,提供恶意软件分析等功能。其特征为:

使用DAD作为反编译器; 可以分析恶意软件; 主要由Python 编写; 支持可视化;

androguard 支持:

DEX, ODEX; APK; Android的二进制XML; Android资源文件; 分解的DEX/ODEX 字节; DEX/ODEX 文件反编译程序;

4. APKTOOL

APKTool是GOOGLE提供的APK编译工具,能够反编译及回编译apk,同时安装反编译系统apk所需要的framework-res框架,清理上次反编译文件夹等功能。它可以完整解包APK,解包后你可以看到 APK 里面的声明文件、布局文件、图片资源文件、由 dex 解包出来的 smali 文件、语言文件等。如果你要汉化、修改界面、修改代码的话,apktool 可以帮你一站式完成。

特征:

反编译资源文件到原始格式(包括resources.arsc,classes.dex,9.png以及XML等); 将解码资源重建回二进制APK / JAR; 组织和处理依赖于框架资源的APK; Smali调试(2.1.0中移除,被IdeaSmali取代); 协助重复性任务;

5. AFE

AFE(Android Frameworkfor Exploitation)是一个开源项目,运行在Unix-based 的操作系统中,能够用来证明Android操作系统中存在安全漏洞,它还表明Android僵尸网络是能够存在的。使用AFE能够非常容易的自动创建一个Android平台的恶意软件,发现应用软件的漏洞(例如Leaking Content Providers,Insecure FileStorage,Directory Traversal等),以及在受感染的设备上执行任意命令。

AFE包含两个部分,PC端(以下称为AFE)和手机端(以下称为AFEServer)。AFE大部分是完全使用Python编写的。AFE是可扩展的,可以自由添加其他的模块或者将已有的工具移植到AFE框架下。AFEServer是一个在手机上运行的Android应用,用来和AFE的Python界面进行连接,执行AFE发送到手机的命令。

功能:

完善的命令行界面; 发现应用漏洞; 自动化创建恶意应用;

6. BYPASS SIGNATURE AND PERMISSION CHECKS FORIPCS

该工具通过使用Cydia Substrate为IPCs提供绕过签名和权限检查服务。

关于Cydia Substrate

Cydia Substrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的。

7. ANDROID OPENDEBUG

该工具利用Cydia Substrate将所有的应用程序在设备上运行;一旦安装任意应用程序就会有一个debugger连接到它们。

注意:该工具只能在测试设备中使用!

8. DARE

Dare是宾州大学计算机系发布的apk逆向工程工具,可以将Android系统中使用的apk文件反编译为JavaClass文件,这些Class文件随后可以通过现有的Java工具(包括反编译)进行处理。目前支持Linux和Mac OS X中使用。

9. DEX2JAR

dex2jar是一个能操作Android的dalvik(.dex)文件格式和Java的(.class)的工具集合。包含以下几个功能

dex-reader/writer:用于读写 DalvikExecutable (.dex) 文件格式. 包含一个简单的API(与ASM相似); d2j-dex2jar:执行dex到class的文件格式转换; smali/baksmali:与smali工具功能一致,但是对中文更友好; 其他工具:字符串解密

10. ENJARIFY

Enjarify是由Google推出的一款基于Python3开发,类似dex2jar的反编译工具,它可以将Dalvik字节码转换成相对应的Java字节码,有比dex2jar更优秀的兼容性,准确性及更高的效率。

11. DEDEXER

Dedexer是一款反编译dex文件的开源工具。特征包含:

不需要在android模拟器中运行; 能够将dex文件按照java源代码package的目录结构建好了目录,每个class文件对应一个ddx文件; 可作为像jasmin一样的反编译引擎;

12. FINO

一款Android动态分析工具。

13. INDROID

该项目的目的是证实在nix 系统a.k.a ptrace函数上的一个简单的调试功能可以被恶意软件滥用,在远程进程中注入恶意代码。Indroid为基于ARM的 nix设备提供创建远程线程(CreateRemoteThread)。

CreateRemoteThread是创建一个在其它进程地址空间中运行的线程(也称创建远程线程)。

14. INTENT SNIFFER

Intent Sniffer工具可以在任何运行谷歌Android操作系统的设备上使用。在Android平台中,Intent是应用程序之间进行通信的最常用的方式之一,Intent Sniffer工具实现监控运行时路由的广播Intent,也就是在系统上的应用程序之间发送的Intent。它并不监控显式广播的Intent,而是默认为(大多数情况下)无优先权的广播。

该工具也能够针对那些基于应用反射和动态审查安装程序的Intent来动态升级扫描的Action和Category。

15. INTROSPY

Introspy是一款黑盒测试工具,帮助我们理解Android应用程序在运行时的行为,协助我们识别潜在的安全问题。

16. JAD

JAD是一款Java反编译工具,可以通过命令行把Java的class文件反编译成源代码。

17. JD-GUI

JD-GUI是一个独立的显示“.class” 文件Java源代码的图形用户界面工具。用户可以使用JD-GUI浏览和重建源代码的即时访问方法和字段,以代码高度方式来显示反编译过来的代码。

18. CFR

CFR(Class File Reader),Java反编译器,支持Java 8的lamda表达式,Java 7 的字符串转换等,开发者为LeeBenfield。

19. KRAKATAU

Krakatau开发者为Storyyeller,目前主要包含三个工具——java类文件的反编译和反汇编工具,创建类文件的汇编工具。

20. PROCYON

Java反编译器和元编程框架Procyon可以在反编译工具中立足,显然是具有其独到优势的。它有进行控制流分析,以及类型推断,也支持java8特性,其开发者为Mike Strobel。

21. FERNFLOWER

Fernflower是一个对Java程序进行反编译分析的利器。目前正处于开发阶段,如有bug报告和改进建议可发送邮件至fernflower.decompiler@gmail.com

22. REDEXER

Redexer是Dalvik 字节码(用于安卓APP)分析框架,它是一套基于OCaml的实用工具,帮助程序员解析,操作Dalvik虚拟机。Redexer由来自马里兰大学帕克分校的PLUM组织开发完成,主要作者是:Jinseong Jeon,Kristopher Micinski以及Jeff Foster。

关于OCaml

OCaml是Caml编程语言的主要实现,由XavierLeroy,Jérme Vouillon,Damien Doligez,Didier Rémy及其他人于1996年创立。

23. SIMPLIFY安卓反混淆工具

Simplify安卓反混淆工具实际上是通过执行一个APP来解读其行为,随后尝试通过优化代码来实现行为一致,但是更容易被人理解的目的。每一种优化类型都是非常简单通用的,所以无论用的是什么特殊类型的混淆技术都没关系。其主要由3部分组成:smalivm,simplify以及demo app。

24. BYTECODE VIEWER

Bytecode Viewer是一个高级的轻量级Java字节码查看器,GUIProcyon Java 反编译器, GUI CFR Java 反编译器, GUI FernFlower Java 反编译器, GUI Jar-Jar, Hex 查器看, 代码搜索器, 调试器等。

这款开源工具完全采用Java编程语言进行开发。这款工具由Konloch设计并开发,目前也主要是Konloch正在维护这一开源项目。

在这款工具中,还设计有一个插件系统,它可以允许你与加载的类文件进行交互。比如说,你可以写一个字符串的反混淆工具,恶意代码搜索器,或者其他的一些你所能想到的东西。

你不仅可以使用一个他人预先编写完成的插件,而且你也可以使用你自己写的插件。不仅如此,它还支持使用Groovy脚本,Python脚本,以及Ruby脚本。当插件状态被激活之后,它会将每一个单独的类文件加载进BCV中,这样一来,用户就可以使用ASM来控制这些加载的类文件了。

25. RADARE2

radare2是一款开放源代码的逆向工程平台,它可以反汇编、调试、分析和操作二进制文件。

主要特点:

多平台多架构的; 高度脚本; 十六进制编辑器; IO包裹; 文件系统支持; 调试器支持等;

26. JEB FOR ANDROID

JEB是一个功能强大的为安全专业人士设计的Android应用程序的反编译工具。用于逆向工程或审计APK文件,可以提高效率减少许多工程师的分析时间。

特征表现为:

全面的Dalvik反编译器; 交互性; 可全面测试APK文件内容; 多平台(支持Windows, Linux和Mac等操作系统)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑客技术家园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
大厂高频手撕算法题
目前互联网行业目前正在处于内卷状态,各个大厂不断提高招人门槛,前端工程师找工作也越发艰难,为了助力各位老铁能够在面试过程中脱颖而出,我结合自己的面试经验,准备了这三十六道面试过程中的手撕算法题,与各位共享。 一、冒泡排序 冒泡排序的思路:遍历数组,然后将最大数沉到最底部; 时间复杂度:O(N^2); 空间复杂度:O(1) function BubbleSort(arr) { if(arr == null || arr.length <= 0){ return []; }
前端迷
2020/09/30
1.1K0
大厂高频手撕算法题
[图解] 快速排序
经典快速排序总是指定数组或者某部分的最后一个元素作为基准值,随机快速排序指定数组或者某一部分中的随机值作为基准值。
CoderJed
2019/02/25
1.2K0
[图解] 快速排序
【漫画】不要再问我快速排序了
一禅:归并排序是一种基于分治思想的排序,处理的时候可以采取递归的方式来处理子问题。我弄个例子吧,好理解点。例如对于这个数组arr[] = { 4,1,3,2,7,5,8,0}。
帅地
2018/12/13
5050
荷兰国旗-快排应用
”荷兰国旗难题“是计算机科学中的一个程序难题,它是由Edsger Dijkstra提出的。荷兰国旗是由红、白、蓝三色组成的。
sr
2018/08/20
5990
荷兰国旗-快排应用
Java的几种经典排序算法
对一个排序算法来说,一般从如下3个方面衡量算法的优劣: 时间复杂度:主要是分析关键字的比较次数和记录的移动次数。 空间复杂度:分析排序算法中需要多少辅助内存。 稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种算法是稳定的;反之,就是不稳定的。
程序员云帆哥
2022/05/12
2670
Java的几种经典排序算法
【优选算法篇】揭秘快速排序:分治算法如何突破性能瓶颈(上篇)
分治法是一种非常高效的算法设计策略,广泛应用于计算机科学的多个领域,尤其是在解决复杂问题时,它通过将大问题拆解成更小的子问题来降低问题的复杂度。快速排序(QuickSort)是分治法中的经典例子,能够在许多实际场景中提升性能。它的重要性体现在以下几个方面:
熬夜学编程的小王
2024/12/24
840
【优选算法篇】揭秘快速排序:分治算法如何突破性能瓶颈(上篇)
【数据结构与算法】:交换排序之快速排序(手绘图解+LeetCode原题)
快速排序是交换排序的一种,本质上快速排序就是采用“分而治之”的策略(分治法),将问题规模减小,再而对问题分别进行处理的排序算法。
.29.
2022/11/15
3480
【数据结构与算法】:交换排序之快速排序(手绘图解+LeetCode原题)
漫画:常考的荷兰国旗问题你还不会吗?(初级)
"荷兰国旗问题" 是计算机科学中的一个经典题目,它是由Edsger Dijkstra提出的。荷兰国旗由红、白、蓝三色组成。
程序员小浩
2020/05/08
5K1
手敲一遍排序算法 Java
**稳 定:**插冒归计基(简单插入排序、冒泡排序、归并排序、计数排序、基数排序)
小锋学长生活大爆炸
2020/12/08
3470
面试中的排序算法(Part 2)
今天我们介绍两个复杂点的排序算法随机快排和希尔排序,这也是面试的重点,考察范围包括代码书写,复杂度分析以及稳定性比较!好吧,让我们开始今天的算法之旅吧!
算法工程师之路
2019/08/05
4890
【Java数据结构和算法】012-排序:快速排序*、归并排序*、基数排序(桶排序)、堆排序、排序算法比较
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列;
訾博ZiBo
2025/01/06
820
【Java数据结构和算法】012-排序:快速排序*、归并排序*、基数排序(桶排序)、堆排序、排序算法比较
【leetcode】拆解与整合:分治并归的算法逻辑
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
用户11288949
2025/03/30
920
【leetcode】拆解与整合:分治并归的算法逻辑
算法从小白到大神之荷兰国旗问题&快排&堆排 顶
给定一个数组arr,和一个数num,请把小于等于num的数放在数 组的左边,大于num的数放在数组的右边。 要求额外空间复杂度O(1),时间复杂度O(N) 问题二(荷兰国旗问题) 给定一个数组arr,和一个数num,请把小于num的数放在数组的 左边,等于num的数放在数组的中间,大于num的数放在数组的 右边。 要求额外空间复杂度O(1),时间复杂度O(N)
须臾之余
2019/08/23
1.3K0
算法从小白到大神之荷兰国旗问题&快排&堆排
                                                                            顶
①归并排序、快速排序 、堆排序、计数排序[算法、代码模板、面试题]
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~
.29.
2023/12/06
4110
①归并排序、快速排序 、堆排序、计数排序[算法、代码模板、面试题]
面试官爱问的10大经典排序算法,20+张图来搞定
冒泡排序是因为越小的元素会经由交换以升序或降序的方式慢慢浮到数列的顶端,就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名冒泡排序。
C语言与CPP编程
2021/05/18
5380
面试官爱问的10大经典排序算法,20+张图来搞定
数据结构与算法-十大排序算法(动画演示)
不稳定:如果a原本在b的前面,而a = b,排序之后 a 可能会出现在 b 的后面。
越陌度阡
2020/11/26
7530
数据结构与算法-十大排序算法(动画演示)
七大经典、常用排序算法的原理、Java 实现以及算法分析
大家好,我是多选参数的程序锅,一个正在 neng 操作系统、学数据结构和算法以及 Java 的硬核菜鸡。数据结构和算法是我准备新开的坑,主要是因为自己在这块确实很弱,需要大补(残废了一般)。这个坑以排序为开端,介绍了 7 种最经典、最常用的排序算法,分别是:冒泡排序、插入排序、选择排序、归并排序、快速排序、桶排序、计数排序、基数排序。对应的时间复杂度如下所示:
syy
2020/06/23
7380
【优选算法篇】化繁为简,见素抱朴:从乱象中重构秩序的艺术
给定一个包含红色、白色和蓝色的数组 nums,共 n 个元素,要求对它们进行原地排序,使得相同颜色的元素相邻,并按红色、白色、蓝色的顺序排列。这里使用整数 0、1 和 2 分别表示红色、白色和蓝色,且不能使用库的排序函数。
半截诗
2024/11/21
710
【优选算法篇】化繁为简,见素抱朴:从乱象中重构秩序的艺术
【算法】快速排序及优化
其实,这就是快排的partition过程,通过三个指针,index,less,more进行的,初始less=左边界-1,more=右边界+1,说明一开始不存在less域和more域: 1)若arr[index] < num,less域增加,即less++,然后index和less位置的数交换后,index++继续指向下一个数 2)若arr[index] > num,more域增加,即more++,然后index和more的数交换后,继续判断交换后arr[index]和num的关系 3)若arr[index] == num,index++继续指向下一个数,不坐任何处理 4)重复以上过程,直至index==more
MapleYe
2020/03/28
4290
二分查找团灭力扣旋转排序数组系列
Leetcode 中有一系列旋转排序数组相关的问题,例如33. 搜索旋转排序数组、81. 搜索旋转排序数组 II、153. 寻找旋转排序数组中的最小值、154. 寻找旋转排序数组中的最小值 II 和面试题10.03 搜索旋转数组等,本文介绍通过二分查找团灭这一系列问题,供大家参考,希望能对大家有所帮助。
程序员小熊
2021/05/28
5800
二分查找团灭力扣旋转排序数组系列
推荐阅读
相关推荐
大厂高频手撕算法题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档