安卓学习(一) – 作者:每天都要努力哇

18次阅读
没有评论

基础知识

前言

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

安卓学习(一) - 作者:每天都要努力哇

安卓学习(一) - 作者:每天都要努力哇

可以看到是可以的

来源:freebuf.com 2021-07-13 11:41:11 by: 每天都要努力哇

相关推荐: “兵不厌诈”?漏洞还是那些漏洞,攻击技术却层出不穷 – 作者:空城handsome

如今每天都能发现超过55万个新的恶意软件样本,企业如何避免系统漏洞暴露在这些网络威胁中成为了工作中的重中之重。尽管如此,许多人仍然让自己暴露在了风险之中。0day攻击的漏洞利用让人比较头疼,因为软件供应商也没有漏洞补丁。谷歌的一项研究显示,2020年有24个零…

正文完
 0