安卓逆向-校验的N次方-签名校验对抗、PM代理、IO重定向(暑期学习day5)
本文最后更新于 2026年7月14日 晚上
暑期学习day5
依旧迷茫,不知道可以做出点什么有意义的东西。
机器学习(也称统计学习)
统计学习(有监督)
- 泛化误差是关于f的期望风险;注意区分期望风险与经验风险,一般用经验风险来估计期望风险,其误差就是泛化误差,泛化误差的上界由训练误差(经验风险)+一个参数组成,以Hoeffding不等式在损失函数取值[0,1]时推导
- 生成模型学习数据整体的规律,需要的数据量大,还原联合概率P(X,Y)收敛更快,判别模型直接学习某个特征,提取特征进行判别。
- 分类问题(输出为离散),标注问题(输出为序列,根据语义标注标签),回归问题(预测输入与输出的关系)。分类为核心,其他为分类的推广。
- 精确率是预测对的正类/所有正类预测,召回率是预测对的正类/样本中实际的正类。(关注的类为正类,其他为负类)
其他
安卓逆向
第五课课后作业
没注意还有这个,做一下
1 | |
从xml可以看,但是jeb这儿的层级也能看到

1 | |
先随便试

提示无效注册名,搜索相关调用
checkSN中将username哈希后取偶数位进行校验

这个就是取用户名md5的偶数位作为验证码,最后结果应该赋值在v6,但是虚拟机没显示这个变量的值。

第六课校验的N次方-签名校验对抗、PM代理、IO重定向
- 新的开始,从这里开始是新学而不是复习了,会记录的细一点。
常见的校验
签名校验、dexcrc校验、apk完整性校验、路径文件校验、root检测、模拟器检测、反调试检测、frida检测
被发现签名后调用exit闪退,找到对应的位置,把exit、finish之类的函数注释掉
应用签名监听,找到后逻辑取反或将对比的值改为改后的值
PackageManagerService(简称PMS),是Android系统核心服务之一,处理包管理相关的工作,常见的比如安装、卸载应用等(已过时)
io重定向,指A读B
正则替换赋值
1
2(.*) .*
const/4 $1 0x1mt开源了svc获取签名的方法
在软件安全、逆向工程和系统底层分析领域,“SVC”是一个CPU指令。它是ARM架构处理器中的“Supervisor Call”(监督者调用)指令。
- 作用:它允许用户态程序主动触发“软中断”,从而切换到内核态,请求操作系统执行文件操作、内存分配等特权级任务。
- 重要性:这是Linux系统系统调用 (System Call) 的底层实现方式之一。一些高级的安全防护(如反调试、签名校验)会直接使用
SVC指令,因为它比常规函数调用更难被 Hook。
先进行签名后,打开会白屏

算法助手打开log捕获,拦截应用退出与防止应用闪退、读取应用签名监听,日志中找到结束程序拦截。

checksign后会exit,在.line57处注释掉


检查第一步检查sign的逻辑,提取了包里的标志,base64编码后与原本的signature对比

找到log.e的sign值,修改原本的sign


mt管理器导航栏切换
校验通过
这是对于应用签名监听的读取
mt管理器打开,复制为base64,要从原包的,然后pm往pm代理里写入,改上去对应的方法(教程说该方法已过时,就先不去试了)
api校验跟第一步一样,改值就行



疑问:把旧的签名值改为了新的,为什么值不变。
搜索看了看:虽然叫签名校验,但是这里检测的是证书指纹,不是生成的摘要。
接下来crc,忘记了,以为到io重定向了,去看眼视频改逻辑。。。就是io重定向,没记错(补充,io重定向用于打开与检测本文件的)

从check crc这里,查找调用处

校验之前加入该代码。
1 | |
数据目录1新建files,把原包放进去,发现crc过了,hash没过
重新安装了一下原包,原包的hash校验就是不通过的(那怪不得了)
查找用例可以看这里

逐层找调用,最后找到这里获取hash

追溯到这个serviceCreator的地址已经失效了,所以无反馈,本质是要从这里模拟后端来获取对比的hash(有空自己创一个弄个hash试试,待办),下面是获取的方法,即具体对应的文件。
so层的校验调用了这里,但是没有细讲怎么改,只说用np或mt一键去除,mt没会员,np的目前旧版本的免费的都不行,后两个程序崩溃,前面的通不过校验


该so,把这里改为1

修改so文件后校验通过

至尊会员,改isvip的赋值为0x63

终止时间
钻石数量记得是让正则,但是具体怎么弄忘了,再看一眼
查找调用getvip_coin的函数,没有使用的

赋值搜索这个值
选择正则表达式
1 | |
在搜索到的结果中替换
1 | |

点击验证后正常出现,结束!

文献
pass