安卓逆向-校验的N次方-签名校验对抗、PM代理、IO重定向(暑期学习day5)

本文最后更新于 2026年7月14日 晚上

暑期学习day5

依旧迷茫,不知道可以做出点什么有意义的东西。

机器学习(也称统计学习)

统计学习(有监督)

  1. 泛化误差是关于f的期望风险;注意区分期望风险与经验风险,一般用经验风险来估计期望风险,其误差就是泛化误差,泛化误差的上界由训练误差(经验风险)+一个参数组成,以Hoeffding不等式在损失函数取值[0,1]时推导
  2. 生成模型学习数据整体的规律,需要的数据量大,还原联合概率P(X,Y)收敛更快,判别模型直接学习某个特征,提取特征进行判别。
  3. 分类问题(输出为离散),标注问题(输出为序列,根据语义标注标签),回归问题(预测输入与输出的关系)。分类为核心,其他为分类的推广。
  4. 精确率是预测对的正类/所有正类预测,召回率是预测对的正类/样本中实际的正类。(关注的类为正类,其他为负类)

其他

安卓逆向

第五课课后作业

没注意还有这个,做一下

1
android:debuggable="true"

从xml可以看,但是jeb这儿的层级也能看到

image-20260714155345877

image-20260714155451582

1
adb shell am start -D -n com.droider.crackme0201/.MainActivity

先随便试

image-20260714155900559

提示无效注册名,搜索相关调用
image-20260714160154009

checkSN中将username哈希后取偶数位进行校验

image-20260714160634252

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

image-20260714162354308

第六课校验的N次方-签名校验对抗、PM代理、IO重定向

  • 新的开始,从这里开始是新学而不是复习了,会记录的细一点。

常见的校验

签名校验、dexcrc校验、apk完整性校验、路径文件校验、root检测、模拟器检测、反调试检测、frida检测

  1. 被发现签名后调用exit闪退,找到对应的位置,把exit、finish之类的函数注释掉

  2. 应用签名监听,找到后逻辑取反或将对比的值改为改后的值

  3. PackageManagerService(简称PMS),是Android系统核心服务之一,处理包管理相关的工作,常见的比如安装、卸载应用等(已过时)

  4. io重定向,指A读B

  5. 正则替换赋值

    1
    2
    (.*) .*
    const/4 $1 0x1
  6. mt开源了svc获取签名的方法

    在软件安全、逆向工程和系统底层分析领域,“SVC”是一个CPU指令。它是ARM架构处理器中的“Supervisor Call”(监督者调用)指令。

    • 作用:它允许用户态程序主动触发“软中断”,从而切换到内核态,请求操作系统执行文件操作、内存分配等特权级任务。
    • 重要性:这是Linux系统系统调用 (System Call) 的底层实现方式之一。一些高级的安全防护(如反调试、签名校验)会直接使用SVC指令,因为它比常规函数调用更难被 Hook。

先进行签名后,打开会白屏

image-20260714172708942

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

image-20260714173407823

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

image-20260714173918804

image-20260714174203999

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

image-20260714174358381

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

image-20260714174633956

image-20260714174651165

mt管理器导航栏切换
image-20260714174731086

校验通过
image-20260714174833245

这是对于应用签名监听的读取
image-20260714174955825

mt管理器打开,复制为base64,要从原包的,然后pm往pm代理里写入,改上去对应的方法(教程说该方法已过时,就先不去试了)

api校验跟第一步一样,改值就行

image-20260714175759060

image-20260714175852570

image-20260714175921910

疑问:把旧的签名值改为了新的,为什么值不变。

搜索看了看:虽然叫签名校验,但是这里检测的是证书指纹,不是生成的摘要。

接下来crc,忘记了,以为到io重定向了,去看眼视频改逻辑。。。就是io重定向,没记错(补充,io重定向用于打开与检测本文件的)

image-20260714203435672

从check crc这里,查找调用处

image-20260714192946293

校验之前加入该代码。

1
2
3
4
5
6
7
sget-object p10, Lcom/zj/wuaipojie/util/ContextUtils;->INSTANCE:Lcom/zj/wuaipojie/util/ContextUtils;  

invoke-virtual {p10}, Lcom/zj/wuaipojie/util/ContextUtils;->getContext()Landroid/content/Context;

move-result-object p10

invoke-static {p10}, Lcom/zj/wuaipojie/util/SecurityUtil;->hook(Landroid/content/Context;)V

数据目录1新建files,把原包放进去,发现crc过了,hash没过

image-20260714193707376

重新安装了一下原包,原包的hash校验就是不通过的(那怪不得了)

image-20260714194019336

查找用例可以看这里

image-20260714194625070

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

image-20260714195030756

追溯到这个serviceCreator的地址已经失效了,所以无反馈,本质是要从这里模拟后端来获取对比的hash(有空自己创一个弄个hash试试,待办),下面是获取的方法,即具体对应的文件。

image-20260714200831151

so层的校验调用了这里,但是没有细讲怎么改,只说用np或mt一键去除,mt没会员,np的目前旧版本的免费的都不行,后两个程序崩溃,前面的通不过校验

image-20260714204923173

image-20260714202531739

该so,把这里改为1

image-20260714204101219

修改so文件后校验通过

image-20260714205157491

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

image-20260714210013546

终止时间
image-20260714210117071

钻石数量记得是让正则,但是具体怎么弄忘了,再看一眼

查找调用getvip_coin的函数,没有使用的

image-20260714210816015

赋值搜索这个值
image-20260714210854659

选择正则表达式

1
iget (.*) .* Lcom/zj/wuaipojie/ui/SmaliLearn;->vip_coin:I

在搜索到的结果中替换

1
const/4 $1 0x1

image-20260714211401105

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

image-20260714211451390

文献

pass


安卓逆向-校验的N次方-签名校验对抗、PM代理、IO重定向(暑期学习day5)
https://xyyr-c.github.io/2026/07/14/暑期学习day5/
作者
xyyr
发布于
2026年7月14日
许可协议