最近在做SDK的启动调研,查看有哪些SDK在用户同意隐私协议前发生调用。
最后选择Frida来批量Hook函数,查看SDK在同意协议前有没有调用堆栈。
但是有些SDK的函数没办法Hook,逆向了一下发现他们的类名变成了如下的形式:
-[v48@0:8@"NSURLConnection"16q24q32q40 payWithType:orderStr:schemeStr:dynamicLaunch:callback:]:
很好奇这种类的声明是如何实现的。
看上去跟MachO里面class的type字段结构很像。
RSEf
2
感觉可能是把类名指向了方法的类型字符串?
这是alipaySDK么 还是包装了alipay的其他奇怪sdk
RSEf
4
我有点没太理解,这个奇怪的字符串类名(姑且这么叫),是怎么弄到的?
classdump SDK的二进制文件?
假如系统其实没有对类名进行特别的限制,那么通过改编译生成的文件,理论上可以让类名是任意的字符串。(编译之后非反射的类名应该会展开成指针)
RSEf
7
看来我需要你用的这份SDK文件的链接,我今天从官网( App 支付客户端 DEMO&SDK - 支付宝文档中心 (alipay.com))下的地址和你这个对不上。
从otool结果来看,类数据是正常的,class-data-name里面的字符串是类名,class-data-baseMethods是实例方法,里面前两个是数组元素大小和数量,后面每三个是一个方法,名字、类型、代码指针。
但是这里有个奇怪的东西,这些字符串是有符号的,就是前面这堆“LC0000”,我好像没在其他的应用中见过,而且存在多个位置的符号是同一个名字的情况,可能是这个干扰了Hopper?(简单的验证方法:试一下classdump,大部分classdump实现应该只处理oc数据不管符号的)
但调用SDK终究要找Alipay类,所以hook不行大概有其他问题?
Hook Framework里面.h文件的类是可以的。
但主要是怕有些没有暴露的函数在调用。
毕竟监管部门可不管是哪个SDK出问题,只会通报APP。