C语言playsoundw函数,使用inline hook实现修改PC微信通知铃声-哥哥微信来了

本帖最后由 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,找到这个导入函数

55fd2b2273b5a8b4531f72773c469d6e.gif

1.jpg (92.45 KB, 下载次数: 1)

2020-2-14 23:52 上传

然后按enter回车键,查找函数调用参考

55fd2b2273b5a8b4531f72773c469d6e.gif

2.jpg (33.65 KB, 下载次数: 0)

2020-2-14 23:52 上传

因为我多次调试过了,所以知道是第一个,如果是第一次,请全部下断,然后让朋友给你发消息,会断下的那个就是播放声音的调用处

55fd2b2273b5a8b4531f72773c469d6e.gif

3.jpg (46.02 KB, 下载次数: 1)

2020-2-14 23:53 上传

然后我们看他的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载入看看

55fd2b2273b5a8b4531f72773c469d6e.gif

4.jpg (9.93 KB, 下载次数: 1)

2020-2-14 23:59 上传

然后OD反编译一下,得到如下代码

55fd2b2273b5a8b4531f72773c469d6e.gif

5.jpg (43.48 KB, 下载次数: 1)

2020-2-15 00:01 上传

剩下的就是照着抄就可以了

[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

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

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

修改完毕后的图:

55fd2b2273b5a8b4531f72773c469d6e.gif

6.jpg (190.74 KB, 下载次数: 0)

2020-2-15 00:09 上传

然后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的话,如果微信资源文件更新导致地址变更就凉了,这点区别大家知晓一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值