[企业微信]关于群发上限的研究及绕过

poi2022-05-27软件331

9.jpg


企微群发有限制,但是公司销售每天都要群发数千人。9个9个发不现实。

虽然也有手动卡掉这个限制的存在,但让新人销售学这个也太折腾我了...手把手都得教半天


一怒之下把企微拖入od逆向,突然想起来,哦,我不会啊。

对od的认知仅限于查找弹窗,jmp跳过验证.......


唉,还是老实搜一下把,万一前辈造好了轮子呢?

github逛一圈,中文英文都搜了一遍,全网居然tmd没有?

有一些企微HOOK的,也没有群发突破上限的功能

行吧。


直接上万能的Cheat Engine,反复横跳抓到两个内存地址。

抓到内存后,检测是啥改写了这两个地址。

(试过直接改数值,企微直接崩溃了......)





运气挺好,一个是DuiLib的地址,另一个直接就是基址+偏移的存在!

其实下面直接就显示了,WXWork.exe+398F56(企微版本:4.0.6.6516)

经过测试,有关上限的控制确实是这个地址。

直接把这段汇编空指令替换完事,完美突破群发9个的限制。


只是这样也不行啊,我总不能叫销售人手一个CE,用这么麻烦的方式修改吧...还不如手动卡bug!

所以又撸了一段代码,直接把 90 90 90 5D 写到WXWork.exe+398F56这个地址去。

90 90 90代表汇编的nop指令,啥都不做

就实现了,当企微版本是 4.0.6.6516 的情况下,运行此程序就可以直接突破群发9个的限制。


那问题又来了,企微未来更新呢?我tm还得重写?别人还得重下?

这个偏移量应该会根据版本变化而变化的。

拿4.0.0.6008版本试了下,果然偏移变成了350816。(WXWork.exe+350816)


又瞅了眼汇编,直接搜这个字节数组确定地址,直接把 90 90 90 5D 写进去不就完事了?




3.jpg


结果用CE搜89 41 10 5D(长度为4的字节数组)出来一大堆数据...那不行啊。

继续往后加,一直加到16位,此时搜出来只有唯一地址了!

89 41 10 5D C2 04 00 CC CC CC 55 8B EC 83 EC 08

根据搜出来的地址,再写入 90 90 90 5D,完事。

当然也可以写16位长度,就是没啥必要。

90 90 90 5D C2 04 00 CC CC CC 55 8B EC 83 EC 08

上面说了一大堆实现原理,下面上优化后的代码。

本代码为按键精灵编写,调用了大漠插件。



PutAttachment "c:\poi","*.*"
PutAttachment ".\Plugin", "RegDll.dll"
Call Plugin.RegDll.Reg("c:\poi\dm.dll")
Set dm = createobject("dm.dmsoft")
dm_ret = dm.SetPath("C:\poi")
//设置附件目录
ver = dm.Ver()
//以上为注册大漠插件

/////////////===================/////////////
//找多开企微所有句柄
HwndEx = Plugin.Window.Search("企业微信")
TracePrint "句柄数组为:" & HwndEx
//下面这句用于分割字符串,将获得的句柄组分割   
dim MyArray
MyArray = Split(HwndEx, "|")   
If UBound(MyArray)>=0 Then  
    i=0   
    For UBound(MyArray)   
        //下面这句将字符串转换成数值   
        TracePrint "第 " & i + 1 & " 个窗口句柄为:" & Clng(MyArray(i))
        hwnd = Clng(MyArray(i))
        result = dm.FindData(hwnd,"00000000-FFFFFFFF","89 41 10 5D C2 04 00 CC CC CC 55 8B EC 83 EC 08")
        TracePrint "企微检测地址为" & result
        dm_ret = dm.WriteData(hwnd, result, "90 90 90 5D")
        a = dm.ReadData(hwnd, result, 4)
        TracePrint a
        i=i+1   
    Next  
End If
EndScript
/////////////===================/////////////




前面都是释放附件,注册大漠插件。用的免费的3.1233版本。


因为销售都有多开的需求,所以得根据标题查找所有企业微信的句柄,保存至数组 HwndEx[] 


随后遍历该数组,遍历的同时根据遍历出来的句柄 HwndEx[i] 来查询

"89 41 10 5D C2 04 00 CC CC CC 55 8B EC 83 EC 08"

这个字节数组的当前地址,保存至 result


继续用当前句柄 HwndEx[i] ,将 90 90 90 5D 写入查到的地址 result 中。


写完了再查一下这个地址,调试输出(TracePrint)看看是不是修改过的值。


本质上这个程序还是demo,拿一个按键精灵给别人用,缺点太多了....

实际上能调用大漠插件的方式有很多,易语言,c,c#,python啥的都可以。

但是个人电脑上只有按键精灵,还是前几天给朋友更新游戏辅助才下载的

后续打算改成vb6版,整合进常用工具箱(挖坑中)。

还没用过vb动内存。应该可以吧。