吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11371|回复: 35
收起左侧

[调试逆向] 使用inline hook实现修改PC微信通知铃声-哥哥微信来了

[复制链接]
bester 发表于 2020-2-15 00:17
本帖最后由 bester 于 2020-2-15 01:20 编辑

原贴:https://www.52pojie.cn/thread-1103441-1-1.html

最近频繁刷某音刷到哥哥微信来了的铃声,刚好今天2.14大家云恋爱,我等单身狗只能舔屏,前几日看到楼主这篇帖子修改了PC微信的提示音,同时楼主也提出了一个缺陷,就是文件大小有限制,不能超过256kb

我个人的理解就是原提示音89.8 KB (92,044 字节),理论上覆盖这个提示音,不能超过这个大小,但是如果说自己增加一块资源段,理论上应该是可以放的,但是这块我们不作讨论,因为我不想去作实现,太没必要了

另外我不知道为什么楼主会说不能超过256kb,阅读了一下api说明,我也没有发现说有这个限制,那么我还是从api入手,看看是否有发现。

首先要理解的是,DLL中的资源是怎么被加载调用的,我们需要知道三个API:

FindResourceW 寻找资源
LoadResource 加载资源
SizeofResource 获取资源大小

只有加载了资源以后,才能对这个资源进行调用

所以我们可以通过这些API找到一个调用点,但是如果说资源比较多,我们要一个一个断下来看,也挺费时间,所以我直接看哪个API函数是播放WAV提示音的入手就可以了,PlaySoundW/PlaySoundA

一般来说都是宽字节,所以我们只需要断PlaySoundW即可,先从WeChatWin.dll里面找导入函数,至于为什么是这个dll,因为这个dll是PC微信实现功能的dll

直接在WeChatWin.dll领空ctrl+N,找到这个导入函数
1.jpg

然后按enter回车键,查找函数调用参考
2.jpg
因为我多次调试过了,所以知道是第一个,如果是第一次,请全部下断,然后让朋友给你发消息,会断下的那个就是播放声音的调用处
3.jpg
然后我们看他的3个参,直接从百度里面搜,看各个参数代表啥意思,大家可以看这篇帖子

https://blog.csdn.net/lindorx/article/details/78724518

然后找到里面的C++代码
PlaySound(TEXT("F:\\c.wav"),NULL,SND_FILENAME | SND_ASYNC);

那么就知道了第一个参数是文件路径或者是资源号,第二个可以为NULL,如果不为NULL,则表示是包含资源模块的模块句柄,第三个参数是播放模式

所以按照这个逻辑,我们自己写一个C++程序,调用一下我们的提示音.wav,然后用OD载入看看
4.jpg
然后OD反编译一下,得到如下代码
5.jpg
剩下的就是照着抄就可以了
[Asm] 纯文本查看 复制代码

7B18DD73    68 05000400             push 0x40005      //这里改 push 20001
7B18DD78    E8 1E0C7200             call 7B8AE99B    //这里是获取资源句柄,可以不改
7B18DD7D    50                      push eax  //这里改push 0
7B18DD7E    6A 76                   push 0x76 // 这里改 push 文件路径的地址 
7B18DD80    FF15 F0AA297C           call dword ptr ds:[<&WINMM.PlaySoundW>]  ; winmm.PlaySoundW



文件路径的地址,自己找一个00的空段,写入文件路径,然后把地址改上去即可

重点注意:修改可能会导致需要补码的情况,另外还要考虑重定位,已测试如果直接修改保存,会导致PlaySoundW重定位不可用,大家慎重,坐等大佬放出直接保存的修改方法!!!

修改完毕后的图:
6.jpg

然后inline hook的话就是直接修改PlaySoundW函数,代码使用shellcode即可,我这里没有加判断,可自行添加,因为只有3个提示音,来消息,来电语音,挂断语音
[Asm] 纯文本查看 复制代码
04990007    C74424 04 60009904      mov dword ptr ss:[esp+0x4], 0x4990060 //赋值
0499000F    C74424 08 00000000      mov dword ptr ss:[esp+0x8], 0x0 //赋值
04990017    C74424 0C 01000200      mov dword ptr ss:[esp+0xC], 0x20001 //赋值
0499001F    8BFF                    mov edi, edi  //补码
04990021    55                      push ebp //补码
04990022    8BEC                    mov ebp, esp //补码
04990024  - E9 CC28846E             jmp winmm.731D28F5 //调用原函数



shellcode:C7 44 24 04  00 00 00 00  C7 44 24 08 00 00 00 00 C7 44 24 0C 01 00 02 00 8B
FF 55 8B EC E9 00 00 00 00

另外说明一点:使用inline hook的好处就是基本无视微信版本升级,除非他换API,不使用inline hook的话,如果微信资源文件更新导致地址变更就凉了,这点区别大家知晓一下

免费评分

参与人数 15威望 +1 吾爱币 +15 热心值 +12 收起 理由
diliang920 + 1 + 1 谢谢@Thanks!
lixiangliuyi + 1 + 1 谢谢@Thanks!
Hmily + 1 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
月六点年一倍 + 1 鼓励转贴优秀软件安全工具和文档!
三斤L + 1 + 1 热心回复!
Append丶 + 1 用心讨论,共获提升!
wisoft + 1 谢谢@Thanks!
yan0422 + 1 谢谢@Thanks!
生有涯知无涯 + 1 我很赞同!
云何降伏其心 + 1 我很赞同!
陵南在干嘛 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
dadao815 + 1 + 1 用心讨论,共获提升!
lies2014 + 1 + 1 谢谢@Thanks!
2658599052 + 1 我很赞同!
FleTime + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小兔子我乖 发表于 2020-2-15 10:50
认真学习每一个帖子,因为每一个帖子的含金量都不少,谢谢了
头像被屏蔽
1:1 发表于 2020-2-15 00:18
lies2014 发表于 2020-2-15 01:01
mr-举 发表于 2020-2-15 01:15
厉害了我的哥
抖腿小m 发表于 2020-2-15 01:29

厉害了我的哥
xgq6688 发表于 2020-2-15 01:51
思路真是巧妙。没有做不到的,只有想不到的。
xiaochaochao 发表于 2020-2-15 01:54
感谢分享作为一个单身狗我很喜欢
my52hook 发表于 2020-2-15 04:47
的个收款提示,不错
dadao815 发表于 2020-2-15 05:07
感谢楼主提供的思路!
不苦小和尚 发表于 2020-2-15 06:34
学习一下思路,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-1 06:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表