❶ android逆向之手机环境配置
该篇文章主要介绍在Android逆向开始之前的 手机环境配置 。其中包括对手机进行 刷机 (根据所需的Android手机型号、Android系统版本进行刷机。这里我以nexus 5 android 6.0.1为例,其他Google系手机型号及刷其他Android版本系统都是类似的);第二个则是安装Android逆向分析 hook框架 (Xposed、frida)及一些常用的基础插件等。
一、刷机前准备
二、开始对nexus 5刷机(Android 6.0.1)
需要使用低版本的platform-tools进行替代,具体的操作步骤,可以参考以下文章
https://www.jianshu.com/p/d40db7e08e3e
三、刷入第三方recovery(TWRP)到新系统中
四、对刚刷完的Android系统进行root
五、安装Xposed框架、frida-server 及Android逆向分析中常见的插件
综上所述,该篇文章主要是使用Android官方的系统镜像进行刷机,然后安装配置Android逆向所需的框架及插件。在刷机的时候,我们也可以选择自己修改编译Android系统源码,再进行刷机,定制我们自己所需的分析环境。
更多精彩内容,请扫码关注以下公众号
❷ Android逆向工程相关工具集合
刷机包 sparse img -> ext4 img 线刷包里面找到system.img/vendor.img
$ file system.imgsystem.img: Android sparse image, version: 1.0, Total of 849920 4096-byte output blocks in 2454 input chunks.
使用Android源码编译得到out/host/linux-x86/bin/simg2img即可将Android的sparse image转为ext4的image
dat -> ext4 img system.new.dat.br转system.new.dat
brotli –decompress system.new.dat.br –output=system.new.dat
system.new.dat system.patch.dat system.transfer.list转ext4 img
https://github.com/xpirt/sdat2img
payload mp https://gist.github.com/ius/ odex/oat/vdex Android <=4.4 odex to dex
https://github.com/JesusFreke/smali/wiki/DeodexInstructions
https://bitbucket.org/JesusFreke/smali/downloads/
Android <=7 oat to dex
https://github.com/testwhat/SmaliEx/releases
https://github.com/testwhat/SmaliEx
https://github.com/JesusFreke/smali/wiki/DeodexInstructions
https://bitbucket.org/JesusFreke/smali/downloads/
Android 8 vdex to dex
https://github.com/anestisb/vdexExtractor
Android 9 vdex->cdex->dex
https://github.com/anestisb/vdexExtractor
https://github.com/anestisb/vdexExtractor/issues/23
tools/deodex/run.sh -h
dex dex转smali apktool工具 针对 apk包括dex和资源
https://github.com/iBotPeaches/Apktool
https://ibotpeaches.github.io/Apktool/
baksmali、smali 针对dex
https://github.com/JesusFreke/smali
https://bitbucket.org/JesusFreke/smali/downloads/
dex转jar/java
googe enjarify工具dex转jar
https://github.com/google/enjarify
dex2jar
https://github.com/pxb1988/dex2jar
https://github.com/pxb1988/dex2jar/releases
结合jd-gui
https://github.com/java-decompiler/jd-gui
http://jd.benow.ca/
二合一工具
https://github.com/skylot/jadx
❸ 关于安卓逆向你需要知道的工具及网站
关于安卓逆向你需要知道的工具及网站
把最近接触到的安卓逆向相关的工具和网站总结下,供需要者拿去使用,还有不全和遗漏后续会不断完善。
工具篇章
模拟器(动态调试需要用真机)
安卓原生模拟器:Android Studio自带的
夜神:今天开始尝试这个模拟器,发现在ida挂载进程时出现了问题,挂不上,架构为x86,不能用ida调试。 地址https://www.yeshen.com/
逍遥:还未使用 地址http://www.xyaz.cn/
蓝叠(bluestack): 地址http://www.bluestacks.cn
雷电模拟器
apk反编译套件工具
jeb:今天开始尝试这个工具 地址https://www.pnfsoftware.com/
YouGais:以前我一直使用这个,没有官网地址,免费版功能受限
打包及签名工具
apktool:apk拆包打包工具 地址https://ibotpeaches.github.io/Apktool/install/
jd-gui:java反编译工具 地址http://jd.benow.ca/
aotusign:自动签名工具,没有官网网络即可
native文件反编译工具
ida:静态分析、动态分析,免费版功能受限 地址https://www.hex-rays.com/
gdb:http://ftp.gnu.org/gnu/gdb/
辅助调试工具
adb:通向手机或模拟器的桥梁,绿色小程序。最常用的就是查看logcat,进入手机shell等。 地址http://adbshell.com/downloads
ddms:android SDK中自带工具。该工具可以查看手机模拟器的进程,选中需要监控的进程后,会出现绿色小蜘蛛图标,同时后面会出现8700端口号。
jdb:jdk目录下自带的与安卓进程连接的程序,常与ddms配合用于动态调试
xposed:需要安装框架+模块,还有对应的xposed市场。可以在常用市场搜索安装。bluestack中安装后变砖了,夜神中安装正常。
十六进制文件编辑工具
UltraEdit:十六进制文件编辑工具
010Edit:还没有用过
winhex:印象中很久前用过
android开发工具
Android Studio
Eclipse
Aide(手机版开发工具)
其他
解压缩软件:winrar、7zip等等都可以,将apk改名为zip就能直接打开
社区资料篇章
论坛及社区
看雪论坛:https://bbs.pediy.com/forum-161.htm
freebuff:http://www.freebuf.com/articles/terminal
还有吾爱破解、知乎、、CSDN等等都有相应版块内容及文章可供学习。
arm指令
官方文档pdf:
https://silver.arm.com/download/ARM_and_AMBA_Architecture/AR570-DA-70000-r0p0-00rel2/DDI0406C_C_arm_architecture_reference_manual.pdf
在线编译网站
c到汇编在线转换
https://gcc.godbolt.org/
汇编到操作码在线转换
http://armconverter.com/
❹ 怎么对android app实现逆向分析
首先,逆向分析是一门技术,也是一门艺术。
其次,安卓逆向同样可细分为应用层APK逆向、安卓设备框架、内核驱动等逆向、基于安卓的硬件产品逆向等。此处假定楼主说的是第一种逆向。
应用层的逆向分析根据需求的不同,又可细分成APK流程逆向与功能逆向。
流程逆向通常是指简单的对APK运行流程进行分析,此类分析通常可以使用将APK置于沙盒环境中运行捕捉并查看运行结果。这种逆向需求通常不是很多,典型的工种有杀软厂商的病毒分析工程师。
功能逆向相比流程逆向则困难得多。但需求比较普遍。实际逆向分析过程中对功能实现的理解,在很大程度上取决于逆向人员相关的软件开发知识。比如,分析Android程序的JAVA代码就需要掌握基本的Android软件开发的知识。分析so库的代码就需要了解C/C++相关的so库开发的知识。除了基本开发相关的能力外,逆向分析人员还需要具备以下知识:
ARM/X86/MIPS汇编语言-分析so库时可能需要阅读大量的反汇编代码。
常见逆向分析工具的使用-JDGUI/IDA PRO/APKTOOL/JEB/DEX2JAR
常用的安卓程序调试与反调试手段-调试器检测与反检测/脱壳/反混淆
常用的加密与解密算法-好的逆向分析人员需要有快速识别常见加密解密算法的能力
最后,就是多动手,多动手练习是掌握逆向分析技术最好的方法。
❺ Android软件安全与逆向分析的Android术语
逆向分析是一种逆向工程技术,是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理 。Android 软件安全与逆向分析是针对Android 软件的逆向分析,对原有APK文件进行反向研究,包括对语法,代码等进行分析,破解原有APK的源代码,资源文件比如图片,音频等等行为。
1.APK一旦被破解,反编译之后的源码就被破解者获取,开发者的劳动成果就被窃取,危害了开发者的利益。
2.反编译的APK如果被进行二次打包,那么APP就成为盗版产品,盗版产品侵害开发者的版权
3.反编译的产品有可能被破解者进行二次打包,注入恶意代码,窃取用户隐私,恶意扣除用户手机流量和资费,获取用户数据等等,这些行为严重伤害用户的利益。
4.盗版产品不受保护,用户得不到合理的售后支持和服务。
在这种情况下就需要加强对安卓APK DEX文件进行保护的技术,防止反编译。dex文件其实就是Android系统中可以在Dalvik虚拟机上直接运行的文件格式。Java源码通过ADT编译成Smali语言这是一个优化的过程,相对于.class文件它体积小、运行效率高、被编译后可读性低;Smali再到class. DEX本身就是一个加壳保护的过程。 DEX文件如果未做好保护,黑客通过反编译可让源码完全暴露,可利用阅读源码来找到App的设计流程,通过对程序流程的了解将很容易对程序进行盗版、恶意篡改、恶意代码注入等危险行为 。
1.隔离Jave程序。这种是最根本的保护,将一些关键的Class文件进行加密,例如对注册码、序列号管理相关的类进行加密,开发人员可以将关键的JavaClass放在服务器端,用户通过服务器接口获取服务而不是直接通过java文件。破解者就无法获取class文件了。目前有很多通过接口提供服务的标准和协议,比如HTTP,webservice,RPC等等。但是呢,这种方式并不是适合所有的APP,比如单机运行的程序的无法隔离Java程序。
2.对class文件进行加密保护。开发者可以将一些关键的class文件进行加密,比如对注册码,序列号管理相关的类进行加密来防止反编译。在使用这些被加密的类之前,程序需要首先对这些类进行解密,然后才能将这些类加载在JVM中。要解密这些类,必须要通过一些硬件或是软件才能完成。
3.转换成本地代码
这是一种防止反编译的比较有效的方法。因为本地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,或者可以选择关键模块转换。如果仅仅转换关键部分模块,Java程序在使用这些模块时,需要使用JNI技术进行调用。当然,在使用这种技术保护Java程序的同时,也牺牲了Java的跨平台特性。对于不同的平台,我们需要维护不同版本的本地代码,这将加重软件支持和维护的工作。不过对于一些关键的模块,有时这种方案往往是必要的。为了保证这些本地代码不被修改和替代,通常需要对这些代码进行数字签名。在使用这些本地代码之前,往往需要对这些本地代码进行认证,确保这些代码没有被黑客更改。如果签名检查通过,则调用相关JNI方法.
4.代码混淆
代码混淆是对Class文件进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能(语义)。但是混淆后的代码很难被反编译,即反编译后得出的代码是非常难懂、晦涩的,因此反编译人员很难得出程序的真正语义。从理论上来说,黑客如果有足够的时间,被混淆的代码仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是从实际情况来看,由于混淆技术的多元化发展,混淆理论的成熟,经过混淆的Java代码还是能够很好地防止反编译。下面我们会详细介绍混淆技术,因为混淆是一种保护Java程序的重要技术 。
5.第三方工具加密
上面四种方式可能要耗费开发者很大一部分精力和时间,如果想要方便的话,可以寻求第三方的加密工具。目前市场上有一些工具是可以帮助APK加密的,比较知名的是爱加密的加密平台。相对于上面四种方式,这种第三方的加密工具要更全面和专业,可以有效的保护dex文件,so库文件,xml主配文件以及其他资源文件不被反编译和恶意篡改。
爱加密专家提醒,这些方式并不是独立运用的,有时候可以混合使用,根据自己的情况来定,比如说高级混淆之后还是可以使用第三方的爱加密工具进行高级保护,多一重安全。
❻ 逆向需要的工具汇总(持续更新中)
一、砸壳工具
mpdecrypted: https://github.com/stefanesser/mpdecrypted
Clutch: https://github.com/KJCracks/Clutch
二、界面分析工具
Reveal: https://revealapp.com/
三、监控工具
snoop-it: https://code.google.com/archive/p/snoop-it/
introspy: https://github.com/iSECPartners/Introspy-iOS
四、静态分析工具
IDA: https://www.hex-rays.com/procts/ida/support/download_demo.shtml
Hopper: https://www.hopperapp.com/
五、动态调试工具
lldb: http://lldb.llvm.org/
六、动态脚本工具
cycript: http://www.cycript.org/
frida: http://www.frida.re/
七、抓包工具
BurpSuite: https://portswigger.net/burp/download.html
Charles: https://www.charlesproxy.com/
Wireshark: https://www.wireshark.org/download.html
八、Mac工具
MachOView: https://github.com/gdbinit/MachOView
九、导出头文件工具
class-mp: https://github.com/nygard/class-mp
十、THEOS越狱开发工具包
thoes: https://github.com/theos/theos/wiki/Installation
十一、文件管理工具
Filza ios设备查看文件系统
iFunBox/iExplorer mac设备查看ios设备的文件系统
十二、debugserver (动态调试,附加子进程)
https://www.jianshu.com/p/36dc01a37180
十三、常用Tweak.xm预处理指令
http://iphonedevwiki.net/index.php/Logos
十四、符号表恢复工具(restore-symbol)
https://github.com/tobefuturer/restore-symbol
其他工具:
iOSOpenDev: https://code.google.com/archive/p/iosopendev/downloads
insert_dylib: https://github.com/Tyilo/insert_dylib
iTerm: http://www.iterm2.com/
Alfred: https://www.alfredapp.com/
iTools: http://www.itools.cn/
更新:2018-8-16
phantomjs :提供一个浏览器环境的命令行接口,相当于"虚拟浏览器"。
PhantomJS官方地址: http://phantomjs.org/ 。
PhantomJS官方API: http://phantomjs.org/api/ 。
PhantomJS官方示例: http://phantomjs.org/examples/ 。
PhantomJS GitHub: https://github.com/ariya/phantomjs/ 。
参考文档: http://javascript.ruanyifeng.com/tool/phantomjs.html#toc1
MonkeyDev : https://github.com/AloneMonkey/MonkeyDev
这里我就直接功能点了:
原有iOSOpenDev的升级,非越狱插件开发集成神器!
frida-ios-mp :一键砸壳工具,非常的好用。
https://github.com/AloneMonkey/frida-ios-mp
Hookzz :通过Hookzz可以快速找到调用的方法,理清程序调用逻辑。
源码: https://github.com/jmpews/HookZz
文档: https://jmpews.github.io/zzpp/getting-started/
❼ Android-trace分析工具
1.TraceView 官方说明文档: https://developer.android.google.cn/studio/profile/cpu-profiler android CPU profiler CPU profiler可以实时检查应用的CPU使用率和线程activity,并记录函数跟踪,以便于您可以优化和调试您的应用程序. Flame Chart如果出现问题 颜色也会加深 2.systrace 简介: systrace是Android4.1版本之后推出的,对系统Performance分析的工具。systrace的功能包括跟踪系统I/O操作,内核工作队列,CPU负载以及Android各个子系统的运行状况等。 主要由三部分构成: 1.内核部分 systrace采用了linux Kernel的ftrace功能,所以如果要使用systrace的话,必须开启Kernel和ftrace相关的模块. 2.数据采集部分 Android中定义了一个trace类,应用程序可以使用该类把统计信息输出给trace,同时,android有一个atrace程序,它可以从ftrace中读取统计信息然后交给数据分析工具来处理. 3.数据分析工具 Android提供一个systrace.py用来配置数据采集的方法(如采集数据的标签,输出文件名等)和收集ftrace统计数据并生成一个结果网页文件供用户查看。 简单的说,当机器以60帧/秒显示,用户会感知机器流畅。如果出现显示时丢帧的情况,就需要知道系统在做什么?Systrace是用来收集系统和应用的数据信息和一些中间生成数据的细节,在Android4.1和4.2系统之后出现。Systrace在分析一些显示问题上特别有用,如应用画图慢,显示动作或者动画时变形。 抓取systrace 进入本地Android/Sdk/platform-tools/systrace目录下,执行python systrace.py view --time = 10 python脚本的option