010 Android之逆向入门
文章目录
- Android APK文件结构
- META-INF
- res
- AndroidManifest.xml
- classes.dex
- resources.arsc
- lib
- Assets
- Android APK的入口函数
- SDK工具
- adb
- monitor
- Andriod逆向工具
- AXMLPrinter2.jar->Manifest.xml清单文件解密工具
- Dex文件反汇编 汇编工具
- apk签名工具
- apk反编译工具->apktool
- Dex2jar工具(转换文件格式)
- jd-gui
- AndroidKiller
Android APK文件结构
在编译生成APK之后,会产生如上的几个文件
META-INF
该目录存放签名信息,包括公司信息,文件哈希值。这就意味着如果想要破解这个APK,一旦修改之后文件哈希值也会发生改变,签名就会无效
res
资源信息,包括图片,xml(布局文件 字符串 风格样式等)
AndroidManifest.xml
清单文件,包括包名,四大组件的一些声明定义以及权限和程序的入口。这个文件不能直接看到内容,需要进行一定的解析
classes.dex
可执行文件,包含JAVA的类信息,方法信息,字段信息,虚拟机指令。dex的生成流程是从JAVA源码->class文件->dex文件
resources.arsc
资源序号文件,包括资源里的所有ID和名称。资源ID对应文件是R.class
lib
动态库,扩展名是.so,包括C++代码,有各种平台,比如x86,arm
Assets
自定义资源,比如txt,mp4等等
Android APK的入口函数
一般是自己定义的MainActivity中的onCreate函数。还有第二种情况,
清单文件中appliction节点可以添加android:name属性,指定继承自appliction的类,用于初始化整个app的全局信息。继承自appliction的类有两个重写函数会执行,是程序最早的执行函数
- attachBaseContext
- onCreate
所以一个app最早的执行函数是application类中的attachBaseContext函数。一般apk加固以后,都会自定义appliction类,并重写attachBaseContext或onCreate函数,并声明为native类型的函数
SDK工具
adb
adb的使用
需要在SDK文件中找到adb,设置目录到path环境变量中
D:\Android\sdk\platform-tools
adb命令
列举设备:adb devices
将adb上传到设备,下载到PC:adb push adb pull
安装apk:adb install apk文件名
启动apk:adb shell am start -n <包名/activity名称>
shell命令:使用adb shell进入安卓命令行,可以在命令行使用linux命令
monitor
这个工具主界面分为三大块,分别是设备列表,文件列表和日志列表
点击加号可以新建一个日志过滤器
可以给过滤器命名,通过日志标签或者进程ID进行过滤等等
Andriod逆向工具
AXMLPrinter2.jar->Manifest.xml清单文件解密工具
随意打开一个apk中的清单文件,在不解密的情况下里面的内容是乱码的。调用下面这条命令对xml进行解密
java -jar .\AXMLPrinter2.jar .\AndroidManifest.xml
解密完成之后,xml就是明文的了,如果不想将结果显示到命令行,则可以输出到文件
java -jar .\AXMLPrinter2.jar .\AndroidManifest.xml > out.xml
一样可以获取解密后的内容
Dex文件反汇编 汇编工具
Dex文件是Android java代码编译生成的二进制文件,包含了虚拟机指令。
baksmali.jar 反汇编工具,将虚拟机指令反汇编成smali代码
java -jar baksmali.jar classes.dex -o <输出目录>
反汇编生成的目录中,包括所有dex文件中的类代码,每一个类就是一个smali文件。
Java中有三种类,外部类 内部类 匿名类。
外部类:MainActivity.java->MainActivity.smali
内部类:MainActivity类中的OnClickListener类–>MainActivity$MyOnClickListener.smali
匿名内部类:MainActivity类中的OnClickListener对象–>MainActivity$1.smali
smali.jar 汇编工具,将smali代码汇编生成dex文件
java -jar smali.jar out_dir(目录) -o out.dex(文件名)
apk签名工具
签名工具,使用android系统源码编译时用到的一个工具
java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk
apk反编译工具->apktool
这个工具将上面的命令行工具做了一个集成和优化,可以将apk中的所有文件进行解密和反汇编
反编译apk
java -jar apktool.jar d hello.apk
解密apk时,进行了下面几步操作
- 将清单文件以及其他xml文件进行解密
- 将资源序号文件(resources.arsc)与资源名称做了一个对应关系表,生成在了
res/values/public.xml
- 将dex文件反编译成了smali代码
执行完成之后回将所有的文件都放在同目录下,相当于是一键解密所有apk文件了,着实是强!
回编译apk目录
java -jar apktool.jar b hello
生成的apk在<hello>/dist
目录中
Dex2jar工具(转换文件格式)
将dex文件转为jar文件
d2j-dex2jar.bat classes.dex
jd-gui
JAVA代码反编译工具,可以将jar文件反编译成JAVA代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EYH6oC2e-1623813489915)(010 Android之逆向入门.assets/1623480039139.png)]
AndroidKiller
第一次使用需要配置JDK路径
AndroidKiller中集成了好几个工具:
- apktool
- dex2jar
- adb
- jd-gui
010 Android之逆向入门相关推荐
- [免费专栏] Android安全之APK逆向入门介绍
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...
- Android传感器编程入门(三)
上接<Android传感器编程入门(二)> 三.实例:窈窈录音器 通过上面的例子我们学会了如何获得某种类型的传感器,下面我通过一个实例来学会如何使用某一个类型的传感器.我们这里使用加速度传 ...
- 收藏 | Android开发从入门到精通系列书籍资料最全攻略!!!(最新更新)
很多人会私信给我提问,问安卓的学习路线是什么,因为之前没有写过系统的路线图,于是近期花了一些时间,把这块的知识,做成一个体系分享给大家,也算是自己在安卓这边做的一份贡献. 关于安卓如何来学习,安卓入门 ...
- SO逆向入门实战教程一:OASIS
文章目录 一.前言 二.准备 三.Unidbg模拟执行 四.ExAndroidNativeEmu 模拟执行 五.算法分析 六.尾声 一.前言 这是SO逆向入门实战教程的第一篇,总共会有十三篇,十三个实 ...
- 5G 时代的 Android App 开发入门与项目实战
随着移动互联网的持续发展,Android系统从智能手机逐步拓展到平板电脑.智能电视.车载大屏.智能家居.智能手表等诸多设备,Android开发依然是前景可期的IT岗位. 当然,整个社会正在迈向5G时代 ...
- 《Android应用开发入门经典(第3版)》——第6.1节创建演示应用
本节书摘来自异步社区<Android应用开发入门经典(第3版)>一书中的第6章,第6.1节创建演示应用,作者 [美]Carmen Delessio , Lauren Darcey , Sh ...
- 《Android应用开发入门经典(第3版)》——导读
本节书摘来自异步社区<Android应用开发入门经典(第3版)>一书中的目录,作者 [美]Carmen Delessio , Lauren Darcey , Shane Conder,更多 ...
- Android渗透测试Android渗透测试入门教程大学霸
Android渗透测试Android渗透测试入门教程大学霸 第1章 Android渗透测试 Android是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机.平板等.目前 ...
- Android 游戏开发入门
Android 游戏开发入门 图书描述: Android系统已经红遍了大江南北,持有Android设备的人也在不断增长.看着大街上用手指划着手机玩游戏的人,你有没有一种自己做一个游戏的想法呢?然而,入 ...
最新文章
- R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型
- 第01章_数据库概述
- P4396 [AHOI2013]作业 cdq分治
- Sound recording and encoding in MP3 format.
- UI设计实用素材|寻找一种新的方法来设计网站,单页网站
- cpython和jpython_在J内部使用Python
- Arduino入门笔记(6):温度传感器及感温杯实验
- 【Oracle 学习】Scott账号解锁
- 程序员的Win10必备软件
- 成都Uber优步司机奖励政策(3月4日)
- html如何自己做一个背景特效,背景效果实现方法总结
- Python基础题目(三)
- python应用(3)svm模型预测股票涨跌
- CentOS6启动和内核管理
- itextpdf简单使用 制作豆瓣日志pdf
- 汉马盛况精彩纷呈,健康跑向未来
- Lawliet|C++学习笔记1——输入输出
- flash全屏显示代码
- 学会如何学习,是一项终极生存技能
- 最新OPPOR9S无人直播魅族版硬改相机刷机教程
热门文章
- CV之IS:利用pixellib库基于mask_rcnn_coco模型对《庆余年》片段实现实例分割简单代码全实现
- ML之K-means:基于DIY数据集利用K-means算法聚类(测试9种不同聚类中心的模型性能)
- 成功解决sys.argv[1] IndexError: list index out of range错误
- 汉语自然语言处理工具包下载
- Mongodb利用aggregation实现抽样查询(按记录数和时间)
- nginx用户权限问题
- VMware虚拟机打开后不兼容
- Android性能优化之一:ViewStub
- Basic Level 1018. 锤子剪刀布 (20)
- 一条语句执行跨越若干个数据库