PC微信逆向分析之《修改好友备注》

近期有同学问我能不能出一期修改备注的分析思路,他来了他来了!这里我将以3.6.0.18版本为例,对其进行分析 【供学术研究,请勿用于非法用途】

一、通过内存读写做切入点

在修改备注的输入框中先输入“我是备注111”,不要让输入框失去焦点
此时打开CE搜索输入框中的备注(这里我搜索的是unicode)
我们要找的肯定不是基址,所以结果只有2个

在这里插入图片描述

尝试过滤一下结果:这次输入“我是备注222”,再次扫描,结果只有一个了!

在这里插入图片描述

直接找到它的上级指针(方便后面下断点)

在这里插入图片描述

看看是什么访问了他
注意:这里地址变了是因为我做教程的时候中途有事重新开始了…看地址没意义,主要看分析思路!

在这里插入图片描述

此时让输入框失去焦点。备注修改成功!
这个地方只访问了1次,那么我们就从这里开始入手

在这里插入图片描述

打开dbg附加微信,定位到这个地址,直接下断会不停的断下…
那就先在输入框中输入新的备注,不要让输入框失去焦点,此时在dbg中下断,然后立刻让备注框失去焦点(要拼手速)
因为这里会断下很多次,我们查看eax的值什么时候变成新备注的时候,就可以去追栈了

在这里插入图片描述

二、栈回溯追《读取新备注的call》

第1层:压入了备注,说明都已经读完了,那就肯定不是这个

在这里插入图片描述

第2层:直接跳转就return了,也不是

在这里插入图片描述

第3层:这里有很多call,并且下一个call用到了上一个call的返回值
先下一个断点,防止跟丢了

在这里插入图片描述

F4返回到这层,eax就是新的备注,那么这个call就是读取新备注的call

在这里插入图片描述

三、寻址《修改备注的call》

既然读取到新备注了,那么接下来就应该要进行修改操作了
F8继续往下分析,第1个call传了一个常量跟新备注,跟进去看看
他只是把把ecx的内容给了eax…

在这里插入图片描述

第2个call把备注内容入栈,传了个缓存,执行完之后刚好平栈,并且缓存中有备注的结构体
这个call是组装备注结构的。。。

在这里插入图片描述

第3个call不知道是干嘛的,跟进去看到只有这一点内容,并且执行完后,堆栈跟寄存器都没什么太大变化

在这里插入图片描述

第4个call应该是最后一个了,再往下就是一个大跳转

在这里插入图片描述

F7跟进去看看,这个里面最“丰富”

从正向的思维去理解逆向,当我们要修改备注的时候,至少要有2个参数
1:被修改人的信息
2:备注

那么我们重点要关注一下,哪个call之前压入了这2个参数
一直往下走到这,发现【esi+0xBA0】的位置有“被修改人的信息”,并且+0x50的位置已经是新备注了
猜测之前所有的call都是为了组装这个结构,这个call里面就要用到这个结构了

在这里插入图片描述

F7跟进来,看看哪里用到了“被修改人的信息”
一进来就是一个跳转到尾部…
这里传入了“被修改人的完整信息结构”,并且执行完这个call之后返回了个1
猜测这个call就是修改备注的call?

在这里插入图片描述

四、验证寻址是否正确

经过上面的分析,也不能确认这个call就是修改备注的call
那么就来验证一下,他只压入了2个参数,且是内平栈
在这个call下一个断点,再次修改备注,断点断下

在这里插入图片描述

我们手动让他平栈,不让这个call执行,F9放过所有断点,看看备注是否还能修改成功
信息页确实是改了,但是移动端中是没改的,PC端再次点击一下这个好友的头像,就会变回去了
那么现在可以确定这个他就是我们要找的修改备注的call

在这里插入图片描述

五、分析参数

eax:“被修改人的信息”,通常应该由内部call来构造,但也可以手动构造
ecx:在上面就可以看到他是一个常数指针,那么就可以直接计算偏移进行取址

在这里插入图片描述

六、编写代码

void UpdateRemark()
{
	DWORD callAddr = GetBaseAddr() + 0x404740;
	DWORD paramAddr = GetBaseAddr() + 0x222F3BC;
	char buff[0x1024] = { 0 };
	WxStruct wxId((wchar_t*)L"wxid_xxx");
	WxStruct newRemark((wchar_t*)L"新的备注666");
	memcpy(&buff[0x10], &wxId, sizeof(WxStruct));
	*(DWORD*)(buff + 0x50) = 0x43;
	memcpy(&buff[0x58], &newRemark, sizeof(WxStruct));
	*(DWORD*)(buff + 0x230) = 0x43;
	__asm
	{
		mov ecx, paramAddr;
		mov ecx, [ecx];
		push ecx;
		lea eax, buff;
		push eax;
		call callAddr;
	}
	OutputDebugStringA("OK");
}
微信PC逆向获取小程序源码是指通过逆向工程的方法,对微信PC版进行分析和研究,以获取小程序的源码。 首先,逆向工程是对软件进行反向分析的过程,通过分析软件的二进制代码、反编译和调试,以获取软件的内部实现和源码。 要逆向获取小程序源码,我们首先需要通过一些工具和技术手段对微信PC版进行逆向分析。这可能涉及使用反编译工具、调试器和逆向工程技术等。 通过逆向分析微信PC版,我们可以获取到小程序在PC端的运行环境和相关的源码信息。可以分析小程序的请求和响应数据,了解小程序的工作原理以及和微信PC版的交互过程。 然后,我们可以对获取到的源码进行分析和研究。通过阅读源码,可以了解小程序的业务逻辑、界面设计、数据交互等方面的实现细节。这有助于我们更深入地理解小程序的运行机制,并为后续的开发和优化提供参考。 需要注意的是,逆向获取小程序源码存在法律和道德风险。对于商业小程序来说,它们的源码是开发者的知识产权,未经许可获取源码可能侵犯了知识产权法。此外,在逆向工程过程中,可能会对软件的安全性进行攻击或者破坏,这也是不被允许的行为。 因此,在合法和道德的前提下,如果我们需要获取小程序的源码,应该通过与开发者合作、遵守开发者协议等方式来获取。这样不仅可以保证合法性和安全性,还能与开发者建立良好的合作关系,促进行业的良性发展。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值