freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

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

基础知识

前言

安卓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_363224 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
移动攻防
andriod安全
FreeBuf_363224 LV.4
这家伙太懒了,还未填写个人描述!
  • 16 文章数
  • 106 关注者
实战案例分析:安卓逆向反调试
2021-11-02
安卓学习思路方法总结(七)
2021-09-16
安卓学习思路方法总结(六)
2021-08-30
文章目录