frida hook微信防撤回(PC端)

2024-06-11 03:52
文章标签 frida hook 微信防 pc 撤回

本文主要是介绍frida hook微信防撤回(PC端),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PC端:

微信的主要功能都是在WeChat\[3.9.10.27]\WeChatWin.dll动态链接库中实现的

直接进IDA分析

都没有符号表

我们需要找一下实现撤回功能的函数,尝试在字符串里搜索revokeMsg

也是有非常多的字符串

我们需要用frida来hook这些字符串来找出撤回实际调用的函数

先初步写一个脚本找到WeChatWin.dll的基地址

#wecaht_hook
import frida
import sysdef main(target_process):session = frida.attach(target_process)jsCode = """//找WeChatWin.dll映射到内存的根地址const baseAddr = Module.findBaseAddress('WeChatWin.dll');console.log("WeChatWin.dll baseAddr: " + baseAddr);"""#js脚本控制注入逻辑script = session.create_script(jsCode)script.load() #加载脚本print("Process attatched successfully!")sys.stdin.read() #持续执行if __name__=='__main__':target_process = 15964 #pidmain(target_process)
'''
WeChatWin.dll baseAddr: 0x7ffb6d8e0000
Process attatched successfully!
'''

任务管理器可以查看pid

成功回显

但是这里输出的地址是个装载之后的虚拟地址,要与ida中函数的地址对应,还需要进行一个转化

这是IDA中的基地址0x180000000

#wecaht_hook
import frida
import sysdef main(target_process):session = frida.attach(target_process)jsCode = """//找WeChatWin.dll映射到内存的根地址const baseAddr = Module.findBaseAddress('WeChatWin.dll');console.log("WeChatWin.dll baseAddr: " + baseAddr);const revokeMsgFunAddr = resolveAddress('0x1823CC870'); //测试的目标函数地址console.log('revokeMsgFunAddr: ' + revokeMsgFunAddr);Interceptor.attach(revokeMsgFunAddr, {//一旦进入地址的回调函数onEnter(args) {console.log('test!');}})//虚拟地址转化为实际内存地址function resolveAddress(addr) {const idaBase = ptr(0x180000000);const offset = ptr(addr).sub(idaBase); //偏移地址const result = baseAddr.add(offset);return result;}"""#js脚本控制注入逻辑script = session.create_script(jsCode)script.load() #加载脚本print("Process attatched successfully!")sys.stdin.read() #持续执行if __name__=='__main__':target_process = 15964main(target_process)

然后把这个脚本跑起来,用另一个号发消息并进行撤回操作,逐个函数进行尝试

调试到SyncMgr::ProcessRevokeMsg对应的函数时,有了回显

我们进相应的函数sub_1823CC870进行静态分析

发现多个分支都调用了sub_1826DA2D0函数,且之前的字符串也在其参数当中,这时候再去hook该函数0x1826DA2D0也是有回显的

那么只要跳过这个函数应该就不会撤回了

但是这个位置的if判断过于复杂(或),不容易跳过

那我们就看一下上一级的sub_1823CC870函数在哪里被调用

可以看到是sub_1823E4AD0函数

这里也可以hook一下,确认回显

转成伪代码会发现这里是一个switch语句,当v9==4时就会触发撤回的函数

很显然那是通过cmp edi, 4来比较

那就在这里注入0x1823E4CBA

我们把edi(64位对应的rdi)的值强行修改成不是4的值(这里改成0)

#wecaht_hook
import frida
import sysdef main(target_process):session = frida.attach(target_process)jsCode = """//找WeChatWin.dll映射到内存的根地址const baseAddr = Module.findBaseAddress('WeChatWin.dll');console.log("WeChatWin.dll baseAddr: " + baseAddr);const revokeMsgFunAddr = resolveAddress('0x1823E4CBA');console.log('revokeMsgFunAddr: ' + revokeMsgFunAddr);Interceptor.attach(revokeMsgFunAddr, {//一旦进入地址的回调函数onEnter(args) {console.log('called!');console.log("original rdi: " + this.context.rdi);this.context.rdi = 0;console.log("changed rdi: " + this.context.rdi);}})//虚拟地址转化为实际内存地址function resolveAddress(addr) {const idaBase = ptr(0x180000000);const offset = ptr(addr).sub(idaBase); //偏移地址const result = baseAddr.add(offset);return result;}"""#js脚本控制注入逻辑script = session.create_script(jsCode)script.load() #加载脚本print("Process attatched successfully!")sys.stdin.read() #持续执行if __name__=='__main__':target_process = 15964main(target_process)

撤回的消息就被固定了!

当然要在本地持续化利用,直接把dll里面的

这部分指令NOP掉也行

参考:

广东财经大学-信息安全-基于IDA Pro和Frida的微信消息撤回无效实验_哔哩哔哩_bilibili

[原创]hook 微信信息撤回功能-Android安全-看雪-安全社区|安全招聘|kanxue.com

这篇关于frida hook微信防撤回(PC端)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050125

相关文章

工作流Activiti初体验—流程撤回【二】

已经玩工作流了,打算还是研究一下撤回的功能。但是流程图里面并不带撤回的组件,所以需要自己动态改造一下,还是延续上一个流程继续试验撤回功能。《工作流Activiti初体验【一】》 完整流程图 我们研究一下分发任务撤回到发起任务,其他环节的撤回类似 撤回的原理大概如下: 将分发任务后面的方向清空,把发起任务拼接到原来的判断网关,然后结束分发任务,这样流程就到发起任务了 此时的流程如上图,

前端vite+vue3——利用环境变量和路由区分h5、pc模块打包(从0到1)

⭐前言 大家好,我是yma16,本文分享 前端vite+vue3——利用环境变量和路由对前端区分h5和pc模块打包(从0到1)。 背景: 前端本地开发pc和h5的项目,发布时需要区分开h5和pc的页面 vite Vite 通过在一开始将应用中的模块区分为 依赖 和 源码 两类,改进了开发服务器启动时间。 依赖 大多为在开发时不会变动的纯 JavaScript。一些较大的依赖(

移动端+PC端应用模式的智慧城管综合执法办案平台源码,案件在线办理、当事人信用管理、文书电子送达、沿街店铺分析

城市管理综合执法管理平台实现执法办案、业务全流程在线办理,依托移动端+PC端的“两端”应用模式,保障能够通过信息化手段进行日常的执法办案工作,强化执法监督功能。提供了案件在线办理、当事人信用管理、文书电子送达、沿街店铺分析等功能,全面赋能执法队员,提高执法队员办案效率。 技术框架: 前端框架:vue+element 后端框架:springboot 数 据 库:mysql5.7 移

几种pc端页面 常用的js兼容ie写法,几个名词 nodeName nodeValue及value addEventListener attachEvent

注意这里说的兼容ie浏览器,是说兼容ie8及以前的浏览器。ie9及以后就靠谱多了 function(event){    event=event ||window.event;  //window.event是为了兼容ie } ---------------------------------------- function(event){    event=event ||win

白杨SEO:中国搜索引擎市场份额排名如何,百度还是PC和移动端均第一吗?

前言:这是白杨SEO公众号原创第536篇。为什么分享这个?因为我们不管是做搜索流量还是推荐流量,都应该随时了解当下流量主要在哪,欢迎评论,转发,收藏。图片在公众号白杨SEO优化教程上去看。 文章大纲: 1、2024最新国内搜索引擎排名 2、国内搜索引擎排名变化启发 3、2024全世界搜索引擎排名 4、国内APP活跃用户排名 5、我们为什么要关注这些排名数据? 2024最新国内搜索引擎

k8s学习(六) 使用pod hook

Pod Hook 是由 kubelet 发起的,当容器中的进程启动前或者容器中的进程终止之前运行,这是包含在容器的生命周期之中。我们可以同时为 Pod 中的所有容器都配置 hook。 Kubernetes 为我们提供了两种钩子函数: PostStart:这个钩子在容器创建后立即执行。但是,并不能保证钩子将在容器ENTRYPOINT之前运行,因为没有参数传递给处理程序。主要用于资源部署、环境准备等

《JS实现复制内容到剪贴板功能,可兼容所有PC浏览器,不兼容手机端》

前记:本来原生的JS是有提供一个函数来实现这个功能(window.clipboardData),但是很遗憾,这个函数仅仅支持IE和FF浏览器,所以基本用处不大。下边介绍的是一个第三方插件库(ZeroClipboard.js)。   ZeroClipboard.js在Git上的地址为:https://github.com/zeroclipboard/zeroclipboard 注意:此js库不

推荐4款PC端黑科技工具,快来看看,建议收藏

Thunderbird Thunderbird 是由 Mozilla 基金会开发的一款免费且开源的电子邮件客户端,支持 Windows、macOS、Linux 等多种操作系统。它不仅可以用于发送和接收电子邮件,还可以作为新闻阅读器、聊天工具以及日历应用。 Thunderbird 提供了丰富的功能,包括对 IMAP 和 POP3 协议的支持,使用户能够从不同的电子邮件提供商处检索邮件,并使用

智慧工地系统源码,支持项目级、公司级、集团级多级权限划分,支持PC端、手机端

智慧工地的核心是数字化,它通过传感器、监控设备、智能终端等技术手段,实现对工地各个环节的实时数据采集和传输,如环境温度、湿度、噪音等数据信息,将数据汇集到云端进行处理和分析,生成各种报表、图表和预警信息,帮助管理人员了解工地的实时状况,及时做出决策和调整,保证施工作业的顺利进行。同时,智慧工地还可以通过人工智能和大数据技术,对工地数据进行深度分析和挖掘,发现潜在问题和规律,提出优化建议和预测预警,

油猴hook+内存爆破

hook方式 说明:来回翻页发现只有请求体的token需要逆向,而这个请求体是在params里,拼接到url里,可以直接用油猴hook url里的关键字token=。 正常步骤 hook代码 // ==UserScript==// @name hookparams// @namespace http://tampermonkey.net/// @version