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

千方百技第八期|安卓逆向之不得不知的smali语言
安全玻璃盒_杭州孝道科技 2023-06-12 11:53:45 132870
所属地 浙江省

引言

在渗透app过程中,很多测试都无法进行,无法抓包,无法改数据(数据签名),数据加密等问题迭出。在平时使用各种app时,广告也总是层出不穷。
为了解决以上问题,TESEC安全研究院学习了安卓逆向的知识,以此篇与大家分享学习成果。

安卓逆向基础

依据作者目前对安卓逆向的理解,现可供用户编写使用的是c/c++(Native层)和java(java层),其分别对应smali和so文件。反编译操作就是对这两个层级代码进行分析和修改。

而其他的技术,如签名认证、加壳,都是app进行防护操作,加大逆向人员对app逆向后代码可读性、修改的难度,从而衍生出的去签名、脱壳等技术。

故暂拟定的学习方向如下
1.学习smali反编译及调试
2.学习so反编译及其调试
3.学习破解常见的签名认证
4.学习简单的脱壳技术

smali 介绍

Smali是一种Android应用程序汇编语言,可用于反汇编和重新打包Android应用程序。它是一种基于文本的格式,类似于Java字节码,易于阅读和编辑。使用Smali,开发人员可以更深入地了解Android应用程序的内部工作方式,从而更好地调试和优化应用程序。

Smali是在Dalvik虚拟机上运行的指令集的低级表示形式。与Java字节码不同,Smali是面向寄存器的,这使得它更加紧凑和高效。它还支持动态绑定、多态性和其他高级特性,使得开发人员可以编写复杂的Android应用程序。

以下是android 架构图
图片.png

Android4.4 版本前身是 Dalvik 虚拟机,4.4 版本开始引入 ART 虚拟机(Android Runtime)。在 4.4 版本上,两种运行时环境共存,可以相互切换,但是在 5.0 版本以后,Dalvik 虚拟机则被彻底的丢弃,全部采用 ART。

smali 基础语法

基本类型

基本类型和java与之对应
boolean Z 布尔型
byte B 字节型
short S 短整数型(16 位)
char C 字符型
int I 整数型
long L 长整数型(64 位)
float F 浮点型
double D 双精度型(64 位)
void V 空类型,仅用作返回类型
L 对象类型
[ 数组类型

const 常量操作

声明和赋值操作
const-<类型> 寄存器, 操作数

const-string v1, "test" // 定义字符串“test”并存到 v1 寄存器中

const/16 v1, 0x1e // 定义了16位的数据常量"0x1e",并存到v1寄存器中

IF 判断

if-gt vA, vB, :cond_" 如果vA大于vB则跳转到:cond_
if-ge vA, vB, :cond_" 如果vA大于等于vB则跳转到:cond_
if-lt vA, vB, :cond_" 如果vA小于vB则跳转到:cond_
if-le vA, vB, :cond_" 如果vA小于等于vB则跳转到:cond_
if-eq vA, vB, :cond_" 如果vA等于vB则跳转到:cond_
if-ne vA, vB, :cond_" 如果vA不等于vB则跳转到:cond_
if-lt vA, vB, :cond_" 如果vA小于vB则跳转到:cond_
if-ge vA, vB, :cond_" 如果vA大于等于vB则跳转到:cond_
if-gt vA, vB, :cond_" 如果vA大于vB则跳转到:cond_
if-le vA, vB, :cond_" 如果vA小于等于vB则跳转到:cond_
if-eqz vA, :cond_" 如果vA等于0则跳转到:cond_
if-nez vA, :cond_" 如果vA不等于0则跳转到:cond_
if-ltz vA, :cond_" 如果vA小于0则跳转到:cond_
if-gez vA, :cond_" 如果vA大于等于0则跳转到:cond_
if-gtz vA, :cond_" 如果vA大于0则跳转到:cond_
if-lez vA, :cond_" 如果vA小于等于0则跳转到:cond_

smali 静态分析

pc可用 jadx、jeb、gda 等进行分析,手机可用 mt管理器、 np管理器均可反编译smali文件,查看java代码

以上工具可到吾爱在线网盘下载使用
https://down.52pojie.cn/Tools/Android_Tools/

jadx 效果 如下:
图片.png

静态分析按正常审计的逻辑java即可。

smali 动态调试

方法一

android:debuggable="true"

方法二

XappDebug模块hook对应的app
https://github.com/Palatis/XAppDebug

启用模块后,使用lsp作用系统框架,重启生效。
图片.png

进入模块选择生效软件。
图片.png

开启调试

需要开启adb连接( 雷神模拟器不需要)
adb connect 127.0.0.1:62001

com.zj.wuaipojie 为包名, ui.MainActivity 为启动acvtivity
adb shell am start -D -n com.zj.wuaipojie/.ui.MainActivity

成功开启的截图
图片.png

使用jeb调试

ctrl + b 打断点

点击debug
图片.png

点击附上
图片.png

成功调试
图片.png

去广告实例

分析一个去广告的实例

启动广告

启动广告较为常见,一般都是一个activity进行倒计时,一般只需要修改倒计时为0即可
开启activity 记录
图片.png

检测启动广告的activity
com.mendon.riza.app.launch.LaunchActivity
图片.png

使用 javax搜索类名进行审计,查看postDelayed方法。虽然与广告时间不符,但经尝试就是该位置。
图片.png

直接搜索该类名进行修改。
图片.png

搜索 0x4e20(16进制的20000), 并修改为 0。
图片.png

去图片广告

图片.png

使用【开发助手】,【布局查看】。
图片.png

定位广告id
图片.png

使用 mt管理器,搜索id
图片.png

图片.png

反编译,并搜索id位置。
图片.png

修改上一个标签为 0dp
图片.png
图片.png

重新编译后,即可去广告。
图片.png

去付费广告

每次进入的时候都会加载该广告,其实就是一个acvtity
图片.png

根据之前的acvtity监控,发现每次都是跳转Main -> Pro,所以作者的思路是去Main找到创建的代码进行注释。
com.mendon.riza.app.settings.ProActivity
图片.png

经分析,没有找到直接创建ProActivity的代码。转变思路,能不能在ProActivity创建的时候直接关掉呢?

通过在onCreate中直接调用finish,直接关闭ProActivity。
invoke-virtual {p0}, Landroid/app/Activity;->finish()V

在最后添加finish方法。
图片.png

声明

本文出现的软件仅限用于学习和研究目的,不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

参考链接

https://www.bilibili.com/video/BV1wT411N7sV
https://www.52pojie.cn/thread-408645-1-1.html
https://github.com/tangsilian/My-Github-Stars

# 安卓逆向
本文为 安全玻璃盒_杭州孝道科技 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
安全玻璃盒_杭州孝道科技 LV.4
杭州孝道科技有限公司
  • 68 文章数
  • 7 关注者
云攻防之容器逃逸与k8s攻击手法
2023-04-10
千方百技第六期|MySQL注入绕过思路分享
2023-03-15
fastjson漏洞分析
2023-02-14
文章目录