逆向实战 (26)

简介: 逆向实战(26)

逆向实战(26)


  1. 通过MonkeyDev 创建WeChatDemo
  2. 开发技术选择


  1. 越狱环境中 -> 越狱插件 Logos
  2. 重签名. 非越狱中, 破解版本(容易封号)


  1. 以前自定义界面到设置界面上添加HKSettingCell


  1. 当是图片 -> App包里面 -> 重签
  2. 那么越狱插件该怎么写?


编写Tweak插件




微信图片_20220510032059.png

image.png


  1. 在越狱环境下去拿微信的APP ID -> 修改上面对应的地方,表示我的插件的目标是微信
  2. 要想插件在编译时安装




微信图片_20220510032104.png

image.png




微信图片_20220510032108.png

image.png


        c.注意: 你的电脑如果同时连接了两台手机, 用USB进行连接什么的,容易出问题,记得保存一台手机连接即可


  1. 将HKSettingCell.xm脱到工程里面, 拖拽时选择12, 不用选择4
  2. 因为上面的设置,编译时会安装, 所以先关闭MonkeyDevInstallOnAnyBuild -> NO
  3. 编译


  1. 如果是编译错误 -> Build Setting -> sign -> 找到Code Signing Identity -> iOS Developer
  2. 注意Tweak中文路径敏感 -> 直接将工程放在桌面
  3. 如果没有问题则会生成.mm文件, 将生成的文件添加到工程里面, 添加时选择124


  1. 上步没有问题 -> 编译运行, 记得改MonkeyDevInstallOnAnyBuild -> Yes, 让编译时安装到微信


  1. 头文件报错的话, 注释掉
  2. 还有不成功的话, 修改版本号


微信图片_20220510032112.png
image.png


  1. 此时是没有图片的, 用USB链接图片


  1. 链接到手机, ps -A | grep WeChat -> 找到微信的沙盒路径(记录一下沙盒路径)
    2.


微信图片_20220510032117.png
image.png


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


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


  1. 砸壳, 将砸壳文件放到桌面 -> 解压缩 -> class dump -> 那倒头文件


  1. 小细节, APP包里面有修改 info.plist, 打开info.plist最下面有个 设备device这个东西, 记得删掉,不然重签名不了


  1. 找到聊天详情界面


微信图片_20220510032121.png
image.png


  1. 当然也可以用Xcode进程附加,或者Reveal工具都可以
  2. 最终找到了聊天详情界面BaseMsgContentViewController
  3. 去头文件里面找到这个文件, 然后我们要做的是HooK里面所有的方法


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


  1. open $THEOS


微信图片_20220510032125.png

image.png


  1. logify.pl -> 你给我一个头文件, 我帮你Hook, 头文件里所有的方法, 并写上%log, 这正是我们迫切需要的
  2. 终端进入头文件目录


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. 进入微信聊天详情界面, 发条消息, 看控制台的打印

定位全局接收消息方法




微信图片_20220510032129.png

image.png


  1. 要想Hook红包, 应该不止在聊天详情界面, 退出聊天详情界面, 再次发消息观察


微信图片_20220510032133.png
image.png


  1. 定位onNewSyncStart(收到消息时调用), addMessageNode(进入详情界面有调用)
  2. 消息管理者调用的onNewSyncStart -> 下断点看函数调用栈
  3. 下断点


  1. methods BaseMsgContentViewController
  2. 找onNewSyncStart的内存地址, 这个进程死掉就不行了


微信图片_20220510032137.png

image.png


       c.

微信图片_20220510032141.png

image.png


       d.


微信图片_20220510032145.png
image.png


         e.bt 查看堆栈 -> sbt 恢复符号 (多试两次, 有可能恢复多点符号名称)


  1. 恢复了frame#1的符号


微信图片_20220510032149.png
image.png


             ii.frame2的符号只有个地址


  1. image list -> 拿到首地址 -> 用拿到的frame2的地址 - 首地址 -> 分析出来是个block方法(此处没有用到相减得到的地址, 而是通过断点到时打印)


微信图片_20220510032152.png
image.png


                    2.

微信图片_20220510032157.png

image.png


                       3.多sbt尝试恢复符号, 上面的步骤有许多恢复的方法值得我们去探究, 去下断点,或许有新的收获


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


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


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


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


  1. 注释掉原来xm里面的大量hook代码


微信图片_20220510032201.png
image.png


  1. 注意搜索类的技巧 -> @interface CMessageMgr


  1. 上面这个方法一看就是消息管理类, 我们现在对这个类有很强烈的兴趣


  1. MonkeyDevInstallOnAnyBuild -> NO -> 先编译一下, 看是否有问题


  1. 小细节: 主动杀掉WeChat ->  通过Spring board重启有可能有问题
  2. MonkeyDevInstallOnAnyBuild -> YES
  3. Xcode运行插件
  4. 打开控制台 -> 不进聊天界面,发消息

微信图片_20220510032206.png
image.png


       e.我们发现这有很大概率是我们的目标

       f.发送不同消息类型来看控制台打印 ->  发红包时type=49

       g.然后MainThreadNotifyToExt是我们研究的重点吗? -> CMessageMgr 这个类才是

       h.需要对CMessageMgr这个类进行全方位的HOOK


  1. logify.pl CMessageMgr.h > ../logMethodCMessageMgr.xm


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


  1. 查看控制台


  1. 需要分析的记录一下, 要找那种每次发消息都会调用的方法 -> 多发几条消息记录一下


微信图片_20220510032210.png

image.png


       c.去头文件里找到这个方法


      d.


微信图片_20220510032214.png
image.png


        e.手动杀掉WeChat

        f.重新运行插件 -> 找到打印信息


微信图片_20220510032219.png
image.png




微信图片_20220510032223.png
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 -> 时间比较长



目录
相关文章
|
1月前
|
数据采集 JavaScript 前端开发
【逆向基础】JS逆向入门:小白也可以看懂
【逆向基础】JS逆向入门:小白也可以看懂
|
6月前
|
数据采集 JavaScript 前端开发
爬虫逆向操作
安装PyExecJS和Node.js环境,使用Python通过PyExecJS调用JavaScript代码。微信公众号平台案例中,通过抓包分析找到密码加密函数,使用js改写工具修改后保存为weixin.js。利用PyExecJS的execjs.get()、compile()和eval()方法执行加密函数,获取加密后的密码数据。示例代码展示了如何调用weixin.js中的getPwd函数。
38 1
|
6月前
|
算法 安全 数据安全/隐私保护
AES算法逆向实战--某思路
本文是关于AES加密算法的逆向分析实战。通过跟栈方式找出加密位置,发现在`jslencode`函数中完成账号和密码加密。使用CryptoJS库,示例代码展示了如何用AES进行加密,其中`397151C04723421F`作为key,加密手机号和密码,并打印结果。
114 1
|
数据安全/隐私保护 iOS开发 开发者
iOS 逆向编程(三)实操 Jailbreak 详细流程
iOS 逆向编程(三)实操 Jailbreak 详细流程
246 1
|
算法 Java API
逆向的流程和思路
逆向的流程和思路
|
C++
逆向实战(插件完) (29)
对未实现的参数进行猜测
157 0
逆向实战(插件完) (29)
【软件】【逆向】StarUML regist
【软件】【逆向】StarUML regist
94 0
逆向实战 (27)
用IDA分析MachO文件
200 0
逆向实战 (27)
|
iOS开发
逆向实战 (28)
上次分析说明
105 0
逆向实战 (28)
|
机器学习/深度学习 算法 UED
《算法笔记知识点记录》第四章——算法初步3——递归
《算法笔记知识点记录》第四章——算法初步3——递归
《算法笔记知识点记录》第四章——算法初步3——递归