吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 43255|回复: 409
上一主题 下一主题
收起左侧

[Android 原创] 《安卓逆向这档事》三、初识smali,vip终结者

    [复制链接]
跳转到指定楼层
楼主
正己 发表于 2022-10-19 21:54 回帖奖励
本帖最后由 正己 于 2023-10-10 18:46 编辑


一、课程目标


1.了解JVM、Dalvik、ART
2.初识smali语法
3.实战修改smali

二、工具


1.教程Demo(更新)
2.MT管理器/NP管理器
3.雷电模拟器
4.jadx-gui
5.核心破解

三、课程内容


1.什么是JVM、Dalvik、ART

JVM是JAVA虚拟机,运行JAVA字节码程序
Dalvik是Google专门为Android设计的一个虚拟机,Dalvik有专属的文件执行格式dex(Dalvik executable)
Art(Android Runtime)相当于Dalvik的升级版,本质与Dalvik无异

2.smali及其语法

smali是Dalvik的寄存器语言,smali代码是dex反编译而来的。

关键字

名称 注释
.class 类名
.super 父类名,继承的上级类名名称
.source 源名
.field 变量
.method 方法名
.register 寄存器
.end method 方法名的结束
public 公有
protected 半公开,只有同一家人才能用
private 私有,只能自己使用
.parameter 方法参数
.prologue 方法开始
.line xxx 位于第xxx行

数据类型对应

smali类型 java类型 注释
V void 无返回值
Z boolean 布尔值类型,返回0或1
B byte 字节类型,返回字节
S short 短整数类型,返回数字
C char 字符类型,返回字符
I int 整数类型,返回数字
J long (64位 需要2个寄存器存储) 长整数类型,返回数字
F float 单浮点类型,返回数字
D double (64位 需要2个寄存器存储) 双浮点类型,返回数字
string String 文本类型,返回字符串
Lxxx/xxx/xxx object 对象类型,返回对象

常用指令

关键字 注释
const 重写整数属性,真假属性内容,只能是数字类型
const-string 重写字符串内容
const-wide 重写长整数类型,多用于修改到期时间。
return 返回指令
if-eq 全称equal(a=b),比较寄存器ab内容,相同则跳
if-ne 全称not equal(a!=b),ab内容不相同则跳
if-eqz 全称equal zero(a=0),z即是0的标记,a等于0则跳
if-nez 全称not equal zero(a!=0),a不等于0则跳
if-ge 全称greater equal(a>=b),a大于或等于则跳
if-le 全称little equal(a<=b),a小于或等于则跳
goto 强制跳到指定位置
switch 分支跳转,一般会有多个分支线,并根据指令跳转到适当位置
iget 获取寄存器数据

其余指令可用语法工具查询

定位方法:搜索弹窗关键字、抓取按钮id

例子:

//一个私有、静态、不可变的方法   方法名
.method private static final onCreate$lambda-2(Lkotlin/jvm/internal/Ref$IntRef;Lcom/zj/wuaipojie/ui/ChallengeSecond;Landroid/widget/ImageView;Landroid/widget/ImageView;Landroid/widget/ImageView;Landroid/view/View;)Z //(这里面是方法的参数)这里是方法返回值类型,表示布尔值类型,返回假或真
    .registers 7  //寄存器数量

    .line 33  //代码所在的行数
    iget p0, p0, Lkotlin/jvm/internal/Ref$IntRef;->element:I  //读取p0(第一个参数,参考寄存器知识)中element的值赋值给p0

    const/4 p5, 0x1  //p5赋值1

    const/16 v0, 0xa //v0赋值10,在16进制里a表示10

    if-ge p0, v0, :cond_15  //判断p0的值是否大于或等于v0的值(即p0的值是否大于或等于10),如果大于或等于则跳转到:cond_15

    .line 34  //以下是常见的Toast弹窗代码
    check-cast p1, Landroid/content/Context; //检查Context对象引用

    const-string p0, "请先获取10个硬币哦" //弹窗文本信息,把""里的字符串数据赋值给p0

    check-cast p0, Ljava/lang/CharSequence; //检查CharSequence对象引用

    invoke-static {p1, p0, p5}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast; 
    //将弹窗文本、显示时间等信息传给p1

    move-result-object p0  //结果传递给p0

    invoke-virtual {p0}, Landroid/widget/Toast;->show()V  //当看到这个Toast;->show你就应该反应过来这里是弹窗代码

    goto :goto_31  //跳转到:goto_31

    :cond_15 //跳转的一个地址

    invoke-virtual {p1}, Lcom/zj/wuaipojie/ui/ChallengeSecond;->isvip()Z  //判断isvip方法的返回值是否为真(即结果是否为1)

    move-result p0  //结果赋值给p0

    if-eqz p0, :cond_43 //如果结果为0则跳转cond_43地址

    const p0, 0x7f0d0018  //在arsc中的id索引,这个值可以进行查询

    .line 37
    invoke-virtual {p2, p0}, Landroid/widget/ImageView;->setImageResource(I)V //设置图片资源

    const p0, 0x7f0d0008

    .line 38
    invoke-virtual {p3, p0}, Landroid/widget/ImageView;->setImageResource(I)V

    const p0, 0x7f0d000a

    .line 39
    invoke-virtual {p4, p0}, Landroid/widget/ImageView;->setImageResource(I)V

    .line 40
    sget-object p0, Lcom/zj/wuaipojie/util/SPUtils;->INSTANCE:Lcom/zj/wuaipojie/util/SPUtils; 

    check-cast p1, Landroid/content/Context;

    const/4 p2, 0x2 //p2赋值2

    const-string p3, "level" //sp的索引

    invoke-virtual {p0, p1, p3, p2}, Lcom/zj/wuaipojie/util/SPUtils;->saveInt(Landroid/content/Context;Ljava/lang/String;I)V //写入数据

    goto :goto_50 //跳转地址

    :cond_43

    check-cast p1, Landroid/content/Context;

    const-string p0, "\u8bf7\u5148\u5145\u503c\u5927\u4f1a\u5458\u54e6\uff01" //请先充值大会员哦!

    check-cast p0, Ljava/lang/CharSequence;

    invoke-static {p1, p0, p5}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object p0

    invoke-virtual {p0}, Landroid/widget/Toast;->show()V

    :goto_50
    return p5  //返回p5的值
.end method //方法结束

//判断是否是大会员的方法
.method public final isvip()Z
    .registers 2

    const/4 v0, 0x0 //v0赋值0

    return v0 //返回v0的值

.end method

修改方法:修改判断、强制跳转、修改寄存器的值

3.寄存器

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

四、课后小作业


1.关掉视频自己复现三种方法
2.完成这个作业demo(因为最近实在是太太太忙了,绝对不是因为我懒,咕咕咕。搞懂这个demo那也基本上能理解本节课的内容)
丑小鸭师傅的demo
链接:https://pan.baidu.com/s/1cUInoi 密码:07p9
原文链接:教我兄弟学Android逆向02 破解第一个Android程序

五、反思&答疑


关于jadx搜不到大会员的unicode编码,这是因为我录视频之前在设置里把unicode的转义打开而导致的,像你们第一次安装jadx都是默认关闭这个选项的,所以能直接搜到大会员的汉字!!!

由于准备不是很充足,我感觉我讲的不是太好,多看看我列举参考文档有利于理解smali语法。

对于开发者而言,在打包应用时,最好对代码进行混淆,否则逆向人员轻而易举得进行Crack,或者说在写代码的时候就不要用isvip、getvip等易辨识的单词作为方法名

待更新

六、视频及课件地址


百度云
阿里云
PS:阿里云在维护,暂时看不到第三课内容
哔哩哔哩

PS:解压密码都是52pj,阿里云由于不能分享压缩包,所以下载exe文件,双击自解压

七、其他章节


《安卓逆向这档事》一、模拟器环境搭建
《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修改
《安卓逆向这档事》四、恭喜你获得广告&弹窗静默卡

八、参考文档


吾爱破解安卓逆向入门教程(三)---深入Smali文件
吾爱破解安卓逆向入门教程(四)---Smali函数分析
【原木文章】Android改造者之路-02.初探smali功法


免费评分

参与人数 128威望 +1 吾爱币 +158 热心值 +117 收起 理由
XQ101 + 1 + 1 用心讨论,共获提升!
CZQ521Dr + 1 谢谢分享!正在学习
island99 + 1 我很赞同!
l111111 + 1 用心讨论,共获提升!
xuanle + 1 + 1 谢谢@Thanks!
一只小凡凡 + 2 + 1 isvip哈哈哈
liufenyun + 1 + 1 谢谢@Thanks!
shengjiaohao + 1 + 1 我很赞同!
143106472 + 1 + 1 谢谢@Thanks!
红内裤 + 1 谢谢@Thanks!
刀口以后 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
eghost + 1 + 1 谢谢@Thanks!
佩格瓦拉 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
dx52mm + 1 + 1 我很赞同!
culprit + 1 + 1 用心讨论,共获提升!
x-t + 1 + 1 我很赞同!
jinzhao666 + 1 + 1 热心回复!
ULL + 1 + 1 谢谢@Thanks!
yakouwei + 1 + 1 谢谢@Thanks!
dincia + 1 谢谢@Thanks!
zpzpzp1024 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mingbaijun + 1 + 1 看了3遍,终于学会了
没茅台瓶酒也行 + 1 + 1 我很赞同!
aliez114 + 1 + 1 谢谢@Thanks!
sx2960 + 1 + 1 谢谢@Thanks!
snailli1998 + 1 + 1 谢谢@Thanks!
miaomiaomao + 1 谢谢@Thanks!
Xiaoshi541 + 1 + 1 期期收藏系列
uniqueElven + 1 + 1 我很赞同!hahaha,开头的图片总是我内心最真实的写照
y21 + 1 太强了
zypcl + 1 + 1 谢谢@Thanks!
notimenosee + 1 谢谢@Thanks!
hazhou + 1 + 1 热心回复!
Fxizenta + 1 + 1 我很赞同!
梦初归处 + 1 谢谢@Thanks!
UserElderPea + 1 + 1 谢谢@Thanks!
狸梓绣 + 1 + 1 谢谢@Thanks!
丁宝振 + 1 我很赞同!
nekous + 1 + 1 谢谢@Thanks!
yeyinan5364 + 1 我很赞同!
DecNie + 1 + 1 谢谢@Thanks!
Supremesir + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
chinablank + 1 + 1 谢谢@Thanks!
wuaihaizhan9527 + 1 + 1 感谢大佬热心回复
zlnxlzht + 1 + 1 热心回复!
下一站左转 + 1 + 1 谢谢@Thanks!
Mofecx + 1 + 1 谢谢@Thanks!
徵羽 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
moonlight7 + 1 + 1 谢谢@Thanks!
moguang + 1 + 1 大佬的教程真的是很详细啊
悠洋 + 1 + 1 用心讨论,共获提升!
BaiLanDDOS + 1 + 1 用心讨论,共获提升!
Dioter + 1 + 1 谢谢@Thanks!
Baidashan + 1 谢谢@Thanks!
kosmos4134 + 1 + 1 谢谢@Thanks!
菜鸟小宝 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
qwe1235888 + 1 我很赞同!
lin2lin3lin5 + 1 + 1 我很赞同!
xiaotian35 + 1 + 1 我很赞同!
weixu + 1 + 1 谢谢@Thanks!
zy1234 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
pfl123 + 1 + 1 谢谢@Thanks!
神之名 + 1 + 1 谢谢@Thanks!
xiuqidou + 1 + 1 谢谢@Thanks!
woshicp + 1 + 1 热心回复!
小菜鸟一枚 + 1 + 1 用心讨论,共获提升!
chongciyibai + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
yydxh + 1 + 1 我很赞同!
selimzou + 1 + 1 我很赞同!
不妥协 + 1 + 1 我很赞同!
chaung + 1 + 1 我很赞同!
icdiw + 1 我很赞同!
classmain + 1 + 1 鼓励转贴优秀软件安全工具和文档!
VAabcjjsw + 1 + 1 我很赞同!
lumenghao + 1 + 1 用心讨论,共获提升!
笙若 + 1 + 1 谢谢@Thanks!
零如风 + 1 + 1 谢谢@Thanks!
芽衣 + 2 + 1 用心讨论,共获提升!
gglar + 1 + 1 谢谢@Thanks!
xiaocaiji112233 + 1 感谢大佬!
supercilious + 1 + 1 用心讨论,共获提升!
lookerJ + 1 + 1 热心回复!
CXR + 1 + 1 热心回复
ailang + 1 + 1 谢谢@Thanks!
keyyan + 1 + 1 顶起来,支持优质教程
从来不想 + 1 + 1 热心回复!
soenluzy + 1 + 1 我很赞同!
、神通广大 + 1 + 1 我很赞同!
Caraciold_Jr + 3 + 1 谢谢@Thanks!
haili4345 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wbw1995 + 1 + 1 用心讨论,共获提升!
allspark + 1 + 1 用心讨论,共获提升!
Chenda1 + 1 + 1 我很赞同!
请不要和我互动 + 1 + 1 速速更新第四集!!不要让我求你
独行风云 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
溜玩音乐 + 3 + 1 谢谢@Thanks!
AngMer + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
BUG丶丶 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
OmegaMolecule + 2 + 1 让11000CB增加到11002CB
xin253950 + 1 给我冲!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

来自 2#
 楼主| 正己 发表于 2022-10-19 21:56 |楼主
本帖最后由 正己 于 2022-10-19 21:59 编辑

可恶啊,居然嘴瓢了这么多次
第四课进度:

点评

斗图比教程做的还好……  详情 回复 发表于 2022-10-19 22:13
推荐
weixu 发表于 2022-10-27 22:54
作业:不知道goto是否符合要求?

屏蔽掉第147行 #if-eqz p0, :cond_43,

让上面的第124行if-ge p0, v0, :cond_15修改为:“goto :cond_15”


这样程序就可以自上而下顺利一键三连了,

点评

总算看到一个标准答案了哈哈  详情 回复 发表于 2022-10-27 23:19

免费评分

参与人数 4吾爱币 +6 热心值 +4 收起 理由
CZQ521Dr + 1 666!
softsunshine23 + 1 + 1 我很赞同!
O丶ne丨柒夜彡 + 1 + 1 谢谢@Thanks!
正己 + 4 + 1 赞一个!!!

查看全部评分

推荐
Hmily 发表于 2022-10-19 22:13
正己 发表于 2022-10-19 21:56
可恶啊,居然嘴瓢了这么多次
第四课进度:

斗图比教程做的还好……

点评

这也是本教程一个特色吧  详情 回复 发表于 2022-10-19 22:40
推荐
 楼主| 正己 发表于 2022-10-27 16:59 |楼主
zw0476sky 发表于 2022-10-27 16:14
有人问我正已究竟是哪里好,这么多天,我还忘不掉,秋风再美也比不上他的妙,没见过他技术的人,不会明了

名字都打错了,你个假粉
推荐
 楼主| 正己 发表于 2023-10-13 18:28 |楼主
cenoser795 发表于 2023-10-13 15:32
核心破解        这个APP的作用是什么呢

无视签名安装,降级安装
推荐
 楼主| 正己 发表于 2023-6-20 22:10 |楼主
liufenyun 发表于 2023-6-20 19:26
怎么学习才能记得牢靠啊!看完之后就忘了。

做好笔记,多实战
推荐
 楼主| 正己 发表于 2022-10-27 00:04 |楼主
wuaihaizhan9527 发表于 2022-10-26 23:24
求助大佬,我操作了很多遍,也重装过模拟器。但是每次安装“核心破解.apk”之后不会弹任何提示,手动点击图 ...

Lsp框架里没激活吧,找个Lsp框架的app安装一下,然后在里面把模块激活一下
推荐
 楼主| 正己 发表于 2024-3-5 09:17 |楼主
yjmb 发表于 2024-3-5 09:16
发现了一个现象,就是不管如何命名 goto_xx,保存并编译后再打开,变量名就都变成了 goto_1c, 请问这个是为 ...

这个是根据dex文件里的代码行数决定的
推荐
 楼主| 正己 发表于 2023-1-6 15:58 |楼主
Poorwood 发表于 2023-1-6 11:03
建议加个适用条件哈,我之前搞得一个小app。他是否是会员,走的是服务器,服务器进行用户鉴权。如果是这种 ...

谢谢,这个服务器验证的拿到token也能实现越权
推荐
爱飞的猫 发表于 2022-10-20 01:48

或者说在写代码的时候就不要用isvip、getvip等易辨识的单词作为方法名

用黑话写很容易让代码变成 💩 山

不如让混淆器后期处理的时候给力一点。

点评

所以推荐控制流混淆  详情 回复 发表于 2022-10-20 08:15
5#
Momsg 发表于 2022-10-19 22:17
前排支持
6#
xiaolong23330 发表于 2022-10-19 22:22
Hmily 发表于 2022-10-19 22:13
斗图比教程做的还好……

己己是花心思了的
7#
shagua 发表于 2022-10-19 22:28
感谢大佬的教程,受益匪浅!
头像被屏蔽
8#
随便去取 发表于 2022-10-19 22:39
提示: 作者被禁止或删除 内容自动屏蔽
9#
 楼主| 正己 发表于 2022-10-19 22:40 |楼主
Hmily 发表于 2022-10-19 22:13
斗图比教程做的还好……

这也是本教程一个特色吧
10#
gebilaodajiu 发表于 2022-10-19 23:00
终于等到你,还好我没放弃,爱你大佬
11#
xiaotian1339 发表于 2022-10-19 23:07
本帖最后由 xiaotian1339 于 2022-10-19 23:11 编辑

终于等到你
[阿里云第三节目录是空的欸]

点评

好像是阿里云整顿,先看百度网盘,或者明天看哔哩哔哩  详情 回复 发表于 2022-10-19 23:40
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 12:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表