美文网首页安全iOS程序猿移动开发技术前沿
逆向的尝试:让你的 QQ 不被撤回

逆向的尝试:让你的 QQ 不被撤回

作者: Tsui_YuenHong | 来源:发表于2016-10-31 19:22 被阅读1486次

启发

之前看到一篇文章让你的微信不再被人撤回消息,所以就受到启发,不如让 QQ 也不被撤回吧。

请注意:本文实践仅在越狱设备上可行

开始

准备工作

环境:macOS 10.12 / hooper / class-dump / 已经砸壳的 QQ.ipa

是的,就这么简单。其中 已经砸壳的QQ.ipa 可以到各种越狱软件直接下载。

实验开始

按照惯例,先 otool 一下看看是不是解密的,不过在越狱软件下肯定是解密的了。

otool -l /Users/TsuiYuenHong/Downloads/PP\\\\ 下载/应用/QQ-6.5.8\\\\(越狱应用\\\\)/Payload/QQ.app/QQ | grep crypt
otool

然后,使用 class-dump 看看有什么可用的信息

class-dump -H /Users/TsuiYuenHong/Downloads/PP\\\\ 下载/应用/QQ-6.5.8\\\\(越狱应用\\\\)/Payload/QQ.app -o qq
class-dump

这里就要用到 目测估计法,哈哈,就是这么简单粗暴。撤回无非就几个单词,revoke / recall / withdraw,(⊙v⊙) 那就都试试吧。不过这次运气比较好,试到 recall 就发现了可能有用的信息。

recallmodule

在头文件中发现一个叫 QQMessageRecallModule 的类,这翻译过来不就是 QQ信息撤回模块 吗?

还发现了里面有个 处理撤回通知 的方法

- (void)handleRecallNotify:(struct RecallModel *)arg1 isOnline:(BOOL)arg2;

那就直接从这个方法入手吧。

QQ可执行文件 丢进 hooper,搜索 handleRecallNotify

hooper

返回值是 void,那我就再次简单粗暴直接在函数一开始就 return 吧。然后使用 hooper 重新生成可执行文件,替换掉原本的 QQ可执行文件

然后将 QQ.app 放到 payload 文件夹下,然后压缩并重命名为 QQ.ipa,装到越狱设备上运行。

因为手上没有 iPhone 越狱设备,所以就丢到 iPad 运行。

这是用 iPhone 发的信息,并且间隔 1 分钟后撤回。


iphone

这是我在 iPad 运行的修改版本,可以看见之前被撤回的信息还在。


iPad

后记

其实这个过程并不想本文一样简单,期间还试过乌龙,例如在找撤回方法的时候就试过 iPad 弄到自己不能撤回,hhhhh。

关于为什么不能再非越狱设备上运行,我也有尝试过,不过 QQ 会检测签名问题,所以当我重签名之后,会提示签名被修改,而不能正常运行。目前还在尝试 ...

相关文章

网友评论

  • KeepYounger:请问 QQ检测签名问题 解决了吗? 我也遇到了这个问题
    KeepYounger:@bcbcb 问题我已经解决了,并不是签名的问题。原因是:QQ通过检查bundleIdentifier是否被修改,来判断是不是第三方修改过的QQ,一开始我修改了QQ的bundleIdentifier,所以提示签名错误,它这个提示有点误导。如果不修改bundleIdentifier是可以安装修改了签名过的QQ的,如果想要安装共存版QQ,就需要拦截系统的bundleIdentifier的方法,返回QQ期望的bundleIdentifier就行了。
    59fc465a1ed1: @KeepYounger 可以试试iresign
    Tsui_YuenHong:@KeepYounger 然而并没有呀,最近在写其他东西
  • 李剑飞的简书:“返回值是 void,那我就再次简单粗暴直接在函数一开始就 return 吧。然后使用 hooper 重新生成可执行文件,替换掉原本的 QQ可执行文件。” 这步是具体怎么做的?用hooper?
    Tsui_YuenHong:@李剑飞的简书 看图第一行
    李剑飞的简书:@Tsui_YuenHong 返回值是 void,在函数一开始就 return,这个在哪儿改呢?小白~
    Tsui_YuenHong:@李剑飞的简书 是的 hooper生成可执行文件 然后复制替换掉原本的文件即可

本文标题:逆向的尝试:让你的 QQ 不被撤回

本文链接:https://www.haomeiwen.com/subject/mlmputtx.html