返回列表 发新帖

【逆向进阶】更高难度的so层签名校验?svc!

  [复制链接]

16

主题

1778

回帖

1万

积分

博士生

阿巴阿巴

Rank: 7Rank: 7Rank: 7

金币
2219
好评
244
信誉
190
发表于 2025-2-16 13:31:09 | 显示全部楼层 | 阅读模式  来自 贵州
前言:本贴的软件校验并未完全过完,因为最后的校验的部分的代码实在是没找到(应该是数据包的问题),静态分析太困难,frida和ida动态调试我目前的手机有问题搞不了,索性只能研究一半发出来给大家分析一下前半部分的签名校验,如果可以的话欢迎大佬指点一二。

准备工具:
ida7.7
任意一个java反编译工具(MT,jeb,jadx)
任意一个日志查看器(Android studio,异常跟踪)


在实战开始之前,我们需要先了解一下什么是svc指令?什么又是syscall?
SVC 是ARM 架构中用于触发系统调用的指令。它类似于传统的 syscall 指令,主要用于在用户空间(user mode)和内核空间(kernel mode)之间进行上下文切换
作用:SVC 指令允许用户态程序请求操作系统提供的特权服务,通常是在用户程序需要执行特权操作(例如文件操作、内存分配等)时使用。
执行流程:当执行 SVC 指令时,处理器会从用户模式切换到内核模式,操作系统会根据传入的参数和服务号决定执行哪个系统调用。执行完系统调用后,操作系统会返回并将控制权交还给用户程序。
而在linux系统里面内存又分为内核态和用户态

SVC与中断
  • SVC 中断:当 SVC 指令被执行时,CPU 会触发一个中断,切换到内核模式,处理操作系统的服务请求。SVC 会提供一个中断号作为参数,这个参数通常用于指定要执行的系统调用编号(比如打开文件、创建进程等)。
  • 返回机制:操作系统会执行完相应的服务后,将控制权返回给用户程序。在返回时,CPU 会恢复到用户模式。                                                                                                          而syscall就是这个内核态的入口。
  • Syscall(系统调用)
    Syscall(System Call)是用户程序请求操作系统提供服务的一种机制。它是用户空间与内核空间之间的接口。用户程序不能直接访问内核资源,所以需要通过系统调用来向内核请求访问资源、执行特权操作等。

    • 作用:当用户程序需要执行特权操作时(例如访问硬件资源、修改内存保护、创建/删除文件等),它会发起一个系统调用。系统调用通常会由操作系统内核提供一组API来实现。
    • 工作原理

      • 用户程序通过某种方式(比如调用一个库函数)发起系统调用。
      • 操作系统通过一个受保护的机制(比如通过软件中断或特殊的指令)来进行切换,将执行权从用户空间转移到内核空间。
      • 操作系统完成特定的操作后,返回执行结果并切换回用户空间。

Syscall函数里面的实现实际上就是一段汇编,这里面便是调用了svc这段指令。
它与普通的执行函数有什么区别?
它无法被inlinehook Hook,所以会极大的提高安全程度。(update:搜到 svc 指令地址,仍然可以 inlinehook)

我们可以通过反编译libc这个so文件看到syscall的底层其实就是使用了svc指令
  1. BTI c
  2. MOV X8, X0
  3. MOV X0, X1
  4. MOV X1, X2
  5. MOV X2, X3
  6. MOV X3, X4
  7. MOV X4, X5
  8. MOV X5, X6
  9. SVC 0
  10. CMN X0, #1,LSL#12
  11. CNEG X0, X0, HI
  12. B.HI __set_errno_internal
  13. RET
复制代码
这是64位的,如果想看32位的自行反汇编即可。
随便我们便开始今天的主题,反汇编某软件的svc签名校验并静态分析看看。

通过logcat的日志我们轻易就可以看到问题出在了什么地方。
java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/~~9gL3js7TxDHvaCG8jb5f-w==/com.yslkjgs.azmzwtds-sMuX6fs9Qu-MPmZI7MoS-A==/lib/arm64/libcycnet.so"
2025-02-16 12:10:32.497 29534-29534 DEBUG                   com.yslkjgs.azmzwtds                 E          at java.lang.Runtime.loadLibrary0(Runtime.java:1077)
2025-02-16 12:10:32.497 29534-29534 DEBUG                   com.yslkjgs.azmzwtds                 E          at java.lang.Runtime.loadLibrary0(Runtime.java:998)
2025-02-16 12:10:32.497 29534-29534 DEBUG                   com.yslkjgs.azmzwtds                 E          at java.lang.System.loadLibrary(System.java:1661)

libcycnet.so这个so它的native方法在JNI_OnLoad中注册失败了!
JNI_OnLoad又是什么?

你现在只需要知道它是Android Native开发中动态注册方法的一个特定函数即可,如果你想逆向某个native方法,在导出表搜不到Java开头,那就是动态注册了


那么,我们已经知道是JNI_OnLoad方法出了问题,那我们就把这个so给push到电脑上去看看它的JNI_OnLoad中做了些什么吧



我们在导出表中ctrl+F搜索JNI_OnLoad,然后点进去看看,随后Tap转一下伪c代码,

是不是看着有点懵?小问题,其实只要仔细分析一下,你便能发现

是图片中框选的部分出了问题?为什么?因为正常的JNI_OnLoad中应该是不会出现两个异或判断的,如果不确定,咱们可以点进去看看djefi函数看看

哦?这不就是很明显了吗,我们可以看到47行的elfApkFd = fefes::fffga::getSelfApkFd(this);(获得APK文件描述符)我们在往下滑滑。

可以看到90行的fefes::fffga::getV2Signature(v9);,以及一大堆linux_eabi_syscall(__NR_munmap, v7, (size_t)v5);之类的调用,那么就差不多确定了,这是一个通过svc来解析APK的V2签名的签名校验函数,我们这里就会延申一种解决办法。直接找调用验证的地方,随后给它的判断改掉,或者说给他的调用NOP掉。所以说我们就可以对刚才的那个JNI_OnLoad地方修改一下判断。但是这个时候就会出现一个问题?

你会发现软件进去一会儿后就又闪退了。我们尝试Hook一下RegisterNatives看看是加载到哪个方法出了问题。到这里你就会发现好像都没啥问题,于是我就打开了Android studio的logcat看了看,还是没发现什么有用的东西,于是便把视线转到libcycnet.so中的JNI_OnLoad函数,发现了

  1. strcpy((char *)&qword_5B680, "libapp.so");
  2.   v6 = dlopen((const char *)&qword_5B680, 2);
  3.   if ( !v6 )
  4.     return -1;
复制代码
这个比较可疑的代码,难不成?是libapp这个so中还有检测?打开libapp.so,发现的确有很多奇奇怪怪的函数,但并不能确定是否做了什么检测
2025-02-16 13:22:38.083 16200-16200 Genuine                 com.yslkjgs.azmzwtds                 E  invalid signature, path: /data/app/~~TnVZM32rpDYXVJkM_yQfFw==/com.yslkjgs.azmzwtds---RTx8uP7q8ZXbu7Xs9jUw==/base.apk
2025-02-16 13:22:38.083 16200-16200 Genuine                 com.yslkjgs.azmzwtds                 E  invalid signature, path: /data/app/~~TnVZM32rpDYXVJkM_yQfFw==/com.yslkjgs.azmzwtds---RTx8uP7q8ZXbu7Xs9jUw==/base.apk
2025-02-16 13:22:38.083 16200-16200 Genuine                 com.yslkjgs.azmzwtds                 E  invalid signature, path: /data/app/~~TnVZM32rpDYXVJkM_yQfFw==/com.yslkjgs.azmzwtds---RTx8uP7q8ZXbu7Xs9jUw==/base.apk

直到看到这个,我才感觉可能在这里面,但是从闪退情况来看更像是获取不到数据,并不是某种检测。。。当真是奇怪,打算后面抓包看一看
软件链接:https://www.123865.com/s/VYqzVv-x0P6v

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
已有4人评分好评 金币 理由
yxm068 + 1 厉害,此帖必成精华。
Memory2314 + 1 + 1 赞一个!
龙一 + 1 感谢帅哥
root1016 + 1 + 1 很给力!

查看全部评分 总评分:好评 +3  金币 +3 

回复

使用道具 举报

50

主题

728

回帖

4678

积分

大学生

Rank: 5Rank: 5

金币
2482
好评
1
信誉
100

MT论坛帅哥考神

发表于 2025-2-16 13:33:34 来自手机  | 显示全部楼层  来自 四川
本帖最后由 kjkuang 于 2025-2-16 13:35 编辑

沙发 感谢楼主分享这么高级的教程  怎么现在 什么都喜欢往so里面扔   广告  签名校验 弹窗……
回复

使用道具 举报

12

主题

5248

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1595
好评
16
信誉
578

考神MT论坛帅哥MT论坛新人MT论坛最佳新人MT论坛活跃会员

发表于 2025-2-16 13:36:34 来自手机  | 显示全部楼层  来自 广东
看看隐藏
回复

使用道具 举报

15

主题

1975

回帖

6208

积分

硕士生

Rank: 6Rank: 6

金币
2194
好评
10
信誉
104
发表于 2025-2-16 13:37:33 来自手机  | 显示全部楼层  来自 广东
感谢分享!
回复

使用道具 举报

48

主题

4230

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
230
好评
19
信誉
100
发表于 2025-2-16 13:37:44 来自手机  | 显示全部楼层  来自 天津
学习一下
回复

使用道具 举报

3

主题

1403

回帖

5687

积分

硕士生

Rank: 6Rank: 6

金币
2902
好评
1
信誉
100

MT论坛新人MT论坛最佳新人MT论坛帅哥考神

发表于 2025-2-16 13:38:14 来自手机  | 显示全部楼层  来自 福建
看看
回复

使用道具 举报

46

主题

1021

回帖

5075

积分

禁止访问

金币
2339
好评
46
信誉
130

MT论坛最佳新人MT论坛帅哥

发表于 2025-2-16 13:38:50 来自手机  | 显示全部楼层  来自 江苏
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

10

主题

1646

回帖

7998

积分

硕士生

Rank: 6Rank: 6

金币
259
好评
10
信誉
120
发表于 2025-2-16 13:39:22 来自手机  | 显示全部楼层  来自 四川
学习
回复

使用道具 举报

39

主题

2624

回帖

1万

积分

博士生

一辆自行车

Rank: 7Rank: 7Rank: 7

金币
3456
好评
12
信誉
100

MT论坛最佳新人MT论坛新人考神

发表于 2025-2-16 13:39:26 来自手机  | 显示全部楼层  来自 重庆
回复看看
回复

使用道具 举报

19

主题

1872

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
4944
好评
24
信誉
133

考神

发表于 2025-2-16 13:40:18 来自手机  | 显示全部楼层  来自 福建
看看
回复

使用道具 举报

2

主题

1930

回帖

6795

积分

硕士生

Rank: 6Rank: 6

金币
3459
好评
3
信誉
105

考神MT论坛新人

QQ
发表于 2025-2-16 13:41:40 来自手机  | 显示全部楼层  来自 广东
看看隐藏
回复

使用道具 举报

16

主题

1778

回帖

1万

积分

博士生

阿巴阿巴

Rank: 7Rank: 7Rank: 7

金币
2219
好评
244
信誉
190
发表于 2025-2-16 13:43:47 来自手机  | 显示全部楼层  来自 贵州
ºShark.º 发表于 2025-2-16 13:38
is  4x90加固?

NO,只是一个动漫软件而已
回复

使用道具 举报

3

主题

4117

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
6051
好评
12
信誉
102

考神

发表于 2025-2-16 13:45:05 | 显示全部楼层  来自 安徽
看看
回复

使用道具 举报

16

主题

2606

回帖

7759

积分

硕士生

Rank: 6Rank: 6

金币
5093
好评
12
信誉
103

考神MT论坛新人

发表于 2025-2-16 13:45:16 | 显示全部楼层  来自 广西
过来看看
回复

使用道具 举报

16

主题

1778

回帖

1万

积分

博士生

阿巴阿巴

Rank: 7Rank: 7Rank: 7

金币
2219
好评
244
信誉
190
发表于 2025-2-16 13:45:20 来自手机  | 显示全部楼层  来自 贵州
ºShark.º 发表于 2025-2-16 13:38
is  4x90加固?

并不是,只是一个看番软件而已,似乎是网上泛滥源码的那种,4x90加固的反汇编程度对我而言必须要动态分析,现在人在学校,只能静态
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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