逆向实战 (26)

逆向实战(26)

  1. 通过MonkeyDev 创建WeChatDemo
  2. 开发技术选择
    1. 越狱环境中 -> 越狱插件 Logos
    2. 重签名. 非越狱中, 破解版本(容易封号)
  3. 以前自定义界面到设置界面上添加HKSettingCell
    1. 当是图片 -> App包里面 -> 重签
    2. 那么越狱插件该怎么写?

编写Tweak插件

  1. image.png
  2. 在越狱环境下去拿微信的APP ID -> 修改上面对应的地方,表示我的插件的目标是微信
  3. 要想插件在编译时安装
    1. image.png
    2. image.png
    3. 注意: 你的电脑如果同时连接了两台手机, 用USB进行连接什么的,容易出问题,记得保存一台手机连接即可
  4. 将HKSettingCell.xm脱到工程里面, 拖拽时选择12, 不用选择4
  5. 因为上面的设置,编译时会安装, 所以先关闭MonkeyDevInstallOnAnyBuild -> NO
  6. 编译
    1. 如果是编译错误 -> Build Setting -> sign -> 找到Code Signing Identity -> iOS Developer
    2. 注意Tweak中文路径敏感 -> 直接将工程放在桌面
    3. 如果没有问题则会生成.mm文件, 将生成的文件添加到工程里面, 添加时选择124
  7. 上步没有问题 -> 编译运行, 记得改MonkeyDevInstallOnAnyBuild -> Yes, 让编译时安装到微信
    1. 头文件报错的话, 注释掉
    2. 还有不成功的话, 修改版本号
      image.png
  8. 此时是没有图片的, 用USB链接图片
    1. 链接到手机, ps -A | grep WeChat -> 找到微信的沙盒路径(记录一下沙盒路径)

      2.
      image.png
    2. 做越狱插件的时候, 如果需要增加图片 -> 将图片资源拷贝到APP目录下就行

定位聊天界面接收消息方法

  1. 砸壳, 将砸壳文件放到桌面 -> 解压缩 -> class dump -> 那倒头文件
    1. 小细节, APP包里面有修改 info.plist, 打开info.plist最下面有个 设备device这个东西, 记得删掉,不然重签名不了
  2. 找到聊天详情界面
    image.png
  3. 当然也可以用Xcode进程附加,或者Reveal工具都可以
  4. 最终找到了聊天详情界面BaseMsgContentViewController
  5. 去头文件里面找到这个文件, 然后我们要做的是HooK里面所有的方法

THEOS工具使用来HOOK一个.h里所有方法

  1. open $THEOS
  2. image.png
  3. logify.pl -> 你给我一个头文件, 我帮你Hook, 头文件里所有的方法, 并写上%log, 这正是我们迫切需要的
  4. 终端进入头文件目录
    1. logify.pl BaseMsgContentViewController > ../logMethod.xm -> > 是输入到一个文件, 后面是文件路径
    2. 然后将生成的文件放到工程里查看
    3. 编译 -> 先关闭MonkeyDevInstallOnAnyBuild -> NO
    4. 会生成.mm文件 -> 将.mm文件拖拽到工程 -> 再次编译
      1. 因为这里的hook方法比较多, 点.mm文件会很卡
      2. 再次编译很多地方报错, 直接干掉报错代码
      3. 导入 #import <UIKit/UIKit.h>
      4. 编译没问题后 -> MonkeyDevInstallOnAnyBuild -> YES -> 然后重编译安装插件
      5. 附加进程有可能看不到打印信息 -> 控制台 -> 搜WeChat的进程来看打印
      6. 进入微信聊天详情界面, 发条消息, 看控制台的打印

定位全局接收消息方法

  1. image.png
  2. 要想Hook红包, 应该不止在聊天详情界面, 退出聊天详情界面, 再次发消息观察
    image.png
  3. 定位onNewSyncStart(收到消息时调用), addMessageNode(进入详情界面有调用)
  4. 消息管理者调用的onNewSyncStart -> 下断点看函数调用栈
  5. 下断点
    1. methods BaseMsgContentViewController
    2. 找onNewSyncStart的内存地址, 这个进程死掉就不行了
      image.png
    3. image.png
    4. image.png
    5. bt 查看堆栈 -> sbt 恢复符号 (多试两次, 有可能恢复多点符号名称)
      1. 恢复了frame#1的符号
        image.png
      2. frame2的符号只有个地址
        1. image list -> 拿到首地址 -> 用拿到的frame2的地址 - 首地址 -> 分析出来是个block方法(此处没有用到相减得到的地址, 而是通过断点到时打印)
          image.png
        2. image.png
        3. 多sbt尝试恢复符号, 上面的步骤有许多恢复的方法值得我们去探究, 去下断点,或许有新的收获

定位消息管理者作为HOOK对象

  1. 经过上面的分析, 我们怀疑addMessageNode这个很重要(sbt恢复的函数栈来看)

  2. 需要重新hook, 栈里面的那几个函数

  3. 从我们导出的头文件里面找到需要hook的类, 然后上面的相应的栈方法

  4. 注释掉原来xm里面的大量hook代码
    image.png
  5. 注意搜索类的技巧 -> @interface CMessageMgr

    1. 上面这个方法一看就是消息管理类, 我们现在对这个类有很强烈的兴趣
  6. MonkeyDevInstallOnAnyBuild -> NO -> 先编译一下, 看是否有问题

    1. 小细节: 主动杀掉WeChat -> 通过Spring board重启有可能有问题
    2. MonkeyDevInstallOnAnyBuild -> YES
    3. Xcode运行插件
    4. 打开控制台 -> 不进聊天界面,发消息
      image.png
    5. 我们发现这有很大概率是我们的目标
    6. 发送不同消息类型来看控制台打印 -> 发红包时type=49
    7. 然后MainThreadNotifyToExt是我们研究的重点吗? -> CMessageMgr 这个类才是
    8. 需要对CMessageMgr这个类进行全方位的HOOK
  7. logify.pl CMessageMgr.h > ../logMethodCMessageMgr.xm

    1. 将生成的文件 拖拽进项目 12
    2. 不显示.xm内容的话 -> 尝试重启Xcode
    3. MonkeyDevInstallOnAnyBuild -> NO -> 编译生成.mm -> 拖拽到项目124
    4. 注释掉报错方法
    5. MonkeyDevInstallOnAnyBuild -> YES
    6. 手动杀掉WeChat -> 运行安装插件
  8. 查看控制台

    1. 需要分析的记录一下, 要找那种每次发消息都会调用的方法 -> 多发几条消息记录一下
    2. image.png
    3. 去头文件里找到这个方法
    4. image.png
    5. 手动杀掉WeChat
    6. 重新运行插件 -> 找到打印信息
      image.png
  9. image.png

动态分析定位到抢红包的方法

  1. 分析强红包的方法, 如果是类方法, 简单
  2. 如果是对象方法, 需要静态分析, 反汇编去分析出打开红包的代码
  3. IDA!!! 登场
  4. 附加进程 -> 分析红包界面的开按钮
    1. WCRedEnvelopesReceiveHomeView对象的OnOpenRedEnvelopes
    2. 安装IDA -> Mac比较麻烦 -> 安装个虚拟机Parallels Desktop
    3. Parallels Desktop这个跟Mac融合的比较好
    4. 用IDA分析WeChat的包

IDA分析流程

  1. New
  2. 找到文件夹 -> 看不到文件 -> All Files -> WeChat
  3. 选择Mach-O file ARM64 -> OK -> 时间比较长
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,677评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,772评论 3 408
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 173,108评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,378评论 1 303
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,394评论 6 403
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,807评论 1 315
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,127评论 3 432
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,136评论 0 281
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,693评论 1 328
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,703评论 3 349
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,810评论 1 357
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,400评论 5 352
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,130评论 3 341
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,532评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,707评论 1 278
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,412评论 3 383
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,892评论 2 368

推荐阅读更多精彩内容