文章目录如何实现自动添加好友分享名片定位加好友call相关思路定位微信加好友call定位加好友call的微信ID定位微信加好友call验证加好友call微信加好友call的分析添加名片call参数区别一区别二分析接收名片消息代码实现自动添加好友分享名片拓展实现自动聊天思路实现自动同意好友请求思路实现自动收款思路如何实现自动添加好友分享名片1.在我的成品WeChatRobot里面实现了四个自动系列的功能,自动添加好友分享名片,自动收款,自动同意好友请求,还有自动聊天。今天分享一下如何实现自动添加好友分享名片。其他的三个功能思路大致相同。
2.想要实现自动添加好友分享的名片的功能,首先需要找到加好友的call,分析加好友需要用到哪些参数,然后在接收到好友名片推送的时候,取出这些参数,调用加好友的call。这样就能实现自动添加好友分享的名片了
定位加好友call相关思路3.首先思考一下一个加好友函数背后的编程逻辑,肯定是需要传入两个参数,第一个参数是需要添加好友的微信ID,第二个参数是加好友时发送给对方的消息。当我们点击发送朋友验证时,就会调用这个加人的call。
4.那么我们就可以从需要添加的好友的微信ID入手,先在当前窗口找到添加好友时用到的那个微信ID,然后通过对微信ID下内存访问断点,点击发送朋友验证,触发断点,再通过栈回溯,从而找到加人的call。
定位微信加好友call定位加好友call的微信ID5.首先用CE搜索已删除好友的微信ID,将所有地址添加到下方地址栏
6.接着点击添加发送朋友验证,你会发现这是CE的结果有变化。这是因为当我们点击的时候,客户端会拿到我们当前点击的微信ID,然后放到一个变量里面,将这个变量作为参数传入到函数中。所以我们点击之后搜索的结果一定会有这个变量,接下来我们要做的就是找到这个变量。
7.那么怎么找到这个变量呢?通过下方地址栏的点击之前的数据和现在搜索结果中的点击之后的数据进行对比,就能找到作为参数传入到加人call里面的微信ID。
8.通过这个在线的文本对比的网站http://www.jq22.com/textDifference,放入点击前和点击之后的数据(A是点击前,B是点击后),就能筛选出两组数据中不同的地方。我们需要找到点击后的数据中有的地址,点击前的数据中没有的地址。
9.我这里找到了两处点击后不同的地址,接着我们直接在CE中搜索这两个地址,看看有哪些地址保存有这两个地址
10.从搜索结果中可以看到第一个地址已经变成了其他字符串,而第二个地址已经被一个指针保存,所以可以确定这个地址就是我们要的传入加人call的微信ID的地址。哈哈,这一步需要有点耐心,我也是找了好几次才找到。
定位微信加好友call11.使用OD附加微信,在找到的微信ID地址下内存访问断点,接着点击确定,此时断点断下,删除内存访问断点
12.这里我们看到在堆栈中的第二个返回地址中传入了要添加的好友的微信ID,那么这里就非常有可能是我们要找的加人的call
验证加好友call13.我们在这里下一个断点,然后F9运行,让程序再次断在这个位置
14.此时我们修改这个微信ID,如果此时被添加的微信没有收到加好友消息的话,那么就说明这个call就是我们需要的call
15.F9运行,此时显示由于对方隐私设置,你无法将其添加至通讯录,说明这个call就是我们要找的加好友的call了
微信加好友call的分析16.接下来分析一下加好友的call的参数
17.ebx指向的是微信ID的结构体,这个结构体是有五个成员的
18.中间的这一句汇编指令movdwordptrss:[ebp-0xE0],esp经过测试可以不需要写。
19.然后这一句将0xFFFFFFFF压入了堆栈,也就是-1。但是我们在这个call所在的寄存器并没有找到加好友时发送的消息。这个结构体是必须要找到的,所以我们继续分析它上面一个call
20.上面一个call传入的是消息内容,并没有拿到消息的结构体,所以我们继续再分析这个call上面的一个call
21.单步步过这个函数,这里push了一个6,这个参数是代表添加的渠道,群外加好友是6,群内加好友的E,名片推送是0x11
22.另外,这个call写代码调用的时候会比较麻烦,需要同时调用6个call,6个call里面少了任何一个微信都会奔溃
添加名片call参数23.微信添加好友名片的call和加好友用的是同一个call,区别只有两点。我们点击添加一个好友分享的名片,让程序断下。
区别一24.这个地方传入的是0x11而不再是6
区别二25.这个地方传入的是V1结构体而不再是微信ID的结构体。而V1的结构体我们可以在收到名片推送消息的时候,从消息结构体中获取。
分析接收名片消息26.加好友的call我们已经找到了,而且也已经知道需要传入哪些数据,那么下一步就是去接收名片消息的地方,去拿到这些数据。
27.直接来到接收消息的地方,至于怎么找到接收消息的call,请看我上一篇文章
28.这里直接给出偏移2.6.8.52版本的接收消息的偏移是0x315E98
29.直接来到接收消息的地方,在这里下断点,然后用小号分享一个名片,让程序断下
30.程序断下后,我们查看[[esp]]里面的内容,这里面保存了接收到的消息参数,往下拉
31.这里有消息发送者的微信ID和xml格式的消息内容
32.数据窗口跟随进去,里面有我们需要的V1数据,至于其他的数据我们并不关心。OK,分析到这里,自动添加好友分享的名片基本也就完成了。接下来贴代码
代码实现自动添加好友分享名片33.第一步取出V1数据我这里用的是字符串查找和匹配的方法,你们可以xml解析库来解析数据
voidAutoAddCardUser(wstringmsg){//拿到V1intv1stratmsg.find(L"v1_");intv1endmsg.find(L"@stranger");wstringv1;v1msg.substr(v1strat,v1end-v1strat+9);//调用添加名片好友函数AddCardUser((wchar_t*)v1.c_str(),(wchar_t*)L"快通过~快通过~吼吼!");}34.第二步调用call添加好友
voidAddCardUser(wchar_t*v1,wchar_t*msg){DWORDdwWeChatWinAddr(DWORD)GetModuleHandle(L"WeChatWin.dll");DWORDdwParam1dwWeChatWinAddr+WxAddWxUserParam1;DWORDdwCall1dwWeChatWinAddr+WxAddWxUserCall1;DWORDdwCall2dwWeChatWinAddr+WxAddWxUserCall2;DWORDdwCall3dwWeChatWinAddr+WxAddWxUserCall3;DWORDdwCall4dwWeChatWinAddr+WxAddWxUserCall4;DWORDdwCall5dwWeChatWinAddr+WxAddWxUserCall5;structTextStruct{wchar_t*pStr;intstrLen;intstrMaxLen;};TextStructpV1{0};pV1.pStrv1;pV1.strLenwcslen(v1)+1;pV1.strMaxLen(wcslen(v1)+1)*2;char*asmV1(char*)pV1.pStr;charbuff3[0x100]{0};char*buffbuff3;__asm{subesp,0x18;movecx,esp;movdwordptrss:[ebp-0xDC],esp;pushdwParam1;calldwCall1;subesp,0x18;moveax,buff;movdwordptrss:[ebp-0xE4],esp;movecx,esp;pusheax;calldwCall2;push0x11;subesp,0x14;movecx,esp;movdwordptrss:[ebp-0xE8],esp;push-0x1;movedi,msg;pushedi;calldwCall3;push0x2;subesp,0x14;movecx,esp;movdwordptrss:[ebp-0xE0],esp;movebx,asmV1;pushebx;calldwCall4;movecx,eax;calldwCall5;}}拓展实现自动聊天思路35.首先在好友消息的时候保存一下好友的微信ID,然后调用获取到好友的消息内容,并且将消息内容转发给图灵机器人的公众号
36.接着拿到图灵机器人回复的内容,将内容转发给好友
37.这样就实现了自动聊天
实现自动同意好友请求思路38.我们在接收消息的地方下个断点,让好友发送请求时断下,并且查看[[esp]]里的消息内容
39.这里保存有两个重要的数据,一个是V1,一个是V2,我们只要在这个地方取出V1和V2,然后调用同意好友请求的call,就能实现自动同意好友请求
40.同意好友请求的call,我这里直接给出偏移微信2.6.8.52版本
#defineWxAgreeUserRequestCall10x1865B0;//同意好友请求#defineWxAgreeUserRequestCall20x4F4F0;//同意好友请求#defineWxAgreeUserRequestCall30xCE4F0;//同意好友请求#defineWxAgreeUserRequestCall40x16BD40;//同意好友请求#defineWxAgreeUserRequestParam0x126E050;//同意好友请求41.这里需要同时调用4个call,接着附上代码
//取出V1和V2voidAutoAgreeUserRequest(wstringmsg){intv1stratmsg.find(L"v1_");intv1endmsg.find(L"@stranger");wstringv1;v1msg.substr(v1strat,v1end-v1strat+9);//找到v2intv2stratmsg.find(L"v2_");intv2endmsg.rfind(L"@stranger");wstringv2;v2msg.substr(v2strat,v2end-v2strat+9);//调用同意好友请求的callAgreeUserRequest((wchar_t*)v1.c_str(),(wchar_t*)v2.c_str());}//调用同意好友请求callvoidAgreeUserRequest(wchar_t*v1,wchar_t*v2){structv1Info{intfill0;wchar_t*v10;intv1Len;intmaxV1Len;charfill2[0x41C]{0};DWORDv2{0};};structv2Info{charfill[0x24C]{0};DWORDfill30x25;charfill4[0x40]{0};wchar_t*v2;intv2Len;intmaxV2Len;charfill2[0x8]{0};};DWORDbase(DWORD)LoadLibrary(L"WeChatWin.dll");DWORDcallAdd1base+WxAgreeUserRequestCall1;DWORDcallAdd2base+WxAgreeUserRequestCall2;DWORDcallAdd3base+WxAgreeUserRequestCall3;DWORDcallAdd4base+WxAgreeUserRequestCall4;DWORDparamsbase+0x126E050;DWORD*asmP(DWORD*)params;v1InfouserInfoV1{0};v2InfouserInfoV2{0};userInfoV1.v2(DWORD)userInfoV2.fill;userInfoV1.v1v1;userInfoV1.v1Lenwcslen(v1);userInfoV1.maxV1Lenwcslen(v1)*2;userInfoV2.v2v2;userInfoV2.v2Lenwcslen(v2);userInfoV2.maxV2Lenwcslen(v2)*2;char*asmUser(char*)userInfoV1.fill;charbuff[0x14]{0};charbuff2[0x48]{0};char*asmBuffbuff2;__asm{movecx,asmUser;push0x6;subesp,0x14;pushesp;callcallAdd1;movecx,asmUser;leaeax,buff;pusheax;callcallAdd2;movesi,eax;subesp,0x8;movecx,asmP;callcallAdd3;movecx,asmBuff;movedx,ecx;pushedx;pusheax;pushesi;callcallAdd4;}}实现自动收款思路42.同样在接收消息的地方下个断点,接收转账消息,并且查看[[esp]]里的消息内容
43.这里重要的数据只有一个,就是这个transferid,拿到这个转账ID和微信ID,然后调用收款的call,就能实现自动收款了
44.这里提供收款call的偏移,微信2.6.8.52版本
#defineWxCllectMoneyCall10x676B10//收款#defineWxCllectMoneyCall20x676B90//收款45.接着附上代码
//取出转账IDvoidAutoCllectMoney(wstringmsg,wchar_t*wxid){//找到transferid字符串的位置intpos1msg.find(L"transferid");//找到]]/transferid字符串的位置intpos2msg.find(L"]]/transferid");//取出多余的字符串长度wstringnoneedL"transferid![CDATA[";intnoneedLennoneed.length();//取出转账IDwstringtransferid;transferidmsg.substr(pos1+noneedLen,(pos2-pos1)-noneedLen);//调用收款call实现自动收款CllectMoney((wchar_t*)transferid.c_str(),wxid);}//调用收款callvoidCllectMoney(wchar_t*transferid,wchar_t*wxid){structCllectMoneyStruct{wchar_t*ptransferid;inttransferidLen;inttransferidMaxLen;charfull[0x8]{0};wchar_t*pwxid;intwxidLen;intwxidMaxLen;charfull2[0x8]{0};};CllectMoneyStructcllect;cllect.ptransferidtransferid;cllect.transferidLenwcslen(transferid)+1;cllect.transferidMaxLen(wcslen(transferid)+1)*2;cllect.pwxidwxid;cllect.wxidLenwcslen(wxid)+1;cllect.wxidMaxLen(wcslen(wxid)+1)*2;char*asmBuff(char*)cllect.ptransferid;DWORDdwWeChatWinAddr(DWORD)GetModuleHandle(L"WeChatWin.dll");DWORDdwCall1dwWeChatWinAddr+WxCllectMoneyCall1;DWORDdwCall2dwWeChatWinAddr+WxCllectMoneyCall2;__asm{subesp,0x30;movecx,esp;moveax,asmBuff;pusheax;calldwCall1;calldwCall2;addesp,0x30;}}
PC微信逆向实现自动添加好友分享名片-微信加好友工具-微信小程序怎么搭建
浏览量:3484
时间:
来源:xu37841
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。
最新资讯
-

即速应用,赋能企业玩转微信小程序智慧经营
作为国内领军的智慧商业经营服务商,即速应用始终秉承“让每个企业都拥有自己的智慧店铺”的愿景,持续赋能更多企业玩转智慧经营。即速应用旗下拥有“小程序搭建工具-即速应用”、“私域流量专家-即客云”等产品,帮助商家打通互联网全生态营销闭环。 -

即客云2.0重磅更新,让微信小程序运营更简单!
即客云作为一款基于企业微信的第三方工具,现从多维度提供超过30种功能,自上线以来,已服务多家企业,受到一致好评。近期,我们根据客户反馈和市场调研正式推出升级版 即客云2.0!更新了私域运营SOP,群日历功能,批量拓客,客户雷达,消息推送,个人欢迎语,帮助企业更好运用企业微信;同时提升了社群运营工作标准化,提升运营效率,帮助企业实现客户增长,玩转私域流量。 -

零代码 + AI 双轮驱动|即速应用解锁人工智能小程序开发新范式
无需代码、无需 AI 算法功底,普通人也能快速搭建智能小程序。即速应用将人工智能与零代码开发深度融合,推出 AI 智能生成能力,用户通过自然语言描述需求,AI 自动生成小程序页面、功能模块与后台配置,覆盖商城、预约、同城、社区团购等全场景。平台内置 AI 智能推荐、智能客服、用户画像分析等能力,一键对接微信生态,打通视频号、企业微信、短信跳转,帮企业快速落地 AI 应用,抢占智慧经营先机,让每家企业都拥有 AI 驱动的智慧店铺。










