IDA反编译出的CFSTR内的字符串是类似十六进制

如题,第一次见这种。它又不完全是十六进制,尝试用OC的方法也打印不出来。

v9 = objc_msgSend(&OBJC_CLASS___NSString, "stringWithFormat:", CFSTR("\xA6#MF\x7F\xB4"), v5, v7);
objc_msgSend(v21, "setValue:forKey:", v13, CFSTR("\xE2\x136L\xF7\x4A\xDC\x58"));
objc_msgSend(v21, "setValue:forKey:", v14, CFSTR("\xF3\x0B\x1F\x0DZ"), v14);

这个要怎么还原呢

先转NSString

你试试就知道了。。

加密了?

上个样本

样本是指?

样本就是你研究的这个二进制。。。

CFString里面封装的就是个传统的C字符串,IDA里能看到下面那个C字符串的全局变量地址,这个函数跑起来的时候下断点看下这个C字符串的内容是不是等于静态看到的,如果不一致的话说明加密了,这个时候解密

1 Like

确定是加密的。而且我根据hook的原字符串和CFSTR中的字符来硬推理,得出了加密算法是ASCII码按位异或一个固定uint8数组。但是没找到它的解密逻辑,而且也没想通怎么能做到传的是原始字符串,但ida解出来的是加密的

猜测:

  • 地址空间里其他镜像负责解密
  • 初始化函数里解密
  • 二进制的XRef被干扰过

私我个样本看看

没找到怎么发私信 :sweat_smile:

张总要的是的你逆的这个二进制文件

看了一下,能找到解密处的XRef的。
可以从CFString的结构的入手

这个不就是张总你的光的效果吗?

是啊我知道啊,所以我说让他从CFString结构开始学习