几种Android混淆和逆向工具介绍
针对Android面临的安全风险,一些防止逆向的方法应运而生。代码混淆在X86架构上曾经被广泛研究,他被用于保护软件的只是产权,但是恶意软件也常常使用他来对抗杀毒软件或者对抗逆向分析者,代码混淆可以给逆向分析带来巨大工作量,比如,可以是反编译工具失效或者增加很多无用逻辑。下面我们就介绍几种Android相关的代码混淆工具和相关的反编译工具。
代码保护:
下面的这几个工具可以用来混淆代码对抗逆向分析。
Proguard
Proguard是一个开源项目,官网http://proguard.sourceforge.NET/,同时也被集成到了Android SDK中,它的使用非常简单方便,Proguard是使用Java编写专门用来对Android程序进行混淆的工具。他的功能集包括混淆包,类,方法和域,除了这些保护机制外,也能识别或者标记一些无用代码,因此用户可以对其手动去除,未使用的类Proguard可以自动去除。Proguard的混淆方法就是对其中的类名和方法名去除其对应的意思,因为,逆向工作者可以根据类名和方法名猜出函数的意思,可以大大降低逆向难度,但是Proguard并没有对指令进行改变,所以使用Proguard进行混淆的强度比较低。
Allatori
Allatori是一个Smardec公司开发的用于商业的代码混淆工具,官网是http://www.allatori.com/doc.html,除了同Proguard的混淆技术外,Allatori还提供了一些方法来修改程序代码,被Allatori混淆的循环结构不能直接被反编译器识别,还有就是破坏算法的可读性,使本来紧凑的代码变得很长,而且,Allatori还会对字符串(一般是人类可读的字符串)进行混淆,在运行时解码。Allatori是在Proguard基础上更加强大的混淆工具,但是也无法完全杜绝逆向分析的行为。
逆向工具
一般逆向分析人员都会配合使用各种不同的逆向工具达到目的,这里只介绍一些静态分析工具,主要是一些可以反编译Dalvik指令集的工具。
Dexdump
Dexdump是AndroidSDK自带的一个工具,利用它可以直接对Dalvik字节码进行反编译,原理是利用线性扫描对整个dex文件进行线性反编译,也就是说,dexdump会认为每一个指令是有效的,进而依次对其反编译,如果加入一些垃圾指令,dexdump也同样会对其进行反编译从而影响到正常指令的解析。最后,dexdump会输出一些类、方法和一些类的结构等信息。
Smali
Smali官网是http://code.google.com/p/smali/,程序是一个汇编器,和上面所述的反汇编器相反,他对应的反汇编工具叫“baksmali”,利用这两个工具可以对一个Android应用程序进行解包,修改,重新打包。一般逆向分析者感兴趣的是baksmali代码,baksmali工具类似dexdump工具,只不过它的原理是递归扫描,所以它在反编译的时候会递归查看指令是否被调用,如果指令不被调用则认为是垃圾指令,弥补了线性扫描的不足,所以baksmali工具被当成基本的反编译器。
Androguard
Androguard是一个强大的逆向分析工具,他不仅包括反编译功能,而且还有一些可以分析程序信息的功能。Androguard给分析人员提供一个分析界面并可以给出程序的调用关系图,Androguard的原理和baksmali类似,也是使用的递归扫描。由于Androguard提供巨大的代码库和分析方法,目前已经成为了最流行的分析工具之一。另外,他还用来作为其他工具的后端组件,比如apkinspector,官网是http://code.google.com/p/apkinspector/。
IDA Pro
IDA Pro是一个非常流行的反编译工具,曾经风靡于x86平台,同时,他也支持许多其他体系结构,他也可以反编译Dalvik字节码,IDAPro提供了一个图形界面,并支持插件为其扩展功能,除了使用了递归反编译原理外,IDAPro允许用户分析任意他想要分析的文件指令点,这在程序丢失了一些指令的情况下非常有用。另外,IDAPro的一个非常有用的特点是它提供图形化界面,分析者可以根据这个图形化界面非常容易地分析控制流。
APKTOOL
Apktool,官网是https://code.google.com/p/android-apktool/,工具来自Google,集成了aapt,smali,baksmali,AXML编码解码等工具,可以完成反编译和编译的功能。目前这个工具已经成为非常常用的逆向工具。
几种Android混淆和逆向工具介绍的更多相关文章
- Android系统性能调优工具介绍
http://blog.csdn.net/innost/article/details/9008691 经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优 ...
- android 反编译 逆向工具整理
需要准备的道具需要哪些软件会在后面逆向过程中详细介绍,这里先大致罗列一下 android一台root并安装了xposed框架的手机(主要是为了脱壳) 类似[海马玩]这种模拟器 android-kill ...
- Android手机流量分析工具介绍
一.20 Best Android Hacking Apps And Tools Of 2018 首先罗列常见的Android手机hacking的工具 #1The Android Network Ha ...
- Android 常用抓包工具介绍之Charles
➠更多技术干货请戳:听云博客 Charles是一款抓包修改工具,相比起TcpDump,charles具有界面简单直观,易于上手,数据请求控制容易,修改简单,抓取数据的开始暂停方便等等优势!前面介绍了如 ...
- Android SDK中 tools 工具介绍
Android SDK包含了各种各样的定制工具,简介如下: Android模拟器(Android Emulator ) 它是在你的计算机上运行的一个虚拟移动设备.你可以使用模拟器来在一个实际的Andr ...
- Android性能分析工具介绍
1. Android系统性能调优工具介绍 http://blog.csdn.net/innost/article/details/9008691 TraceviewSystraceOprofile 2 ...
- Android APP压力测试(一)之Monkey工具介绍
Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动. ...
- Android SDK目录结构和工具介绍
Android SDK目录结构和工具介绍是本文要介绍的内容,主要是来了解并学习Android SDK的内容,具体关于Android SDK内容的详解来看本文. AD: Android SDK目录结构和 ...
- Android 开发工具介绍-SDK工具和平台工具
原文链接:http://android.eoe.cn/topic/android_sdk Android的SDK提供各种工具可以帮你为Android平台开发移动应用程序.这些工具被分类成两组:SDK工 ...
随机推荐
- P5016龙虎斗
这道题是2018年普及组的第二题,是一个模拟题. 首先计算出双方各自的势力,然后将增援的队伍势力加上,比较此时双方势力,并且作差,最后枚举将公平兵加在哪一个兵营.看似简单的题被我20分钟就写完了,但是 ...
- Scrapy 教程(五)-分页策略
scrapy 爬取分页网站的策略 1. 检测当前页是否存在“下一页” 2. 如果存在,把“下一页”的链接交给本方法或者其他方法 3. 如果不存在,结束 图示 示例代码 def parse(self, ...
- 0ctf 2017 kernel pwn knote write up
UAF due to using hlist_add_behind() without checking. There is a pair locker(mutex_lock) at delete_n ...
- python学习第五十二天logging模块的使用
很多程序都有记录日志的需求,并且日志包含的信息即有正常的程序访问日志,还可能有错误,警告等信息输出,python的 logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
- 学习MyBatis时报的错
初学MyBatis第一天跟着敲代码,一直报错,报错到崩溃,错误如下 org.apache.ibatis.exceptions.PersistenceException: ### Error query ...
- 北京太速科技股份有限公司产品手册V201903020
如果您无法正常查看,请点击在线浏览 如果您无法正常查看,请点击在线浏览 了解更多产品信息,请扫描二维码,期待您的关注 ...
- 特殊权限位:suid、sgid、sticky
linux系统特殊权限位 suid.sgid.stickysuid 使任意用户获得用文件属主相同的权限,sgid使用户获得与文件属组相同的权限(通过sgid获得的权限等同于同一用户组的权限) 表示方法 ...
- PAT Advanced 1007 Maximum Subsequence Sum (25 分)
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to ...
- Keycode含义
keycode 是键盘上每一个按键对应的码keycode如下 :keycode 0 = keycode 1 = keycode 2 = keycode 3 = keycode 4 = keycode ...
- hdu 1059 Dividing bitset 多重背包
bitset做法 #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a ...