基础知识
前言
安卓5.0开始试用ART虚拟机,安卓系统也开始分32位和64位版本
APK基本结构
1、assets这里面一般放的是资源,这里面的资源通常是没有编译过的,像js、html等
2、lib目录放的一般是so文件,也就是本地代码
arm8、x64位的CPU.....APK很少有64位的,在动态调试的时候会有静态分析和动态分析arm代码是不一样的
armeabi:为了做兼容的:arm5的cpu
armeabi-v7a:是arm7的cpu
libs文件夹︰引用第三方的java包
3、META-INF: APK的签名
我们每次打包APK后都需要做一个签名,在系统里面是需要做验证的,不管是代码验证还是在安卓系统里面都需要签名验证
假设如果把APK文件改了,在放回去的话本身的签名和修改后放回去签名是不对应的,这时候怎么解决呢?
需要破解器破解系统核心,就算不重签名也可以放上去
或者安装在模拟器上面进行操作,模拟器支持不重签名也可以操作
4、res目录:放的资源,程序的图标、样式、布局、XML等,编译之后的文件,直接查看是乱码,需要反编译的
工具AndroidKiller即可反编译查看
5、AndroidManifest.xml:清单文件,直接查看大部分是乱码
清单:APK需要使用的一些权限、包名是什么、APK是否支持调试等等内
6、resources.arsc:编译之后的文件,语言包、程序内容等
7、classes.dex:dex文件,运行在Dalivk虚拟机上的文件,是smali代码也就是源代码,需要反编译转换为smali代码,还可以把smali代码转换为java代码或者直接des转换为jar包也可以
大型的apk里面会有好几个classes,分开放的原因,是因为文件大小是有限制的
JVM、DVM、ART
JVM:简单来说就是java虚拟机,运行的是.java
文件编译后的.class
文件
DVM: Dalvik虚拟机
在Android4.4及以前使用的都是Dalivk虚拟机,我们知道APK在打包的过程中会将java等源码通过javac
编译成.class
文件
但Dalvik虚拟机只会执行.dex
文件,所以dx工具会将.class
文件打包成.dex
文件在丢给Dalvik虚拟机执行,但是Dalivk虚拟机在启动时候会将.dex
文件转换成快速与进行的看机器码,又因为65535这个问题,导致我们在应用冷启动的时候有一个合包的过程,最后导致的一个结果就是APP启动慢,这就是Dalvik虚拟机的JIT特性。
这里要了解一下:如果超过65535就会重新生成.dex
文件
ART:ART虚拟机
ART虚拟机是在Android5.0才开始试用的Android虚拟机,ART虚拟机必须要兼容Dalvik虚拟机的特性,但是ART有一个很好的特性AOT(ahead of time),这个特性就是在安装APK的时候就将dex直接处理成可直接供ART虚拟机使用的机器码,ART虚拟机将.dex
文件转换成可直接运行的.oat
文件,ART虚拟机天生支持多dex,所以也不会有一个合包的过程,所以ART虚拟机会很大的提升APP冷启动速度。
APK的打包流程
Android开发工具
1.java环境安装
环境变量配置
验证安装
2.adt-bundle
这个是绿色版的 无需安装
以命令形式调试安卓模拟器或者真机
ddms可以看模拟器进程的端口、log等输出的信息
3.Eclipse
创建一个项目
创建完成
然后这里要做几个 配置
配置java编译环境
配置java运行环境
要添加新java环境的 如下操作
配置当前文件的编码
要支持 中文的 选择UTF-8
配置Java代码提示
abcdefghijklmnopqrstuvwxyz
创建一个class文件
勾选之后 会自动生成主函数
进行简单的输出
Android逆向工具配置
1.AndroidKiller
这个工具的搜索功能 非常的强大!!!
集Apk反编译、Apk打包、Apk签名,编码互转,
ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一身,支持logcat日志输出,语法高亮,
基于关键字(支持单行代码或多行代码段)项目内搜索,可自定义外部工具;吸收融汇多种工具功能与特点,打造一站式逆向工具操作体验,大大简化了用户在安卓应用/游戏修改过程中的各类繁琐工作。
SDK安装
命令行模式 调试APK文件
解压之后 目录下有这两个文件
然后进行环境变量的配置
验证安装
安装NDK
进行安装AndroidKiller
进行关联Java包
APKtool加载
配置完毕 丢个apk进去
然后呢 进行对比一下
classes.dex--反编译成-->smali
classes2.dex--反编译成-->smali_classes2
AndroidManifest.xml
是APK的配置文件 同时也是可以打开的
有三大功能:
1.工程信息
2.工程管理器
3.工程搜索
然后 工程搜索功能
这个 功能很强大
当我们进行搜索的时候 它是一条一条的列举出来 很方便 点击 即可跳转
历史记录管理
文本转换
字符编码
进行分析xml配置文件
<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tudou.android" platformBuildVersionCode="25" platformBuildVersionName="7.1.1">
前面是 版本 编码 和官网
重点是package是标签名
修改之后 要和<provider
进行对应
继续
<uses-permission
是权限的意思 访问的网络 存储等
这个 icon是图标的意思
android:icon="@drawable/icon"
android:label="@string/tudou_app_name"
这个是APP的名字
然后进行模拟器的安装
这边推荐逍遥模拟器和雷电模拟器
而且 要注意在本机安装 模拟器是吃CPU的
安装在虚拟机 卡的不要不要的。。。
实操一、(改APP名)
拿火柴人突击格斗.apk
进行举例
还是一样 直接丢进来
然后@string
是索引 我继续搜索app_name
最后发现APP的名字 都是指向了这个strings.xml
文件
进行修改 即可 修改之后 记得保存!
然后进行编译
丢到模拟器中进行查看
可以看到是成功的
实操二、(改APP图标)
然后下面进行修改图标 搞一个土豆视频
我随意截了一张图
是jpg的图像 这里 要去进行转换
千万不要自己直接改后缀,因为两者像素是不一样
可以去这里:https://app.xunjiepdf.com/img2png/
然后进行搜索
@drawable/icon
要找的不是这个
继续搜索icon
这里有太多的文件
继续添加后缀进行搜索
/icon.png
总共是6个
进行替换
其他几个也是一样
进行编译
编译失败了 我感觉是图片的问题
重新搞一张
这次成功了 还是建议找一张原本是png
的图片
进行安装查看图标
成功 替换图标
实操三、(去广告)
以火柴人APK为例
启动时候 发现了广告
直接丢进来
这个APP是很老的游戏了 但是广告还是最新的
因为网络的原因
开始分析静态文件中的权限部分
把NETWORK_STATE
和WIFI_STATE
这两部分先删除
那么 这个APP就获取不到网络 是不是就没有广告了?
其实不然 它变成了一个空页面 只是没有了内容
这里要了解一下:activity
只要MAIN
和LAUNCHER
结合在一起 并在一个activity内 那么就是最先跳出来的页面
那么我们可以把它删除 然后把下面那个页面 改为MAIN
和LAUNCHER
的组合 作为第一个跳转
记得保存
然后进行编译输出
安装尝试
可以看到直接就进来了
2.Android官网逆向助手少月版V2018
需要Java的环境
主要用的是这三个功能
3.jadx
这是一个反编译的工具
jadx -d out classes.dex
就可以将dex文件反编译成java文件
4.JEB
丢进去一个APK
按键Q可以进行:Smali代码和Java代码的转换
CTRL+B:进行断点(Smali代码下才可以)
Android调试工具
1.JEB
这里就不再阐述了
2.IDEA
然后 一路默认过去
3.IDA_Pro
因为是破解版 所以关闭杀软
安装完成
Android辅助工具
1.APK helper
丢一个APK进来 可以快速的看到包名
2.PKiD
可以快速的查壳
Android流量抓包
Fiddler
几大功能
清除目前所有的包
抓包
Capturing出现 是抓所有的包
点了之后 是只抓APP的包
再看另一个
Decode是进行http字节压缩 防止乱码
HTTPS抓包设置
这里的代理默认端口是:8888
建议不要默认 这边我改成9977
这里是调节 字体大小
然后关闭重新启动 就可以了
Fiddler抓websocks
static function OnWebSocketMessage(oMsg: WebSocketMessage
) {
// Log Message to the LOG tab
FiddlerApplication.Log.LogString(oMsg.ToString());
}
进行添加
然后抓到的websocks会在log中进行输出
HTTP Debugger Pro
burp
打开之后
进行设置代理服务器
这里是本机的IP
然后打开模拟器
进行设置
进入WLAN 左键点住
保存
当我点击 逍遥向导
已经开始了抓包
然后进行设置 抓HTTPS的包
进行下载证书
证书导入
弹出一个警告
然后继续操作
进行导出
是一个crt
的文件
直接拖进模拟器中来
点击进行安装
进行设置
设置完成 之后 提示已经安装a001
然后 打开浏览器 随意输入一个HTTPS
的网址 进行抓包
可以看到是可以的