记录一次某某虚拟机的逆向
导语
学了一段时间的XPosed,发现XPosed真的好强,只要技术强,什么操作都能实现...
这次主要记录一下我对这款应用的逆向思路
apk检查
-
使用MT管理器检查apk的加壳情况
-
发现是某数字的免费版本
-
直接使用frida-dexdump
-
脱下来后备用
应用分析
- 进入应用之后会发现里边含有
登录
会员
等模块 - 我们先不管登录的部分,先检查
会员
的使用场景,一般在会员
的使用场景或者显示场景中都会有检查是否是VIP
的业务逻辑,根据这个来加载显示不同的资源
会员
分析
-
通过对应用的检查发现在添加虚拟机设备的时候用到了
会员
权限
同时弹出一个对话框,应用也贴心的告诉我们VIP
的使用场景
-
打开算法助手,算法助手对应用进行了常见功能的Hook,最重要的是支持免费加固的Hook
-
将这3项勾选
-
重复1、2步,在日志中检查OnClick和弹窗是否有用的信息
-
很幸运,在这一步就获取有关的逻辑
-
且函数名称并没有被混淆,能够从调用堆栈读出以下逻辑:点击下载按钮->检查是否VIP->用户没有登录->显示购买VIP的弹窗
-
打开jadx将脱壳后的dex文件载入,搜索
checkVip
选择第一个函数,发现无有用信息,继续进入checkVip
函数
在此函数中发现getUserConf,即获取用户的配置
通过对此函数的阅读,得出此函数的返回值为UserBean
然后检查UserBean
-
很明显,有关VIP的数据都在此,使用XPosed来修改这些成员变量,即可达到对显示UI的修改,即使服务器对这些数据有校验也不影响,至少在UI层面已经成功了
抓包分析
-
使用抓包工具检查网络请求,当点击底部的导航栏的时候,应用会发送网络请求
通过检查getInfo
,获取一个Post请求的链接对此链接进行引用查询,发现有关用户的逻辑
对此链接进行引用查询,发现有关用户的逻辑阅读此函数,网络请求库可能为Retrofit,当请求成功的时候会将用户的信息保存起来并移除广告?同样也能得到UserBean
,这个关键的信息
编写插件
思路
- 通过对应用的分析可以得出一个关键的信息
getUserConf
getUserConf
函数右键->复制为XPosed片段
1 2 3 4 5 6 7 8 9 10 |
|
- 可以看到jadx为我们一键生成了有关的Hook代码,但是这样就行了吗?我可以告诉你,不行。别忘了,这是一个加壳的应用,即使它是一款免费的加壳
加壳应用Hook
通过对网上公开资料的查询,发现即使应用加固也需要在运行时进行还原修复,使用jadx打开加固的apk文件,找到attachBaseContext
1 2 3 4 5 6 7 8 9 |
|
继续编写
- 获取到正确的ClassLoader后,对
getUserConf
函数的返回值进行遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
-
Hook完成后,能够发现
nickName
是正确的,能够对应上UI的显示
-
接下来只需要对循环里的数据进行判断赋值,然后返回即可
1 2 3 4 5 6 7 8 9 10 |
|
- UI显示和下载功能
插件下载破解
获取到VIP
后,发现还有一个插件下载的逻辑没有效果
下载逻辑分析
-
当点击Root或者XPosed的时候,会提示加载失败
-
-
但是点击谷歌服务的时候却有效果,猜测是网络请求
-
打开抓包工具,通过对两者的对比,发现是其中少了一些数据,所以才会加载失败
-
在jadx中搜索getPluginUrl
,通过阅读此函数发现有2个匿名函数,failure
和success
-
使用jadx默认给我们的参数Hook不太行,这时候需要使用其他函数来获取
vu
1 2 3 4 5 6 7 8 9 10 11 |
|
- 通过对这两者的Hook,当点击
Root
插件按钮时会进入success
且参数为:
1 2 |
|
- 可以明显发现其中确实是少了一些数据,接下来只需要补齐下载链接即可,但是如何获取这个链接呢?
- 充值VIP获取其中的链接
- 扫描网站链接?或者找到一个函数获取?
- 猜测
- 上面2点显然不是我能够解决的,2333,那就通过对链接的猜测吧,根据能够下载的谷歌服务链接来看,root和xposed可能为:
http://xxx/xxx/plugin/android71root_plugin-64bit.zip'
http://xxx/xxx/plugin/android71xposed_plugin-64bit.zip'
- 通过一系列猜测,得出来正确的下载链接,MD5的话只需要在终端输入
md5 file
即可得到
- 阅读函数,检查参数发现具体的链接在
vu
中的data
,但是返回类型是T,这就比较麻烦了
- 这里采用一种比较麻烦的方法来修改:
- Hook
vu
类的m49633
函数获取返回结果 - 遍历返回结果的
Fields
- 找到含有
systemPluginResult
的field - 使用
field.getType()
获取到Class<?> jo4
- 使用
jo4.newInstance()
创建一个实例ret
- 再次遍历
ret.getDeclaredFields()
- 根据
pluginMd5
和pluginUrl
分别赋值到ret
中 - 最后使用
field.set(data, ret);
赋值即可 - 具体代码截图,
pluginMd5
和pluginUrl
是我获取的正确链接,就不公布了
相关文章:

记录一次某某虚拟机的逆向
导语 学了一段时间的XPosed,发现XPosed真的好强,只要技术强,什么操作都能实现... 这次主要记录一下我对这款应用的逆向思路 apk检查 使用MT管理器检查apk的加壳情况 发现是某数字的免费版本 直接使用frida-dexdump 脱下来后备用 应用分…...

upload-labs关卡7(基于黑名单的空格绕过)通关思路
文章目录 前言一、回顾上一关知识点二、靶场第七关通关思路1、看源代码2、空格绕过3、检查文件是否成功上传 总结 前言 此文章只用于学习和反思巩固文件上传漏洞知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去尚未授权的网站做渗透测试…...

CnosDB 在最近新发布的 2.4.0 版本中增加对时空函数的支持。
CnosDB 在最近新发布的 2.4.0 版本中增加对时空函数的支持。 概述 时空函数是一种用于描述时空结构和演化的函数。它在物理学、数学和计算机科学等领域中都有广泛的应用。时空函数可以描述物体在时空中的位置、速度、加速度以及其他相关属性。 用法 CnosDB 将使用一种全新的…...

python实现炒股自动化,个人账户无门槛量化交易的开始
本篇作为系列教程的引子,对股票量化程序化自动交易感兴趣的朋友可以关注我,现在只是个粗略计划,后续会根据需要重新调整,并陆续添加内容。 股票量化程序化自动交易接口 很多人在找股票个人账户实现程序化自动交易的接口࿰…...

推荐系统笔记--Swing模型的原理
1--Swing模型的引入 在 Item CF 召回中,物品的相似度是基于其受众的交集来衡量的,但当受众的交集局限在一个小圈子时,就会误将两个不相似的物品定义为相似; Swing 模型引入用户的重合度来判断两个用户是否属于一个小圈子ÿ…...

联想小新Pro14默认设置的问题
联想小新Pro14 锐龙版,Win11真的挺多不习惯的,默认配置都不符合一般使用习惯。 1、默认人走过自动开机。人机互动太强了; 2、默认短超时息屏但不锁屏,这体验很容易觉得卡机然后唤起,却又不用密码打开; 3…...
【洛谷 P5019】[NOIP2018 提高组] 铺设道路 题解(分治算法+双指针)
[NOIP2018 提高组] 铺设道路 题目背景 NOIP2018 提高组 D1T1 题目描述 春春是一名道路工程师,负责铺设一条长度为 n n n 的道路。 铺设道路的主要工作是填平下陷的地表。整段道路可以看作是 n n n 块首尾相连的区域,一开始,第 i i i …...

牛客刷题记录11.12
继承和组合 二进制数统计 1的个数 和 0 的个数...
NextJS开发:使用IconPark、Lucide图标库
IconPark、Lucide两个很不错的图标库,如果需要用到微信、阿里等国内logo可以使用IconPark,Lucide中没有包含这些内容。 安装IconPark npm install icon-park/react --save简单使用 import {Home} from icon-park/react;<Home/> <Home theme&…...

11.12总结
这一周主要写了个人中心的几个功能,资料修改,收货地址的创建和修改删除,还有主页界面和商品界面...

Gogs安装和部署教程-centos上
0、什么是 Gogs? Gogs 是一款极易搭建的自助 Git 服务。 Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windo…...

Unity中Shader雾效的实现方法一
文章目录 前言一、在片元着色器中使用如下公式计算最终的颜色 lerp(雾效颜色,物体颜色,雾效混合因子)1、获取雾效颜色2、物体的颜色一般通过纹理采样得到,此处用 1 代替测试3、获取 雾效混合因子(由 雾的距离 和 雾的浓度决定&am…...

Mac安装配置Tomcat,以及使用(详解)
目录 一、Tomcat下载: 1、左栏选择Tomcat版本 2、点击下载即可,任选其一 编辑3、下载好的文件夹放到用户名下即可(之前已经下载过,这里以Tomcat 8.5.88为演示),这里提供8.5.88的安装包: 二…...

Smart Link 和 Monitor Link应用
定义 Smart Link常用于双上行链路组网,提高接入的可靠性。 Monitor Link通过监视上行接口,使下行接口同步上行接口状态,起到传递故障信息的作用。 Smart Link,又叫做备份链路。一个Smart Link由两个接口组成,其中一个…...

【debug】解决Kali虚拟机开机黑屏,左上角光标一直闪动无法开机问题
做网络攻防实验时,突然Kali无法打开,遇到这个问题。。。。。。 遇到的问题 突然kali虚拟机变成如下黑屏,无法开机,左上角光标闪动,重启无效。 解决办法 在上图界面,按Ctrl F3(不同电脑快捷键…...
目标检测YOLO实战应用案例100讲-基于改进YOLO算法的道路交通目标检测(续)
目录 3.3 实验结果与分析 3.3.1 实验数据集 3.3.2 算法的评价指标 3.3.3 损失函数实验结果...
爬虫怎么伪装才更安全
随着网络技术的不断发展,爬虫技术也越来越成熟,爬虫伪装技术也随之得到了广泛应用。在爬虫伪装技术中,如何伪装成正常的浏览器行为,让目标网站无法辨别出爬虫的存在,是爬虫伪装技术的核心。下面,我将从以下…...
openssl+sha256开发实例(C++)
文章目录 一、 sha256介绍二、sha256原理三、openssl sha256实现 一、 sha256介绍 SHA-256(Secure Hash Algorithm 256-bit)是一种哈希算法,属于 SHA-2(Secure Hash Algorithm 2)家族的一员。SHA-256 产生的哈希值是一…...

【Bug】当用opencv库的imread()函数读取图像,用matplotlib库的plt.imshow()函数显示图像时,图像色彩出现偏差问题的解决方法
一,问题描述 我们在利用opencv的imread读取本地图像,进行一系列处理,但是发现用matplotlib库的imshow()函数显示的时候出现色彩改变,比如图像偏黄,偏红,偏蓝等等,但是对…...
通过顶顶通呼叫中心中间件玩转FreeSWITCH媒体流
怎么获取FreeSWITCH的媒体流是一个老生常谈的问题了,最常见的方法media_bug,我在2019年就做的FreeSWITCH对接ASR开源的例子https://gitcode.net/iyaosan/FreeSWITCH-ASR用的就是media_bug,对接ASR常见的方法还有通过mod_mrcp模块对接mrcp的asrserver。 …...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...