这种类是如何声明的

最近在做SDK的启动调研,查看有哪些SDK在用户同意隐私协议前发生调用。

最后选择Frida来批量Hook函数,查看SDK在同意协议前有没有调用堆栈。

但是有些SDK的函数没办法Hook,逆向了一下发现他们的类名变成了如下的形式:

image

-[v48@0:8@"NSURLConnection"16q24q32q40 payWithType:orderStr:schemeStr:dynamicLaunch:callback:]:

很好奇这种类的声明是如何实现的。

看上去跟MachO里面class的type字段结构很像。

感觉可能是把类名指向了方法的类型字符串?
这是alipaySDK么 还是包装了alipay的其他奇怪sdk

是alipay。
其他的SDK里面也有。

我有点没太理解,这个奇怪的字符串类名(姑且这么叫),是怎么弄到的?
classdump SDK的二进制文件?
假如系统其实没有对类名进行特别的限制,那么通过改编译生成的文件,理论上可以让类名是任意的字符串。(编译之后非反射的类名应该会展开成指针)

拖到Hopper里看的呀。。

用otool工具看只能看到这个:

看来我需要你用的这份SDK文件的链接,我今天从官网( App 支付客户端 DEMO&SDK - 支付宝文档中心 (alipay.com))下的地址和你这个对不上。
从otool结果来看,类数据是正常的,class-data-name里面的字符串是类名,class-data-baseMethods是实例方法,里面前两个是数组元素大小和数量,后面每三个是一个方法,名字、类型、代码指针。
但是这里有个奇怪的东西,这些字符串是有符号的,就是前面这堆“LC0000”,我好像没在其他的应用中见过,而且存在多个位置的符号是同一个名字的情况,可能是这个干扰了Hopper?(简单的验证方法:试一下classdump,大部分classdump实现应该只处理oc数据不管符号的)
但调用SDK终究要找Alipay类,所以hook不行大概有其他问题?

应该是,我还看到有类名为空的情况。
image

Hook Framework里面.h文件的类是可以的。
但主要是怕有些没有暴露的函数在调用。
毕竟监管部门可不管是哪个SDK出问题,只会通报APP。

ghidra和ida的结果都是正常的,
image