文章目录

  • 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的类有两个重写函数会执行,是程序最早的执行函数

  1. attachBaseContext
  2. onCreate

所以一个app最早的执行函数是application类中的attachBaseContext函数。一般apk加固以后,都会自定义appliction类,并重写attachBaseContext或onCreate函数,并声明为native类型的函数

SDK工具

adb

adb的使用

需要在SDK文件中找到adb,设置目录到path环境变量中

D:\Android\sdk\platform-tools

adb命令

  1. 列举设备:adb devices

  2. 将adb上传到设备,下载到PC:adb push adb pull

  3. 安装apk:adb install apk文件名

  4. 启动apk:adb shell am start -n <包名/activity名称>

  5. 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时,进行了下面几步操作

  1. 将清单文件以及其他xml文件进行解密
  2. 将资源序号文件(resources.arsc)与资源名称做了一个对应关系表,生成在了res/values/public.xml
  3. 将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之逆向入门相关推荐

  1. [免费专栏] Android安全之APK逆向入门介绍

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  2. Android传感器编程入门(三)

    上接<Android传感器编程入门(二)> 三.实例:窈窈录音器 通过上面的例子我们学会了如何获得某种类型的传感器,下面我通过一个实例来学会如何使用某一个类型的传感器.我们这里使用加速度传 ...

  3. 收藏 | Android开发从入门到精通系列书籍资料最全攻略!!!(最新更新)

    很多人会私信给我提问,问安卓的学习路线是什么,因为之前没有写过系统的路线图,于是近期花了一些时间,把这块的知识,做成一个体系分享给大家,也算是自己在安卓这边做的一份贡献. 关于安卓如何来学习,安卓入门 ...

  4. SO逆向入门实战教程一:OASIS

    文章目录 一.前言 二.准备 三.Unidbg模拟执行 四.ExAndroidNativeEmu 模拟执行 五.算法分析 六.尾声 一.前言 这是SO逆向入门实战教程的第一篇,总共会有十三篇,十三个实 ...

  5. 5G 时代的 Android App 开发入门与项目实战

    随着移动互联网的持续发展,Android系统从智能手机逐步拓展到平板电脑.智能电视.车载大屏.智能家居.智能手表等诸多设备,Android开发依然是前景可期的IT岗位. 当然,整个社会正在迈向5G时代 ...

  6. 《Android应用开发入门经典(第3版)》——第6.1节创建演示应用

    本节书摘来自异步社区<Android应用开发入门经典(第3版)>一书中的第6章,第6.1节创建演示应用,作者 [美]Carmen Delessio , Lauren Darcey , Sh ...

  7. 《Android应用开发入门经典(第3版)》——导读

    本节书摘来自异步社区<Android应用开发入门经典(第3版)>一书中的目录,作者 [美]Carmen Delessio , Lauren Darcey , Shane Conder,更多 ...

  8. Android渗透测试Android渗透测试入门教程大学霸

    Android渗透测试Android渗透测试入门教程大学霸 第1章  Android渗透测试 Android是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机.平板等.目前 ...

  9. Android 游戏开发入门

    Android 游戏开发入门 图书描述: Android系统已经红遍了大江南北,持有Android设备的人也在不断增长.看着大街上用手指划着手机玩游戏的人,你有没有一种自己做一个游戏的想法呢?然而,入 ...

最新文章

  1. R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型
  2. 第01章_数据库概述
  3. P4396 [AHOI2013]作业 cdq分治
  4. Sound recording and encoding in MP3 format.
  5. UI设计实用素材|寻找一种新的方法来设计网站,单页网站
  6. cpython和jpython_在J内部使用Python
  7. Arduino入门笔记(6):温度传感器及感温杯实验
  8. 【Oracle 学习】Scott账号解锁
  9. 程序员的Win10必备软件
  10. 成都Uber优步司机奖励政策(3月4日)
  11. html如何自己做一个背景特效,背景效果实现方法总结
  12. Python基础题目(三)
  13. python应用(3)svm模型预测股票涨跌
  14. CentOS6启动和内核管理
  15. itextpdf简单使用 制作豆瓣日志pdf
  16. 汉马盛况精彩纷呈,健康跑向未来
  17. Lawliet|C++学习笔记1——输入输出
  18. flash全屏显示代码
  19. 学会如何学习,是一项终极生存技能
  20. 最新OPPOR9S无人直播魅族版硬改相机刷机教程

热门文章

  1. CV之IS:利用pixellib库基于mask_rcnn_coco模型对《庆余年》片段实现实例分割简单代码全实现
  2. ML之K-means:基于DIY数据集利用K-means算法聚类(测试9种不同聚类中心的模型性能)
  3. 成功解决sys.argv[1] IndexError: list index out of range错误
  4. 汉语自然语言处理工具包下载
  5. Mongodb利用aggregation实现抽样查询(按记录数和时间)
  6. nginx用户权限问题
  7. VMware虚拟机打开后不兼容
  8. Android性能优化之一:ViewStub
  9. Basic Level 1018. 锤子剪刀布 (20)
  10. 一条语句执行跨越若干个数据库