|
网络黑客自学教程-手机微信PC端技术性研究:怎样找到消息发送接口
提前准备专用工具:Cheat Engine,OllyDbg,IDA。
前一篇(手机微信PC端技术性研究:储存闲聊视频语音)早已说过CE是啥,也运用CE研究了如何保存语音聊天,这篇再次应用CE和OD来研究一微信的消息发送接口。
构思大约是那样:在消息框中键入内容以后,根据CE找到内容详细地址,随后根据运行内存中断点来找到发送该数据信息的有关编码,进而找到消息发送接口。
二、剖析全过程
搜索重要数据信息详细地址
在文本框键入一个较为尤其的文本内容(防止检索时过多运行内存选择项)后,应用CE检索该内容详细地址。
因为早已了解准确的消息内容,非常容易就能根据CE的Exact value->String来找到内容详细地址,改动内容数次挑选,最终留有2个结12348法律咨询服务律师在线果(详尽实际操作见上一篇文章)。
根据CE改动一下运行内存的内容,手机微信文本框中内容同歩更改,表明这一内存地址便是文本框中内容详细地址,最后确定详细地址是2A1E1A8。
然后在点一下发送按键以后,文本框内容会被清除,因此 第一念头便是对内存地址下运行内存载入中断点,能够找到发送全过程中清除内容的编码。
开启OD,初始化到WeChat.exe过程,在右下方数据信息对话框Ctrl G键入2A1E1A8,随后鼠标右键挑选中断点->运行内存载入中断点。
F9让OD跑起来,随后点一下手机微信发送按键,想不到出现意外发生了,文本框内容清除了,可是中断点却沒有开启。
是怎么回事?中断点搞错?详细地址挑错?临时没有答案。
用CE反复多次前边的实际操作,详细地址仍然是这一详细地址,中断点便是不开启。
通12348法律咨询服务律师在线过OD查询到,在文本框清除后,2A1E1A8的内容的确沒有转变,和发送前一样,而且在再次键入新的内容以后,该运行内存内容同歩升级。
因此 结果便是文本框内容详细地址的确是2A1E1A8,可是清除文本框并并不是清除该运行内存内容,猜想编辑框很有可能根据操纵字符串数组长度来操纵显示信息的,清除文本框内容便是设定字符串长度为0。
找到文本框类
清除文本框沒有进度了,那怎么办呢?
试着去找了别的数据信息,例如发送按键的发送(S),发送按键的提醒内容不可以发送空缺内容这些,数据信息详细地址还可以迅速找到,可是和大家的剖析总体目标偏的太远了。
几翻瞎折腾后,罢手。
转念一想,清除不好,发送总的载入文本框中内容吧,那换为运行内存浏览中断点试着一下。
仍然是在右下方数据信息对话框Ctrl G键入2A1E1A8,随后鼠标右键挑选中断点->运行内存浏览中断点。
进行后返回微信界面,想不到立即断下了,我还没有点发送按键呢。依据之前的工作经验,不由自主就感觉是页面更新显示信息文本开启了中断点,这很有可能会危害剖析,压根没法根据发送按键来开启运行内存浏览中断点。
一般解决方案有:
标准中断点。也就是屏蔽更新页面开启的中断点,可是仿佛运行内存中断点不兼容标准中断点啊,要不根据脚本制作来进行,好不便。
找别的突破口。空话,清除那里的路都断掉,死了心吧。
别的我也不知道的…
放弃了一般的解决方案,我打算看一下此次中断点到底干嘛了。
注意到中断点的部位并不是微信模块WeChatWin.dll中,只是在msftedit.dll,非常少见的一个控制模块。依据文件目录能够见到是微软系统的一个控制模块,姓名中的edit还可以看得出这应该是一个编辑框有关的控制模块。
可实行控制模块, 12348法律咨询服务律师在线 内容 20
基址=6F050000
尺寸=00094000 (606208.)
通道=6F05D53D msftedit.<ModuleEntryPoint>
名字=msftedit (系统软件)
文档版本号=5.41.21.2510
途径=C:\\Windows\\System32\\msftedit.dll
仿佛和大家的剖析总体目标很接近嘛,在OD中数据对话框鼠标右键中断点->删掉运行内存中断点,随后按住Alt F9返回客户控制模块领空,也就是绕过系统软件控制模块的编码,立即返回手机微信的控制模块编码中,省过系统对编码的剖析。12348法律咨询服务律师在线
见到回到到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文件目录12348法律咨询服务律师在线下。
2.开启OD,设定标记途径。调节--->挑选标记途径。
3.设定StrongOD的软件选择项。挑选载入标记。
全文:https://blog.csdn.net/sr0ad/article/details/8253311
可是只适用当地标记,也就是得自身安装了控制模块相匹配标记到当地,OD设定标记文件路径后,才可以一切正常应用,有点儿不便。
我此刻一般便会应用IDA了,因为它会自身最新下载控制模块相匹配的标记,很便捷。
用IDA开启msftedit.dll,等候一丝時间,IDA免费下载标记,分析这些进行后,我们去找到msftedit.6F05AD69相匹配的涵数到底是个什么。
可是这儿msftedit.6F05AD69的控制模块基址是6F050000,而12348法律咨询服务律师在线IDA分析应用的是默认设置基址0x6FCD0000,要不改动IDA分析基址为6F050000,等候IDA再次分析,要不根据偏位测算相匹配详细地址。
再分析等很久,立即测算吧,因此 要分享我写的一个实用工具(偏位计算方法),可以迅速测算详细地址,实际应用见类似文章。
再IDA中按住g,键入6fcdad69,找到msftedit.6F05AD69相匹配涵数为CTxtEdit::OnTxInPlaceActivate。
很显著根据姓名OnTxInPlaceActivate能够看得出是编辑框文字激活状态(显示信息)下便会开启该涵数,这不是关键。
关键看CTxtEdit,显而易见,这就是msftedit.dll中完成的编辑框的类。
假如读过MFC有关编码,应当迅速就能想起12348法律咨询服务律师在线CTxtEdit毫无疑问也有别的读内容、写内容的涵数,称为GetXXX或是SetXXX。
在IDA的涵数目录中翻阅一下,果真迅速就找到了CTxtEdit::GetTextEx和CTxtEdit::SetText。
但究竟这两个涵数是否编辑框读写能力内容的涵数呢,大家对这两个涵数下中断点试一下,根据专用工具算入在ID调节中这两个涵数的相对详细地址为6f068437和6f056d37。
在OD的底端命令窗口键入bp 6f068437和bp 6f056d37,删除以前CTxtEdit::OnTxInPlaceActivate的中断点,随后F9跑起来。
返回微信界面,此次可以一切正常显示信息了,点一下发送按键。OD开启中断点,断在了6f068437也就是CTxtEdit::GetTextEx上,很显著它是发送涵数在载入文本框内容。
回朔找到发送涵数
这时的启用局部变量是那样的:
启用局部变量
详细地址 局部变量 涵数全过程 / 主要参数 启用来源于 构造
0026E280 6F06843D 12348法律咨询服务律师在线 msftedit.6F068437 msftedit.6F068428 0026E3FC //CTxtEdit::GetTextEx
0026E400 6E20D239 包括msftedit.6F06843D WeChatWi.6E20D233 &12348法律咨询服务律师在线nbsp; 0026E3FC
0026E43C 6DBD38EB 包括WeChatWi.6E20D239 WeChatWi.6DBD38E8 0026E438 //TxtEdit_GetText
0026E5AC 6DC15B65 ? WeChatWi.6DBD3860 12348法律咨询服务律师在线 WeChatWi.6DC15B60 0026E5A8 //sendBtn_GetText
0026E60C 6DC15DEE WeChatWi.6DC15B10 WeChatWi.6DC15DE9 &nbs p; 0026E608 //sendbtn_click
0026E618 6E20BFB8 12348法律咨询律师在线 WeChatWi.6E20BEF4 WeChatWi.6E20BFB3 0026E614
0026E62C 6E20362E WeChatWi.6E20BF90 WeChatWi.6E203629 12348法律咨询律师在线0026E628
0026E6CC 6E203589 WeChatWi.6E2035A7 WeChatWi.6E203584 0026E6C8
0026E820 6DC53695 ? WeChatWi.6E20352E WeChatWi.6DC53690&12348法律咨询律师在线nbsp; 0026E81C
在OD中回溯调用堆栈跟踪返回到WeChatWi.6E20D239,看到右侧堆栈窗口已经获取到输入框中内容,证明前面的分析没有问题。
再次回溯两层到WeChatWi.6DC15B60,可以看到堆栈中的参数依然是获取到的输入框内容。
[0026E5E4] = 0828C070
[0828C070 + 4] = 0828CAF0 => a12bcAAAAA
此时函数首地址是WeChatWi.6DC15B10,进入到IDA中对应函数100d5b10(你要问我为什么此时进入IDA查看?我只好说其实这个步12348法律咨询律师在线骤花费了很多时间,一边OD调试,一边IDA辅助确认等等,过程并没有这么顺利,篇幅原因省略),然后按下x回到上层函数,看到如下代码:
看到click很明显可以看出这就是发送按钮的响应函数了(相关知识可以了解duilib编程,微信界面是duilib实现的)。
到目前找到了发送消息的函数,但还并不是消息发送接口,这还只是界面的操作函数,具体发送消息接口应该在该函数内部被调用。
有技巧找到发送接口
先粗略地在OD中跟一遍WeChatWi.6DC15B10的代码逻辑,函数很多,没法很快确认哪个函数是消息发送接口。
截取部分代码感受一下,大概11个函数。根据OD跟的逻辑大概是sendBtn_GetText_10093860->sub_100DD340->sub_12348法律咨询律师在线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
{ // 12348法律咨询律师在线 x
//省略一大段逻辑
}
if ( msg[0] != msg[1] )
{ // x
//省略一大段逻辑
}
if ( sub_100DD340() )
{ 12348法律咨询律师在线 // x
//省略一大段逻辑
sub_1047C070(&v34, v23);
sub_100DB8C0((int)a1_, v34, v35, (int)v36, v37, (int)v38, v39, v40, (int)v41, msg_);
}
if (12348法律咨询律师在线 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 12348法律咨询律师在线 *)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, 12348法律咨询律师在线 v40, v41);
}
通常通过调试每个函数的参数、返回结果等基本可以猜测到函数功能,然后来找到消息发送接口。
但这里我偷懒了,因为参数结构复杂,一时半会没法找到关键点,有点晕了。
所以我通过排除法来一一筛选函数,最多11次左右就能找到消息发送接口。举个例子,如果sub_100DD340是消息发送接口,在我手工屏蔽其功能之后,消息肯定发不出去了,那么我就可以通过看到的结果(是否发送成功)来确认sub_100DD340是不是要找到的消息发送接口。
具体屏蔽方法:
通过IDA或OD进入sub_100DD340函数内部,找到函数结尾,找到retn xx类似代码
用OD在sub_100DD340函数开始修改汇编代码为retn xx,双击输入retn 12348法律咨询律师在线 xx即可
这样sub_100DD340函数直接在入口就返回了,功能没有了,也保证了函数调用时的栈平衡。
在确认sub_100DD340并没有影响消息发送之后,通过右键撤销选择处修改恢复修改的内容。
如此重复筛选其他的函数,最终确认sub_100C4450为发送消息函数。代码接口如下:
sub_100C4450((_DWORD *)(a1_->unk_558 + 2528), (_msg *)msg);//
msg是发送内容,a1_->unk_558 + 2528)是当前聊天窗口的好友信息,包括wxid和名字之类的信息。
但作为接口依然不够简洁,需要构造好友信息,比较复杂,所以继续深入sub_112348法律咨询律师在线00C4450内部,看看是否能够找到最简单的接口,比如:
sendmsg(wxid, msg); //传入发给谁,发什么即可
sub_100C4450内部依然很复杂,使用和前面同样的方式,先大致跟一遍执行流程,然后通过排除法逐个筛选。
if ( !sub_100C43D0(msg_.buf, msg_.len, msg_.maxlen, wxid_) )// 是不是全是特殊字符\r\n\t等,是返回1,不是返回0
{
sub_1007D390();
msg_packet = sub_102DA4A0((int)wxid, (int)&v67, msg__, &unk, 1);// 数据打包,发送
sub_100494E0(msg_packet_, 12348法律咨询律师在线 (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_) ) //
12348法律咨询律师在线 {
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 *12348法律咨询律师在线*)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)
下图是调试中看到的数据,确认接口没有问题。至于其他两个参数,经过分析是用于接收输出的,没有实际作用,在此不赘述。
如此分析消息发送接口的工作完成,找到了和预期基本一致的接口函数。
三、总结
篇幅好像有点长了,最后做一下此次分析的总12348法律咨询律师在线 结:
ce找到编辑框中的内容内存
发送后,编辑框内容删除,写断点无效,神奇,猜测通过设置长度控制显示
改为内存访问断点,进入界面就会断下,徘徊几次后,决定分析,没想到找到了关键点CTxtEdit::OnTxInPlaceActivate
知道编辑框使用了msftedit.dll的CTxtEdit的类,用ida找到符号
查询类似getvalue的接口,找到SetText、GetTextEx等,对这两个函数下断点
果然断下,回溯找到了发送的消息响应函数
详细分析响应函数,多次通过retn、jmp排除,找到真正发送消息函数,最后分析出接口函数
此次分析中CE找到地址是第一步非常关键的点,直接就进入了函数调用堆栈内部,对此次分析作用非常明显。
再就是在发送消息响应函数内部,逐个分析找到消息发送接口函数中,通过修改指令来屏蔽函数功能来确认函数功能,比每个函数去分析参数猜测确认功能来的更快,效果更明显。
调试工具非常重要,动(OD)静态(IDA)分析结合能够提高分析速度。
OD适合分析函数参数、解析数据结构、确认函数功能,IDA适合分析函数逻辑、整体函数结构、代码框架等等,各有优势。
最后,再次安利一下开源项目https://github.com/anhkgg/SuperWeChatPC,此次分析的发送消息接口也会在后续合入到项目中,欢迎star和PR。
相关文章:
1. 微信PC端技术研究-消息防撤销
2. 微信PC端技术研究(2)-保存聊天语音
*本文作者:anhkgg,转载请注明来自FreeBuf.COM。
。楼主您好!对于您反馈的情况,若不是密友的用户是无法进入他人的空间的.有些用户的网络较快.可能会显示他人空间的开头一些画面、更新内容等.但是。黑客自学教程
手机真实黑客软件都可以的,安卓也有黑客工具比如dSploit。对方,对方是用你的证件开的户下,在黑客宝典的话是看不到他的信息的,只能看得到你的信息啊,那次只是是你的你的你的户头《黑客攻防技术宝典.Web实战篇(第2版)》是探索和研究Web应用程序安全漏洞的实践指南。作者利用大量的实际案例和示例代码,详细介绍了各类Web应用程序的。
计算机网络作为主流学科的基础学科,会学一些c语言。java。等简单的语言。在学校学的知识知识基础,如果想深入了解学习的可能要去报一些比较专业的学习班,朋友,我就是读计算机网络的!如果你想往12348法律咨询律师在线黑客或网络工程师方面发展的话!当然是选计算机网络啦!课程的话,它们大体是相同的!只是以后的侧重点不同。但。
C语言、UNIX系统、python脚本语言、perl、lisp、等等当然,还要学一些黑客技术,不然怎么对抗别人的入侵和破坏。有本杂志叫《黑客X档案》很有技术。不过在。
又没骗到你什么,警察哪儿那么多精力管你这个并非准确只是知道大约位置或者忽悠到准确位置。得到信息取决于对方暴露多少。比如目标是一个经常自拍自恋的人。喜欢发自己的生活照这种就比较容易。可以看。盗QQ好友的密码
。裤中开搓怎么不去专业平台看看呢!操作简单,玩的人也很多,又方便,他们24小时不打烊的,建议你去看看吧那里挺多人玩的,我也玩过一段时间,还是不错。
黑客自学教程说具体点查什么也讲的不清楚,手机里的东西除非能装个后门程序不然别想,电脑还12348法律咨询律师在线有点其它的途径。防火墙黑客帝国剑鱼行动紫雨风暴第十三层战争游戏捍卫机密通天神偷网络惊魂杀人硬件编程是基础,网络安全是专精。(绝逼是专家级的)黑客VS安全专家被逮住就得蹲监狱,能不精通?解:黑客=网络安全+进攻什么是黑客?黑客一词,源于英文Hacker,原指热心于计算机技术,水平高超的电脑专家,尤其是程序设计人员。但到了今天,黑客一词已被用于泛指那些专门利用电脑。
标签:
(责任编辑:网络) |
|