Android

基础知识

前言

安卓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_STATEWIFI_STATE这两部分先删除

那么 这个APP就获取不到网络 是不是就没有广告了?

其实不然 它变成了一个空页面 只是没有了内容

这里要了解一下:activity

只要MAINLAUNCHER结合在一起 并在一个activity内 那么就是最先跳出来的页面

那么我们可以把它删除 然后把下面那个页面 改为MAINLAUNCHER的组合 作为第一个跳转

记得保存

然后进行编译输出

安装尝试

可以看到直接就进来了

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的网址 进行抓包

可以看到是可以的

Last updated

Was this helpful?