C++类对象逆向分析

文章通过一个C++类对象的例子展示了如何进行this指针的使用以及函数的逆向分析和替换。在示例中,创建了一个基类Obj和子类child,然后动态修改了基类对象的函数指针,使其调用不同的函数,从而改变了原有行为。
摘要由CSDN通过智能技术生成

一:C++类对象逆向分析

this指针

源代码

#include <stdio.h>
#include <windows.h>
class Obj
{
public:
	int a = 1;
	virtual void showCount() {
		printf("我是父类函数\n");
	}
	void showPrint1() {
		printf("我是原本的函数\n");
	}
private:

};
void showPrint2() {
	printf("我是被替代的函数");
}

class child : public Obj
{
public:
	void showCount() {
		printf("我是子类函数\n");
	}
private:
};
int main() {
	Obj* ob = new Obj();
	LPVOID funaddr = 0;
	DWORD lpflOldProtect = 0;
	_asm
	{
		mov eax, [ob];
		mov eax, [eax];
		mov funaddr, eax;
		push eax;
	}
		if (funaddr)
		{
			VirtualProtect(funaddr,0x4,PAGE_EXECUTE_READWRITE,&lpflOldProtect);
		}
		_asm
		{
			pop eax;
			mov edx, showPrint2;
			mov[eax], edx;
		}
		if (funaddr)
		{
			VirtualProtect(funaddr, 0x4, lpflOldProtect, &lpflOldProtect);
		}
	

	ob->showCount();
	//ob->showPrint1();
	return 0;
}

图片: 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值