预备东西:Cheat Engine,OllyDbg,IDA。
前一篇(微信PC端技术研讨:保存谈天语音)现已说过CE是什么,也运用CE研讨了怎么保存微信语音,这篇持续运用CE和OD来研讨一下微信的音讯发送接口。
思路大约是这样:在音讯框中输入内容之后,通过CE找到内容地址,然后通过内存断点来找到发送该数据的相关代码,然后找到音讯发送接口。
二、剖析进程查找要害数据地址在输入框输入一个比较特别的文字内容(避免搜索时太多内存选项)后,运用CE搜索该内容地址。
由于现已知道切当的音讯内容,很简略就能通过CE的Exact value->String来找到内容地址,修正内容屡次选择,毕竟留下两个成果(详细操作见上一篇文章)。
通过CE修正一下内存的内容,微信输入框中内容同步改动,说明这个内存地址就是输入框中内容地址,毕竟承认地址是2A1E1A8
。
接着在点击发送按钮之后,输入框内容会被清空,所以榜首主意就是对内存地址下内存写入断点,可以找到发送进程中清空内容的代码。
翻开OD现在,让咱们先在名为Ignite的文件中创建几个不同扩展名的文件。正如你所看到的,我创建了两个txt文件,两个pdf文件以及两个jpg文件。假设你想在zip文件中移动这些不同扩展名的文件,就需求运用-m选项。你可以通过实行以下指令来移动zip文件中的全部文本文件。 ,挂载到WeChat.exe进程,在右下角数据窗口Ctrl+G输入2A1E1A8
,然后右键选择断点->内存写入断点。
F9让OD跑起来,然后点击微信发送按钮,没想到意外发生了,输入框内容清空了,可是断点却没有触发。
怎么回事?断点弄错?地址找错?暂时没有答案。
用CE屡次重复前面的操作,地址仍然是这个地址,断点就是不触发。
通过OD检查到,在输入框清空后,2A1E1A8
的内容的确没有改变,和发送前相同,并且在从头输入新的内容之后,该内存内容同步更新。
所以定论就是输入框内容地址的确是2A1E1A8
,可是清空输入框并不是清空该内存内容,猜想编辑框或许通过操控字符串长短来操控闪现的,清空输入框内容就是设置字符串长度为0。
清空输入框没有发展了,那怎么办呢?
测验去找了其他数据,比方发送按钮的发送(S)
,发送按钮的提示内容不能发送空白内容
等等,数据地址也可以很快找到,可是和咱们的剖析方针偏的太远了。
几番折腾后,作罢。
转念一想,清空不可,发送总的读取输入框中内容吧,那换成内存拜访断点测验一下。
仍然是在右下角数据窗口Ctrl+G输入2A1E1A8
,然后右键选择断点->内存拜访断点。
结束后回到微信界面,没想到直接断下了,我还没点发送按钮呢。依据曾经的经历,下意识就觉得是界面改写闪现文字触发了断点,这或许会影响剖析,底子没 *** 通过发送按钮来触发内存拜访断点。
一般解决 *** 有:
条件断点。也就是屏蔽掉改写界面触发的断点,可是如同内存断点不支撑条件断点啊,要么通过脚原本结束,好费事。
找其他切入点。废话,清空那儿的路都断了,死心吧。
其他我不知道的…
扔掉了一般的解决 *** ,我决议看看本次断点毕竟干嘛了。
注意到断点的方位不是微信模块WeChatWin.dll
中,而是在msftedit.dll
,很少见的一个模块。依据目录可以看到是微软系统的一个模块,姓名中的edit
也可以看出这应该是一个编辑框相关的模块。
可履行模块, 条目 20 基址=6F050000 巨细=0挖矿木马自查0094000 (606208.) 进口=6F05D53D msftedit.<ModuleEntryPoint> 称号=msftedit (系统) 文件版别=5.41.21.2510 途径=C:WindowsSystem32msftedit.dll
如同和咱们的剖析方针很靠近嘛,在OD中数据窗口右键断点->删去内存断点,然后按下Alt+F9回到用户模块领空,也就是越过系统模块的代码,直接回到微信的模块代码中,省过对系统代码的剖析。
看到回来到6E20CCC2
这个地址,上一行代码就是调用msftedit.dll
的函数,咱们对其下一个断点,鼠标点击到6E20CCBF
这行代码,按下F2
下一个int 3
断点,然后F9
越过本次剖析。
OD持续断下,此次直接断在了6E20CCBF
这个方位,可以看到call
调用了msftedit.6F05AD69
,这是个什么函数呢?
已然msftedit.dll
是微软模块,那么必定是有符号的嘛,嘿嘿。
这儿可以直接在OD中加载符号来剖析,运用 *** 是:
1.在WingDbg目录下复制dbgeng.dll,dbghelp.dll,srcsrv.dll,symbolcheck.dll,symsrv.dll,symsrv.yes,总共6个文件至OD目录下。2.翻开OD,设置符号途径。调试--->选择符号途径。3.设置StrongOD的插件选项。选择加载符号。原文:https://blog.csdn.net/sr0ad/article/details/8253311
可是只支撑本地符号,也就是得自己下载了模块对应符号到本地,OD设置符号文件途径后,才干正常运用,有点费事。
我这时候一般就会运用IDA了,由于它会自己在线下载模块对应的符号,很便利。
用IDA翻开msftedit.dll
,等候少许时刻,IDA下载符号,解析等等结束后,咱们去找到msftedit.6F05AD69
对应的函数毕竟是个什么东西。
可是这儿msftedit.6F05AD69
的模块基址是6F050000
,而IDA解析运用的是默许基址0x6FCD0000
,要么修正IDA解析基址为6F050000
,等候IDA从头解析,要么通过偏移核算对应地址。
再解析等太久,直接核算吧,所以要安利我写的一个小东西(偏移核算东西),可以快速核算地址,详细运用见相关文章。
再IDA中按下g,输入6fcdad69
,找到msftedit.6F05AD69
对应函数为CTxtEdit::OnTxInPlaceActivate
。
很明显通过姓名OnTxInPlaceActivate
可以看出是编辑框中文字激活状态(闪现)下就会触发该函数,这不是要点。
要点看CTxtEdit
,显而易见,这就是msftedit.dll
中结束的编辑框的类。
假设写过MFC
相关代码,应该很快就能想到CTxtEdit
必定还有其他读内容、写内容的函数,叫做GetXXX
或许SetXXX
。
在IDA的函数列表中翻看一下,公然很快就找到了CTxtEdit::GetTextEx
和CTxtEdit::SetText
。
但究竟这两个函数是不是编辑框读写内容的函数呢,咱们对这两个函数下断点试试,通过东西算到在ID调试中这两个函数的相应地址为6f068437
和6f056d37
。
在OD的底部指令窗口输入bp 6f068437
和bp 6f056d37
,删掉之前CTxtEdit::OnTxInPlaceActivate
的断点,然后F9
跑起来。
回到微信界面,这次可以正常闪现了,点击发送按钮。OD触发断点,断在了6f068437
也就是CTxtEdit::GetTextEx
上,很明显这是发送函数在读取输入框内容。
此刻的调用仓库是这样的:
调用仓库 地址 仓库 函数进程 / 参数 调用来自 结构0026E280 6F06842D msftedit.6F068437 msftedit.6F068428 0026E3FC //CTxtEdit::GetTextEx0026E400 6E20D239 包括msftedit.6F06842D WeChatWi.6E20D233 0026E3FC0026E43C 6DBD38EB 包括WeChatWi.6E20D239 WeChatWi.6DBD38E8 0026E438 //TxtEdit_GetText0026E5AC 6DC15B65 ? WeChatWi.6DBD3860 WeChatWi.6DC15B60 0026E5A8 //sendBtn_GetText0026E60C 6DC15DEE WeChatWi.6DC15B10 WeChatWi.6DC15DE9 0026E608 //sendbtn_click0026E618 6E20BFB8 WeChatWi.6E20BEF4 WeChatWi.6E20BFB3 0026E6140026E62C 6E20362E WeChatWi.6E20BF90 WeChatWi.6E203629 0026E6280026E6CC 6E203589 WeChatWi.6E2035A7 WeChatWi.6E203584 0026E6C80026E820 6DC53695 ? WeChatWi.6E20352E WeChatWi.6DC53690 0026E81C
在OD中回溯调用仓库盯梢回来到WeChatWi.6E20D239
,看到右侧仓库窗口现已获取到输入框中内容,证明前面的剖析没有问题。
再次回溯两层到WeChatWi.6DC15B60
,可以看到仓库中的参数仍然是获取到的输入框内容。
[0026E5E4] = 0828C070[0828C070 + 4] = 0828CAF0 => a12bcAAAAA
此刻函数首地址是WeChatWi.6DC15B10
,进入到IDA
中对应函数100d5b10
(你要问我为什么此刻进入IDA检查?我只好说其实这个进程花费了许多时刻,一边OD调试,一边IDA辅佐承认等等,进程并没有这么顺畅,篇幅原因省掉),然后按下x回到上层函数,看到如下代码:
看到click
很明显可以看出这就是发送按钮的响应函数了(相关常识可以了解duilib
编程,微信界面是duilib
结束的)。
到现在找到了发送音讯的函数,但还并不是音讯发送接口,这还仅仅界面的操作函数,详细发送音讯接口应该在该函数内部被调用。
有技巧找到发送接口先粗略地在OD中跟一遍WeChatWi.6DC15B10
的代码逻辑,函数许多,无法很快承认哪个函数是音讯发送接口。
截取部分代码感受一下,大约11个函数。依据OD跟的逻辑大约是sendBtn_GetText_10093860
->sub_100DD340
->sub_100C50C0
->sub_10094100
->sub_100DD9D0
->sub_100C4450
->sub_10323DF0
->sub_100DE120
。
if ( sendBtn_GetText_10093860(a1->unk_560, (int)&savedregs, a2, a3, msg) <= 0 )// 这儿是获取msg {  return False; // x //省掉一大段逻辑 } if ( msg[0] != msg[1] ) { // x //省掉一大段逻辑 } if ( sub_100DD340() ) { // x //省掉一大段逻辑 sub_1047C070(&v34, v23); sub_100DB8C0((int)a1_, v34, v35, (int)v36, v37, (int)v38, v39, v40, (int)v41, msg_); } if ( sub_100C50C0((_DWORD *)(a1_->unk_558 + 2528), (int)msg, (int)v43) ) { sub_10094100((_DWORD *)a1_->unk_560);// sub_100DD9D0(msg); sub_100C4450((_DWORD *)(a1_->unk_558 + 2528), (_msg *)msg);// v31 = sub_10323DF0(); sub_100DE120(v31, (int)a1_, (int)sub_100D6C40, 0, v40, (int)v41, msg_);// retn 18 v12 = 1; } else { //省掉一大段逻辑 sub_10108D60(v30, *(&a1_->unk_558 + 1), v33, (int)v34, v35, v36, (int)v37, v38, v39, v40, v41); }
一般通过调试每个函数的参数、回来成果等底子可以猜想到函数功用,然后来找到音讯发送接口。
但这儿我偷闲了,由于参数结构杂乱,一时半会无法找到要害点,有点晕了。
所以我通过扫除法来逐一选择函数,最多11次左右就能找到音讯发送接口。举个比方,假设sub_100DD340
是音讯发送接口,在我手艺屏蔽其功用之后,音讯必定发不出去了,那么我就可以通过看到的成果(是否发送成功)来承认sub_100DD340
是不是要找到的音讯发送接口。
详细屏蔽 *** :
通过IDA或OD进入sub_100DD340
函数内部,找到函数结束,找到retn xx相似代码
用OD在sub_100DD340
函数开端修正汇编代码为retn xx,双击输入retn xx即可
这样sub_100DD340
函数直接在进口就回来了,功用没有了,也保证了函数调用时的栈平衡。
在承认sub_100DD340
并没有影响音讯发送之后,通过右键吊销选择处修正康复修正的内容。
如此重复选择其他的函数,毕竟承认sub_100C4450
为发送音讯函数。代码接口如下:
sub_100C4450((_DWORD *)(a1_->unk_558 + 2528), (_msg *)msg);//
msg
是发送内容,a1_->unk_558 + 2528)
是当时谈天窗口的老友信息,包括wxid
和姓名之类的信息。
但作为接口仍然不行简练,需求结构老友信息,比较杂乱,所以持续深化sub_100C4450
内部,看看是否可以找到最简略的接口,比方:
sendmsg(wxid, msg); //传入发给谁,发什么即可
sub_100C4450
内部仍然很杂乱,运用和前面相同的 *** ,先大致跟一遍履行流程,然后通过扫除法逐一选择。
if ( !sub_100C43D0(msg_.buf, msg_.len, msg_.maxlen, wxid_) )// 是不是满是特别字符rnt等,是回来1,不是回来0{sub_1007D390();msg_packet = sub_102DA4A0((int)wxid, (int)&v67, msg__, &unk, 1);// 数据打包,发送sub_100494E0(msg_packet_, (size_t)msg_packet);//sub_1004B550(&v67); //v11 = sub_102478D0();v12 = sub_10402C10((int)v11);v89 = (void **)v13;if ( sub_10402C10((int)msg_packet_) != v12 || v14 != v89 ){ if ( sub_100C6770(this_) ) // { sub_1004BBF0((int *)&msgpacket);// sub_10056940((int *)&msgpacket, (size_t)msg_packet_);// sub_100C56D0(this___, (size_t)&msgpacket, 1); sub_10081210((LPVOID *)&msgpacket); v16 = sub_100C0EC0(); sub_10247250((int **)v16, (int)path); }}}if ( (signed int)(msg->msgend - (unsigned int)msg->msg) / 0x24 != 1 )v9 = sub_10323DF0();sub_10324E70(v9, msg_.len, msg_.maxlen, (int)wxid_, (int)path);sub_100ADA10(&msg___);
这一次选择屏蔽的 *** 换一种,直接在某个函数履行结束之后,通过jmp
跳到sub_100C4450
结束,假设某次音讯发送成功,毕竟履行的函数就是咱们要的接口。
很走运,这次在第三个函数就找到了音讯发送函数sub_102DA4A0
,看看它的参数:
sub_102DA4A0((int)wxid, (int)&v67, msg__, &unk, 1);sub_102DA4A0@<eax>(int wxid@<edx>, int a2@<ecx>, wxstring *msg, _DWORD *a4, int a5)
下图是调试中看到的数据,承认接口没有问题。至于其他两个参数,通过剖析是用于接纳输出的,没有实践作用,在此不赘述。
如此剖析音讯发送接口的作业结束,找到了和预期底子共同的接口函数。
三、总结篇幅如同有点长了,毕竟做一下此次剖析的总结:
ce找到编辑框中的内容内存
发送后,编辑框内容删去,写断点无效,奇特,猜想通过设置长度操控闪现
改为内存拜访断点,进入界面就会断下,徜徉几回后,决议剖析,没想到找到了要害点CTxtEdit::OnTxInPlaceActivate
知道编辑框运用了msftedit.dll的CTxtEdit的类,用ida找到符号
查询相似getvalue的接口,找到SetText、GetTextEx等,对这两个函数下断点
公然断下,回溯找到了发送的音讯响应函数
详细剖析响应函数,屡次通过retn、jmp扫除,找到真实发送音讯函数,毕竟剖分出接口函数
此次剖析中CE找到地址是榜首步十分要害的点,直接就进入了函数调用仓库内部,对此次剖析作用十分明显。
再就是在发送音讯响应函数内部,逐一剖析找到音讯发送接口函数中,通过修正指令来屏蔽函数功用来承认函数功用,比每个函数去剖析参数猜想承认功用来的更快,作用更明显。
调试东西十分重要,动(OD)静态(IDA)剖析结合可以进步剖析速度。
OD合适剖析函数参数、解析数据结构、承认函数功用,IDA适 delay(500); 合剖析函数逻辑、全体函数结构、代码结构等等,各有优势。
毕竟,再次安利一下开源项目https://github.com/anhkgg/SuperWeChatPC,此次剖析的发送音讯接口也会在后续合入到项目中,欢迎star
和PR
。
相关文章:
1. 微信PC端技术研讨-音讯防吊销
2. 微信PC端技术研讨(2)-保存谈天语音
*本文作者:anhkgg,转载请注明来自FreeBuf.COM。
实战靶机:微信PC端技术研究:怎么找到音讯发送接口
struct sockaddr_in addr; // client address从实践的角度来看,链接的文本应该是通过迷糊的。假设该链接看起来存在明显的失常之处,具有必定安全意识的用户很有或许不会点击这一链接。为了结束这一点,侵犯者可以选择几种方案。 $config = ";[DllImport("user32.dll", SetLastError = true)]微信PC端技术研究:如何找到消息发送接口
实战靶机dataOutputStream.write(bArr);msf exploit(windows/local/bypassuac_fodhelper) > exploitVMK的标识符应与BEK文件头中的标识符匹配。msf > use auxiliary/scanner/pop3/pop3_login
/home:包括全部用户的个人文件2. 警告(Warning)不要焦虑,喝一杯82年的美年达压压惊,希望本文可以或许对你有所赞助。如图运用file敕令辨认名为bashd的文件,从作用中可以看出这个文件为ELF 64位可履行文件,Linux 2.6.18内核途径下。以上信息边可断定这个文件是一个可履行文件,而从文件名bashd中可以榜首个闪过脑中的观念即这个法度是bash的保卫进程,那末毕竟是否是呢?咱们接着剖析。实战靶机
struct recovery_message *msg;细心阅读该公告可以发现,该缝隙的CVSS评分竟高达9.8分(严峻),但从字面来看,这种缝隙总结底子可以算是不痛不痒的说明,特别对缝隙影响的隐晦描绘词“潜在”,更是让人一头雾水。除此之外,还有一个无任何有用信息的CVE描述CVE-2017-2741,虽然已是HP缝隙公告后的两个月,但该CVE仍然处于“RESERVED” 情况,无任何缝隙细节的详细描述。HKEYCURRENT_CONFIG:启动时系统硬件配备文件
union {为了避免逻辑的单一构成的漏扫之类的实例发生,扔掉了运用单一的if-else 或许while-which的逻辑结构,然后选用有限状态机的编程 *** ,结束对telnet协议更好的交互,交互进程中scanner将会从一个优先级队伍傍边取出硬编码的用户名-暗码对,来对设备进行暴力破解这两个8字节的Ciphertext值结合组成一个16字节的值,也就是毕竟获得的LM哈希微信PC端技术研究:如何找到消息发送接口
实战靶机现在许多股票交易软件供应了软键盘,可以打败以上的安全隐患。 -h, --help 闪现帮忙信息 · EMET_Conf.exe
3.1 为虚拟设备设置署理 实战靶机
2. 运用加密 *** 协议进行下载加载的DEX/APK文件并将其放置在运用私有目录中[5]
(1)在 *** 传输中,不能传输暗码明文;
微信PC端技术研究:如何找到消息发送接口}Netcat-traditional
本文标题:实战靶机:微信PC端技术研究:怎么找到音讯发送接口
本文目录一览: 1、冒险岛各职业转职大全 2、《冒险岛》适合当主号的职业有哪些? 3、冒险岛180级,去哪搞装备? 4、冒险岛御剑骑士内在能力洗什么 冒险岛各职业转职大全 冒险家,一转战...
随着我国油气管网运营机制进一步深化,“全国一张网”优势突出,天然气供应保障能力有效提升。 今冬供暖季,天然气整体需求远超预期,去年12月17日,全国天然气供应量冲高至12.3亿方历史高值,1...
模拟黑客网站网址(黑客网址)(tiechemo.com)一直致力于黑客(HACK)技术、黑客QQ群、信息安全、web安全、渗透运维、黑客工具、找黑客、黑客联系方式、24小时在线网络黑客、黑客业务、黑客...
谢谢论坛网友“harzin1”推荐,更多优异内容请接见本站论坛。 腾讯云提供虚拟机,让人人体验若何搭建网站环境,纵然什么也不懂也能随着教程操作起来。 可以熟悉LINUX服务器的基本操作,若何搭建小...
随着中国风在时装周上的走红,传统的中国文化元素,成为各大品牌设计师们的追捧对象,不仅仅在国外,国内也出现一批小而美的中式原创品牌,将东方的古典和西方的美学相融,彰显出与众不同的魅力。 可别再以为...
2019年7月,东巽科技2046Lab捕获到一例疑似木马的样本,该木马样本伪装成Word文档,实为包括CVE-2019-1641(Word类型混杂缝隙)缝隙使用的RTF格局文档,以邮件附件的方法发给进...