app攻防-二刷smail&破解VIP之demo篇

admin 2024年11月9日16:24:18评论36 views字数 2140阅读7分8秒阅读模式

作者:yueji0j1anke

首发于公号:剑客古月的安全屋

字数:1573

阅读时间:    15min

声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外

目录

  • 前言

  • 前置技术

  • 实战

  • 总结

0x01 前言

前段时间只是给大家讲了smali语法却没有实战中用到,因此出了这个专题

0x02 前置知识

1.虚拟机

在java中,java文件会被编译成.class字节码文件交由jvm运行翻译成机器码,再交由具体硬件进行实现

那在安卓中,对应的是java文件会被编译转换成dex字节码文件,最后打包成apk交由ART或者Dalvik进行运行,将dex文件转换成机器码交由具体硬件运行

安卓5.0之前使用的是一代虚拟机Dalvik,其采用的是jit方式即时编译,并且只支持32位cpu

之后使用的是ART,其采用的是预先编译(AOT),在虚拟环境直接运行机器码,运行速度快得多,且同时支持64位cpu

2.smail及其语法

smail是寄存器语言,由dex语言反编译而成

相关语法,这里就把之前的内容带给大家继续复习一下(当然也可以直接看实战)

基本数据类型

Smali数据类型 Java数据类型
V void
Z boolean
B byte
S short
C char
I int
J long
F float
D double

对象类型

Smali数据类型 Java数据类型
Lpackage/name/ObjectName; ObjectName
[I int[]

语法关键字

关键词 说明
.class 定义java类名
.super 定义父类名
.source 定义Java源文件名
.filed 定义字段
.method 定义方法开始
.end method 定义方法结束
.annotation 定义注解开始
.end annotation 定义注解结束
.implements 定义接口指令
.local 指定了方法内局部变量的个数
.registers 指定方法内使用寄存器的总数
.prologue 表示方法中代码的开始处
.line 表示java源文件中指定行
.paramter 指定了方法的参数
.param 和.paramter含义一致,但是表达格式不同

一般来说,打开smali文件,头三行的格式如下

.class <访问权限> [关键修饰字] <类名>;
.super <父类名>;
.source <源文件名>

类的成员变量,类似于private,public

.filed <访问权限> [关键修饰字]  <字段名>:<字段类型>

函数的声明格式

.method <访问权限> [关键修饰字]  <方法原型>
<.locals> <.registers> // 函数中非参数的变量的多少
[.param] // 方法参数
[.line]
<代码>
.end method

3.逆向关键点

如果要想改变程序逻辑结构,在smali代码中,有三种方法

1.修改判断
2.跳转逻辑
3.修改寄存器的值

4.寄存器

在smali里的所有操作都必须经过寄存器来进行:本地寄存器用v开头数字结尾的符号来表示,如v0、 v1、v2。参数寄存器则使用p开头数字结尾的符号来表示,如p0、p1、p2。特别注意的是,p0不一定是函数中的第一个参数,在非static函数中,p0代指“this",p1表示函数的第一个 参数,p2代表函数中的第二个参数。而在static函数中p0才对应第一个参数(因为Java的static方法中没有this方法)

0x03 实战

打开我们的test demo

app攻防-二刷smail&破解VIP之demo篇

这里显示请先充值大会员,那我们根据关键词搜索找到对应代码逻辑

首先我们把apk放入jadx进行反编译,方便我们进行查看

app攻防-二刷smail&破解VIP之demo篇

在jadx中,汉字一般被unicode编码了,所以我们 将 “大会员” 关键字进行unicode编码进行搜索,这里我采用的是改进版,就直接汉字搜了

app攻防-二刷smail&破解VIP之demo篇

整个逻辑如下

app攻防-二刷smail&破解VIP之demo篇

我们可以根据这个函数逻辑看smali代码

app攻防-二刷smail&破解VIP之demo篇

整个代码逻辑在这

1.修改判断

我们要直接执行一键三连操作,就需要绕过两个判断

1.大于等于10个硬币

2.是VIP

相关对应smail代码在这里

此处判断是否大于等于10,如果大于则跳转cond15

app攻防-二刷smail&破解VIP之demo篇

此处判断p是否0,如果是则跳转执行cond43 执行充值大会员弹窗操作

app攻防-二刷smail&破解VIP之demo篇

那修改逻辑很简单了,打开mt管理器进行修改

app攻防-二刷smail&破解VIP之demo篇

此处直接小于

app攻防-二刷smail&破解VIP之demo篇

此处直接不等于

app攻防-二刷smail&破解VIP之demo篇

反编译后直接安装,包过的啊

app攻防-二刷smail&破解VIP之demo篇

2.修改寄存器的值

app攻防-二刷smail&破解VIP之demo篇

直接令v0寄存器值为0,这样去比较的时候,永远会跳至cond_15的逻辑

随后执行判断vip的逻辑

app攻防-二刷smail&破解VIP之demo篇

直接让vip返回true即可

app攻防-二刷smail&破解VIP之demo篇

3.修改跳转逻辑

直接跳过第一个判断逻辑

app攻防-二刷smail&破解VIP之demo篇

改成直接执行cond15逻辑

app攻防-二刷smail&破解VIP之demo篇

并把下面vip判断逻辑omit掉

app攻防-二刷smail&破解VIP之demo篇

直接就进入到vip逻辑

0x04 总结

对于大多数小型+未加壳的应用,VIP功能点的判断绕过便是如此简单,但对于大型应用来说,则还需要涉及到包的sign值、数据库查询功能角色等一系列校验操作了,不单单只是安卓逆向,这个我们会在后面讲到。后期将会给大家带来更多安卓逆向的知识

参考链接: https://blog.csdn.net/AlunXZhou/article/details/134755054

原文始发于微信公众号(剑客古月的安全屋):app攻防-二刷smail&破解VIP之demo篇

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月9日16:24:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   app攻防-二刷smail&破解VIP之demo篇https://cn-sec.com/archives/3375920.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息