freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

安卓学习(一)
2021-07-13 11:41:11

基础知识

前言

安卓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的打包流程

image-20210713101625323

Android开发工具

1.java环境安装

image-20210709173855560

image-20210709174401894

环境变量配置

image-20210709174528517

image-20210709174635240

验证安装

image-20210709174732277

image-20210709174741848

2.adt-bundle

这个是绿色版的 无需安装

image-20210709175534286

以命令形式调试安卓模拟器或者真机

ddms可以看模拟器进程的端口、log等输出的信息

3.Eclipse

创建一个项目

image-20210709175947942

image-20210709180131378

创建完成

image-20210709180150260

然后这里要做几个 配置

配置java编译环境

image-20210709180224007

image-20210709180255773

配置java运行环境

image-20210709180425202

要添加新java环境的 如下操作

image-20210709180450117

image-20210709180502118

image-20210709180517553

配置当前文件的编码

image-20210709180609777

要支持 中文的 选择UTF-8

image-20210709180654375

image-20210709180743760

配置Java代码提示

abcdefghijklmnopqrstuvwxyz

image-20210709181128325

创建一个class文件

勾选之后 会自动生成主函数

image-20210709181235738

进行简单的输出

image-20210709181340714

image-20210709181357526

Android逆向工具配置

1.AndroidKiller

这个工具的搜索功能 非常的强大!!!
集Apk反编译、Apk打包、Apk签名,编码互转,
ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一身,支持logcat日志输出,语法高亮,
基于关键字(支持单行代码或多行代码段)项目内搜索,可自定义外部工具;吸收融汇多种工具功能与特点,打造一站式逆向工具操作体验,大大简化了用户在安卓应用/游戏修改过程中的各类繁琐工作。

SDK安装

命令行模式 调试APK文件

image-20210709230135492

解压之后 目录下有这两个文件

然后进行环境变量的配置

image-20210709230348549

验证安装

image-20210709230428550

安装NDK

image-20210709231209583

image-20210709231246697

image-20210709231443719

进行安装AndroidKiller

image-20210709231807097

进行关联Java包

image-20210709232033216

APKtool加载

image-20210709232918202

image-20210709232936932

配置完毕 丢个apk进去

image-20210709233557726

然后呢 进行对比一下

image-20210709233701153

classes.dex--反编译成-->smali

classes2.dex--反编译成-->smali_classes2

AndroidManifest.xml是APK的配置文件 同时也是可以打开的

有三大功能:

1.工程信息

2.工程管理器

3.工程搜索

然后 工程搜索功能

这个 功能很强大

image-20210709234523205

当我们进行搜索的时候 它是一条一条的列举出来 很方便 点击 即可跳转

历史记录管理

image-20210709234614367

文本转换

image-20210709234628992

字符编码

image-20210709234643601

进行分析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进行对应

image-20210710002118501

继续

<uses-permission是权限的意思 访问的网络 存储等

image-20210710001429775

这个 icon是图标的意思

android:icon="@drawable/icon"

image-20210710001911350

android:label="@string/tudou_app_name"

这个是APP的名字

image-20210710002351847

然后进行模拟器的安装

这边推荐逍遥模拟器和雷电模拟器

而且 要注意在本机安装 模拟器是吃CPU的

安装在虚拟机 卡的不要不要的。。。

image-20210710002714967

image-20210710003750664

实操一、(改APP名)

火柴人突击格斗.apk进行举例

还是一样 直接丢进来

image-20210710232848356

然后@string是索引 我继续搜索app_name

image-20210710233009500

最后发现APP的名字 都是指向了这个strings.xml文件

image-20210710233059584

进行修改 即可 修改之后 记得保存!

image-20210710233153503

然后进行编译

image-20210710234227689

丢到模拟器中进行查看

image-20210710234252021

可以看到是成功的

实操二、(改APP图标)

然后下面进行修改图标 搞一个土豆视频

我随意截了一张图

image-20210710232449360

是jpg的图像 这里 要去进行转换

千万不要自己直接改后缀,因为两者像素是不一样

可以去这里:https://app.xunjiepdf.com/img2png/

然后进行搜索

@drawable/icon

image-20210710234914240

要找的不是这个

继续搜索icon

这里有太多的文件

image-20210710235219352

继续添加后缀进行搜索

/icon.png

image-20210711000639474

总共是6个

image-20210710235002808

进行替换

image-20210710235142467

其他几个也是一样

进行编译

image-20210711001118963

image-20210711001302095

编译失败了 我感觉是图片的问题

重新搞一张

palm_tree_PNG93355

这次成功了 还是建议找一张原本是png的图片

image-20210711001921411

进行安装查看图标

成功 替换图标

image-20210711002142356

实操三、(去广告)

以火柴人APK为例

image-20210713085553760

启动时候 发现了广告

直接丢进来

这个APP是很老的游戏了 但是广告还是最新的

因为网络的原因

开始分析静态文件中的权限部分

image-20210713090256123

NETWORK_STATEWIFI_STATE这两部分先删除

image-20210713092601482

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

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

这里要了解一下:activity

image-20210713090721509

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

image-20210713091925355

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

image-20210713092040627

记得保存

然后进行编译输出

image-20210713092714380

安装尝试

image-20210713092812984

可以看到直接就进来了

2.Android官网逆向助手少月版V2018

需要Java的环境

主要用的是这三个功能

image-20210709181939855

3.jadx

这是一个反编译的工具

image-20210709182252966

jadx -d out classes.dex

就可以将dex文件反编译成java文件

4.JEB

image-20210709182629452

image-20210709182838775

丢进去一个APK

按键Q可以进行:Smali代码和Java代码的转换

CTRL+B:进行断点(Smali代码下才可以)

Android调试工具

1.JEB

这里就不再阐述了

2.IDEA

image-20210709184725997

image-20210709184813557

然后 一路默认过去

image-20210709185155774

3.IDA_Pro

因为是破解版 所以关闭杀软

image-20210709194138835

image-20210709194229657

安装完成

image-20210709194425288

image-20210709194506520

Android辅助工具

1.APK helper

image-20210709194716307

丢一个APK进来 可以快速的看到包名

image-20210709194839030

2.PKiD

可以快速的查壳

image-20210709194924343

Android流量抓包

Fiddler

image-20210709195214988

image-20210709195303360

几大功能

清除目前所有的包

image-20210709195618865

抓包

image-20210709195710733

Capturing出现 是抓所有的包

点了之后 是只抓APP的包

再看另一个

image-20210709195804464

image-20210709195846415

Decode是进行http字节压缩 防止乱码

HTTPS抓包设置

image-20210709200024662

image-20210709200111265

image-20210709200123043

image-20210709200140521

这里的代理默认端口是:8888

image-20210709200217994

建议不要默认 这边我改成9977

这里是调节 字体大小

image-20210709200301319

然后关闭重新启动 就可以了

Fiddler抓websocks

static function OnWebSocketMessage(oMsg: WebSocketMessage
) {
 // Log Message to the LOG tab
 FiddlerApplication.Log.LogString(oMsg.ToString());
}

进行添加

image-20210709200530351

image-20210709200656060

然后抓到的websocks会在log中进行输出

HTTP Debugger Pro

image-20210711111238113

image-20210711111946079

burp

打开之后

进行设置代理服务器

image-20210711112505401

这里是本机的IP

然后打开模拟器

进行设置

image-20210711112732985

进入WLAN 左键点住

image-20210711112851951

image-20210711112943405

保存

当我点击 逍遥向导

已经开始了抓包

image-20210711113120606

然后进行设置 抓HTTPS的包

进行下载证书

image-20210711113242348

证书导入

image-20210711113349577

image-20210711113437566

弹出一个警告

image-20210711113532752

然后继续操作

进行导出

image-20210711113615534

是一个crt的文件

image-20210711113642184

直接拖进模拟器中来

image-20210711113809456

点击进行安装

image-20210711113847955

进行设置

image-20210711113911147

设置完成 之后 提示已经安装a001

image-20210711113948570

然后 打开浏览器 随意输入一个HTTPS的网址 进行抓包

image-20210711114315150

image-20210711114332316

可以看到是可以的

# android安全 # 移动安全 # Android # 安卓学习
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录