吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11568|回复: 106
收起左侧

[原创工具] 【PC钉钉多开】HotPatch及汇编inline hook的应用

  [复制链接]
bester 发表于 2021-2-18 17:20
本帖最后由 bester 于 2021-2-23 14:15 编辑

钉钉多开的实现拜读了论坛JuncoJet大哥的帖子,大哥用的是iat hook,需要用到loadpe修改导入表静态加载DLL,每次升级要修改一次钉钉略显麻烦,有点破坏了文件完整性

那我这个人喜欢优雅一点,采用inline hook技术,但又不想带个DLL,有点强迫症~   主要是远程关闭互斥体句柄这事干得不优雅,对我来说学不到啥新玩意,不想造轮子

之前的企业多开和微信多开用了异常调试技术,有反馈说多开以后程序会卡住,不晓得啥原因,这次直接实践一下所谓微软官方提出的安全hook机制的“热补丁”Hot Patch hook,然后用汇编命令判断互斥体名称,修改堆栈

所谓热补丁技术,不是啥新鲜玩意,上图大家自己看,原始长这样
1.png

Hot Patch 以后

2.png

好处是什么呢,只需要改动2个字节,且不需要频繁挂钩脱钩,对于多线程来说更为安全,万一在你挂钩的时候,有个子线程调用该函数就gg,主要是该技术只需要挂钩一次,可不脱钩,如果非要脱钩也是在我们干完活以后的事了

然后我们直接看补码处是怎么操作的吧,我这边是直接使用了virtualallocEx申请了一段程序空间

006FF8DC   02C62610  \MutexName = "Local\{{239B7D43-86D5-4E5C-ADE6-CEC42155B475}}DingTalk_loginframe"

006FF8DC   008CA498  \MutexName = "Local\{{239B7D43-86D5-4E5C-ADE6-CEC42155B475}}DingTalk"

3.png

[Asm] 纯文本查看 复制代码
00F50000    60              pushad  //先是保存eflags环境,为什么没有保存寄存器环境呢,是因为我懒,而且也没有使用到寄存器
00F50001    83F8 00         cmp eax,0x0  //此时eax的值 保存着互斥体的地址,所以判断是否为0,也就是判断是否存在互斥体
00F50004    74 08           je short 00F5000E //为0就直接跳到popad 直接调用原函数了,
00F50006    8138 4C006F00   cmp dword ptr ds:[eax],0x6F004C //这里是判断互斥体的前4个字节,如上面有写互斥体名称 也就是判断互斥体是否为Loca 这4个字母
00F5000C    74 06           je short 00F50014   //如果不是就调用原函数
00F5000E    61              popad
00F5000F  - E9 1ED69475     jmp KernelBa.7689D632
00F50014    803D 5A00F500 0>cmp byte ptr ds:[0xF5005A],0x0   //这里的0xF5005A 保存的是一个写入标志,因为有两个不同的互斥体名,不判断的话会写入同一个互斥体名,就多开不了了,第一次写入1111,第二次写入2222 这个
00F5001B    74 0B           je short 00F50028
00F5001D    61              popad
00F5001E    C74424 0C 6400F>mov dword ptr ss:[esp+0xC],0xF50064      ; UNICODE "Local\{{8B69AE66-2222-2222-2222-2A53E84F7C33}}Ding"  //这里是伪造的互斥体名称,2222是固定的,剩下的就是随机
00F50026    EB 12           jmp short 00F5003A    //这里跳到  00F5003A 的意思是脱钩,因为在API函数那里我们有挂钩,干完了活就该脱钩,有挂钩就有脱钩是个好习惯
00F50028    C605 5A00F500 0>mov byte ptr ds:[0xF5005A],0x1    //如果之前写入过了1111这个互斥体,这里就会有标志了,上面那个判断就知道我们写过了 就会走2222这个互斥体
00F5002F    61              popad
00F50030    C74424 0C D200F>mov dword ptr ss:[esp+0xC],0xF500D2      ; UNICODE "Local\{{A9725700-1111-1111-1111-77EFA6D4383A}}Ding"  //这里是第一次修改的互斥体
00F50038  ^ EB D5           jmp short 00F5000F
00F5003A    66:C705 30D6897>mov word ptr ds:[KernelBa.CreateMutexW],>  //脱钩,写入NOP,那个API头2字节不写回去也可以正常调用,但是一般是写回原来的字节,我懒
00F50043  ^ EB CA           jmp short 00F5000F



4.png

讲完原理,知道大家都想要成品,也准备好了

测试环境:钉钉v6.0.3 + windows 10 x64 v2004 +火绒(加vmp的也不报毒)

编写环境:易语言,以后考虑用C++重写一份,要源码的也可以丢出来

已知问题:360报毒是因为加了vmp资源保护,别的保护都没开,为了保护版权而已,其他没别的,都是练手的小玩意


使用方法:
写死了两个路径:
D:\Program Files (x86)\DingDing\main\current_new\DingTalk.exe  //升级安装是这个路径
D:\Program Files (x86)\DingDing\main\current\DingTalk.exe  //首次安装是这个路径,

如果你的钉钉不是这两个路径,也可以自定义,桌面新建一个path.txt,里面的内容就填D:\Program Files (x86)\DingDing\main\current\DingTalk.exe 这样就可以了,自动读取文本的路径的。

哦对了,你卸载钉钉 再重新下载,就会走上面那个首次安装的路径,前提是安装的时候把C盘改成D就可以了

优先是判断上面两个路径,如果都不存在才会读txt文本

差不多就这样,自己玩吧,看情况负责售后  上班无聊再说

5.png

7.png


钉钉多开小工具.vmp.rar (891.53 KB, 下载次数: 1115)

免费评分

参与人数 14吾爱币 +20 热心值 +10 收起 理由
po1718 + 3 谢谢@Thanks!
牧鸢 + 1 + 1 我很赞同!
Gxxxxxxxxxxxxxx + 1 鼓励转贴优秀软件安全工具和文档!
13666068803 + 1 + 1 谢谢@Thanks!
biseshadow + 1 + 1 我很赞同!
猫尾男孩 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
indextank + 1 热心回复!
冬日可爱~ + 1 谢谢@Thanks!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
chao8709 + 1 + 1 热心回复!
朱朱你堕落了 + 1 + 1 用心讨论,共获提升!
不着调调 + 1 谢谢@Thanks!
li6893 + 1 用心讨论,共获提升!
yixuezhuihan + 1 + 1 谢谢@Thanks!

查看全部评分

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

头像被屏蔽
我去年买了各表 发表于 2021-2-23 22:11
提示: 作者被禁止或删除 内容自动屏蔽
Closeriu 发表于 2021-3-15 10:10
我有个方法可以同时安装两个钉钉,什么都不需要改,本人萌新一个,初来论坛不久。如果有人需要,可以开贴细说,感谢楼主地分享
ygq170063 发表于 2021-6-2 10:51
兄弟,你好,请你一个事情,希望白忙之中抽空看一下,帮忙解答一下,非常感谢。
因工作原因我需要多开钉钉,然后,我用了你的这个方法,好像还是打不开多个钉钉,原因是因为我钉钉的安装目录是自定义的。你在下方写了如果自定义的话桌面就新建一个path.txt文件,这个文件,后缀到底是txt还是ini?另外这个文件是否需要和vmp文件放在一个文件夹下面还是随便放哪里都可以。还是说都得放到钉钉目录下?我们经过我的测试,用您自定义的这个方法并没有成功,而且,您那边自定义写的还是默认的安装路径,那,path里面到底是写默认路径,还是写自定义的路径呢?



使用方法:
写死了两个路径:
D:\Program Files (x86)\DingDing\main\current_new\DingTalk.exe  //升级安装是这个路径
D:\Program Files (x86)\DingDing\main\current\DingTalk.exe  //首次安装是这个路径,

如果你的钉钉不是这两个路径,也可以自定义,桌面新建一个path.txt,里面的内容就填D:\Program Files (x86)\DingDing\main\current\DingTalk.exe 这样就可以了,自动读取文本的路径的。
yixuezhuihan 发表于 2021-2-18 17:36
收藏了,很实用
潋天堂 发表于 2021-2-18 17:37
膜拜大佬
arq2020 发表于 2021-2-18 17:44
收藏备用了,希望以后有用
ddx123 发表于 2021-2-18 17:48
多开可以
t1r0 发表于 2021-2-18 17:55
有mac下使用的吗
々繁星闪烁々 发表于 2021-2-18 18:16
66666666
whyy 发表于 2021-2-18 18:20

收藏备用,希望以后有用,谢谢你了哦
taotao8070 发表于 2021-2-18 18:26
我来学习学习这个怎么用?
头像被屏蔽
冰棍好烫啊 发表于 2021-2-18 19:06
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-26 19:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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