本帖最后由 次谐波 于 2026-2-5 13:56 编辑
抖Y出品的IM即时通讯软件,没什么知名度,当然也没有什么人用。
- 软件名称:抖Y聊天
- 软件本体:aHR0cHM6Ly9pbWRlc2t0b3AuZG91eWluLmNvbS8=
- 软件版本:1.1.30
- 软件架构:Electron
- 调试软件:x64dbg
- 关键DLL:main.dll
0x00.前言
朋友有多开需求,让我给分析分析,于是有了这篇文章,用于记录流程。
0x01.关于限制多开的方式
在Windows下限制多开的方式,我们参考下同类型的微信,这也有比较多的文章分析过,而常见的无外乎那么几种:
1、检测窗口是否开启,主要Api:FindWindowExW;
2、创建互斥体,主要Api:CreateMutexW;
3、创建独占文件,主要Api:CreateFileW。
微信这些方式都用过,而抖Y聊天也用的这些方式。
0x02.限制多开的流程
经过分析,抖Y聊天限制多开的流程为:
1、检测窗口句柄,判断是否已经运行;
2、如果找到窗口则激活窗口,没找到窗口,创建互斥锁;
3、再次检测窗口句柄,判断是否已经运行;
4、如果找到窗口则激活窗口,没找到窗口,创建文件锁;
5、创建文件成功,则开启一个新的窗口,否则启动失败。
0x03.逆向过程
经过测试,多次开启抖Y聊天,会重新激活已开启的窗口,激活窗口要先查找窗口句柄,那么我们就从FindWindowExW查找窗口句柄开始入手。
1、下断点
①先正常开启聊天软件。这里我们直接运行douyinim.exe程序,而不是douyinim_launcher.exe启动器程序,通过启动器运行将同步开启后台常驻守护进程(开始耍流氓了)。
②打开x64dbg附加登录窗口,下个FindWindowExW断点,输入 bp FindWindowExW 回车,结束终止软件。
③再运行douyinim.exe程序,正常开启一个聊天软件,让调试时走双开失败的流程。
④打开x64dbg重新运行软件。
2、运行到FindWindowExW断点处
可以看到,FindWindowExW类名和窗口名称分别是:”Chrome_MessageWindow”和”C:\Users\***\AppData\Roaming\douyinim”
3、运行到用户代码
这里没有什么信息。
4、继续执行返回到上一层
一路F8继续向下执行,返回到上一层,可以看到这里调用了0x00007FFD68206D10 就是调用经过封装的FindWindowExW 方法。
同时可以看到, 在0x00007FFD68047649 调用了CreateMutexW 方法创建了互斥锁, 在0x00007FFD68047778 调用了CreateFileW 方法创建了文件锁, 很明显这里就是限制多开的主要流程。
5、继续向下执行
到 0x00007FFD6804760E 关键位置1。
这里判断是否找到窗口,找到则跳转,先将ZF标志位改为1,让流程继续执行。
6、继续向下执行
到0x00007FFD68047649 位置。
这里创建了一个名为 “Local\\douyinimProcessSingletonStartup” 的互斥锁,
但是这是本地互斥锁,对多开没有影响,略过。
7.继续向下执行
到0x00007FFD680476DA 关键位置2
这里再次调用了0x00007FFD68206D10 的FindWindowExW方法查找窗口,
我们再次修改ZF 标志位,让流程继续执行
8、继续向下执行
到0x00007FFD68047778 位置,这里调用CreateFileW 创建了名为 lockfile 的文件,通过独占lockfile 文件,实现禁止多开。
9、继续向下执行
到0x00007FFD680477F4 关键位置3
查询CreateFileW Api 得知创建文件失败的返回值是INVALID_HANDLE_VALUE,这个值就是0xFFFFFFFFFFFFFFFF,这里判断是否创建失败,跳出了流程。 我们修改ZF标志位,继续执行。
10、按F9 执行完流程
成功开启2个登录窗口。
0x04.关键跳转位置
到此整个限制多开流程就走完了,我们找到了3个关键跳转位置
1、0x00007FFD6804760E 查找窗口的判断跳转;
2、0x00007FFD680476DA 再次查找窗口的判断跳转;
3、0x00007FFD680477F4 创建文件失败的判断跳转。
后续只要将这三个跳转nop掉就可以实现多开了。
0x05.无法登录多个账号的问题
经过实测我们发现虽然多开成功了,但是却无法登录多个账号,具体原因是:
1、抖Y聊天登陆账号后,就不会出现确认登录窗口,而是直接进入了主窗口,这也导致了登录账号后每次多开都是以相同的账号直接进入主窗口。
2、点击退出登录,本地登录记录失效,所有窗口将同步退出登录。
0x06.账号问题的解决方案
那么,如何解决账号登录的问题?
实际上本地的账号信息保存在"C:\Users\用户\AppData\Roaming\抖音聊天\db\douyinchat_kv" 内, 所以我们要从这个文件入手。
这里提供几个方案:
1、删除法
登录账号后,直接将douyinchat_kv 和douyinchat_kv.crc 文件解锁删除,就可以登录新的账号。 2、备份替换法
在方法1的基础上优化,登录账号后,备份保存douyinchat_kv 和douyinchat_kv.crc 文件。后续将需要登录哪个账号直接将对应账号的文件替换进去即可。 3、禁止缓存法
通过逆向发现douyinchat_kv文件的创建和win32-x64-mmkv.node库高度关联。 位置在...\resources\app.asar.unpacked\node_modules\@byted\electron-mmkv\Release\win32-x64-mmkv.node。 那么我们直接删除这个库,后续就无法再缓存账号登录信息,但是这样每次多开都需要重新登录。 4、共存法
逆向修改win32-x64-mmkv.node文件,将账号信息缓存到不同的文件内,实现多账号共存,方法比较繁琐,这里不在赘述。
0x07.总结
抖Y聊天用的也是常规的禁止多开方式,绕过方式也比较简单,但是需要另外处理账号登录的问题。
|