|
|
本帖最后由 小杰v 于 2025-9-4 01:27 编辑
然后我们打开mt管理器创建一个文件夹,作为中枢,再打开termux,我们更新或者安装一下pip以防万一
输入
pkg install python-pip
pkg update && pkg upgrade -y
pkg install python python-pip -y
等更新或者安装完
如果在途中遇见
这样的提示
输入y(yes的意思)就行了
安装完成,输入cd /storage/emulated/0/逆向/
(这里我根目录之后创建的是名为逆向的文件夹,要以你自己命名的文件夹为基准)
如果提示没有权限
手动获取
然后输入
pip install /storage/emulated/0/逆向/hbctool-0.1.5-96-py3-none-any.whl
进行安装hbctool-0.1.5-96-py3-none-any.whl注意,这里的whl一定要是我们修改后的版本,官方版本待会破解会报错
到了这步,我们就成功安装了逆向插件了
接下来我们可以输入 hbctool --help了解一下hbctool插件
我们得知
disasm是反汇编
asm是编译反汇编
那么,我们开始上实战,讲apk/assets/内的index.android.bundle复制到我们中枢目录,然后
在Termux内输入
hbctool disasm index.android.bundle 反汇编
这里 意思是,反汇编index.android.bundle然后将反汇编后内容定向到反汇编文件夹内
等待加载完成后,我们再会到mt管理器
可以看见新增了一个名为反汇编目录
点进去string.json是字符表,这里有很多资源id可以在内查看
instruction.hasm就是源码,也是我们要修改的
我们首先打开string.json
平时我们,搜索id,资源一般都是找vip,所以我们搜索,vip,发现有很多带有vip的字符,
我们把常见的字符列举一下
isvip issvip getvip isLogin svip vip checkvip checkisvip getisvip等等
本来搜索isvip,但是第一个出现的是checkisvip这个字符,让我们回到播放,可以看见,是一个激励检测,那么,我们改来试试?
打开instruction.hasm忘记,搜索checkisvip
文件很大,mt管理器分为了3部分
第一部分,我们可以看见有四个内容
前两个是放置字符,那么后面两个
就比较可疑了,尤其是最后一个,我调到第二部分一看,果然,逻辑基本差不多,那么,就在这相同的改,首先我们分析一下第一个
Function<?anon_0_>7080(1 params, 12 registers, 0 symbols):
StartGenerator
ResumeGenerator Reg8:0, Reg8:1
JmpTrue Addr8:68, Reg8:1
GetEnvironment Reg8:1, UInt8:4
LoadFromEnvironment Reg8:3, Reg8:1, UInt8:0
LoadFromEnvironment Reg8:2, Reg8:1, UInt8:1
LoadConstUInt8 Reg8:1, UInt8:14
GetByVal Reg8:1, Reg8:2, Reg8:1
LoadConstUndefined Reg8:2
Call2 Reg8:1, Reg8:3, Reg8:2, Reg8:1
GetById Reg8:1, Reg8:1, UInt8:1, UInt16:17392
; Oper[3]: String(17392) 'checkIsVip'
Call1 Reg8:1, Reg8:1, Reg8:2
SaveGenerator Addr8:4
Ret Reg8:1
ResumeGenerator Reg8:1, Reg8:3
JmpTrue Addr8:20, Reg8:3
JmpFalse Addr8:14, Reg8:1
GetEnvironment Reg8:3, UInt8:3
LoadFromEnvironment Reg8:3, Reg8:3, UInt8:10
Call1 Reg8:3, Reg8:3, Reg8:2
CompleteGenerator
Ret Reg8:2
CompleteGenerator
Ret Reg8:1
CompleteGenerator
Ret Reg8:0
EndFunction
我们解刨为流程图
A[Start] --> B[StartGenerator]
B --> C[ResumeGenerator]
C --> D{状态为真?}
D -->|是| E[跳转到恢复点2]
D -->|否| F[GetEnvironment]
F --> G[加载环境变量0,1]
G --> H[LoadConst 14]
H --> I[GetByVal - 获取array[14]]
I --> J[Call2调用]
J --> K[GetById - 获取checkIsVip方法]
K --> L[Call1调用checkIsVip]
L --> M[SaveGenerator]
M --> N[Ret - 第一次返回]
E --> O[ResumeGenerator]
O --> P{状态为真?}
P -->|是| Q[JumpTrue]
P -->|否| R[JumpFalse]
Q --> S[GetEnvironment]
S --> T[加载环境变量10]
T --> U[Call1调用]
U --> V[CompleteGenerator]
V --> W[Ret - 第二次返回]
R --> X[CompleteGenerator]
X --> Y[Ret - 第三次返回]
N --> Z[End]
W --> Z
Y --> Z
可以很直观的看见
第一次调用: 执行主要逻辑,调用某个对象的checkIsVip方法,然后暂停
第二次调用: 从上次暂停点恢复,执行一些清理,然后暂停
那么,在前面的准备做完,Reg8:1 保存的是 Call2 的返回值
GetById Reg8:1, Reg8:1, UInt8:1, UInt16:17392
; 把对象的属性 'checkIsVip' 取出来,放回 Reg8:1
Call1 Reg8:1, Reg8:1, Reg8:2
; → 调用 checkIsVip(undefined) → 结果仍在 Reg8:1
SaveGenerator Addr8:4
Ret Reg8:1
所以,我们只需要给返回对象覆盖,把true直接写入Reg8:1里面储存,这样就大功告成了,所以Reg8:1 仍是 Call2 的返回对象
我们将GetById Reg8:1, Reg8:1, UInt8:1, UInt16:17392
删除替换为
LoadConstTrue Reg8:1
这样就直接把布尔常量 true 写入 Reg8:1
以此类推,我们打开第二页,第三页也这样修改即可,然后修改保存,我们再编译回去
打开Termux
cd /storage/emulated/0/逆向/
(如果后台还在就忽略cd这一步)
再次输入
hbctool asm 反汇编 index.android.bundle改
如果没有报错,那么/storage/emulated/0/逆向/反汇编/路径会多一个index.android.bundle改的文件,将其重命名为index.android.bundle覆盖原来安装包的即可
然后签名安装
没错,我们就去除会员了,剩下布局广告跑马灯等等请你们研究或者参考论坛教程,因为此类教学已经很多了
最后就是本篇保姆间教学可能不怎么严谨,随手写的,然后就是论坛
@redblack25的思路
以下是他提供的其他布局修改思路
{
"id": 11745,
"isUTF16": true,
"value": "96997598" 首页
},
{
"id": 11554,
"isUTF16": true,
"value": "92634c889c69" 排行榜
},
{
"id": 11326,
"isUTF16": true,
"value": "8f792952" 福利
},
{
"id": 5852,
"isUTF16": false,
"value": "VIP"
},
{
"id": 11126,
"isUTF16": true,
"value": "11628476" 我的
},
{
"id": 27061,
"isUTF16": false,
"value": "bannerAd"
},
{
"id": 3719,
"isUTF16": false,
"value": "AnnouncementBanner"
},
{
"id": 7676,
"isUTF16": false,
"value": "vod_feedback" 【ex.png】
},
{
"id": 10300,
"isUTF16": false,
"value": "home_get_coupon_notice" 【2b.png】
},
{
"id": 10302,
"isUTF16": false,
"value": "home_get_vip_notice" 【 Di.png】
},
// 轮播图
Function<CarouselScreen>22308(1 params, 23 registers, 1 symbols)
// 会员 【true】
checkisvip
//抓包检测 【false】
isAppProxyEnabled
isProxyEnabled
//首页通知 【fasle】
关键词 notices,show
//走马灯
UInt16:11560
// 底部导航布局
Function<TabNavigator>5009(1 params, 20 registers, 0 symbols)
// 首页横幅布局
Function<HomeOperationSpace>22639(1 params, 27 registers, 2 symbols)
好了,今天教学就到这里,看完不点赞jj小5cm |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
-
查看全部评分
总评分:好评 +2
金币 +7
|