对抗反汇编 x86
2020-04-24 15:56:15 Author: bbs.pediy.com(查看原文) 阅读量:403 收藏

[原创] 对抗反汇编 x86

1天前 624

相同的跳转指令 :

void 相同的跳转指令()
{
	printf("定位");
	_asm
	{
		jz _P2
		jnz _P2
_P1:
		__emit 0xE8
	}
_P2:
	return;
}



固定条件的跳转指令:

void 固定条件的跳转指令()
{
	printf("定位");
	_asm
	{
		xor eax,eax
		jz _P2
		__emit 0xE9
	}
_P2:
	return;
}


无效的反汇编码:内部跳转的jmp指令

void 无效的反汇编码1()
{
	//内部跳转的jmp指令
	printf("定位");
	_asm
	{
		__emit 0xEB
		__emit 0xFF
		__emit 0xC0
		__emit 0x48
	}
	return;
}


无效的反汇编码:多层内部调转序列

void 无效的反汇编码2()
{
	//多层内部调转序列
	printf("定位");
	_asm
	{
		__emit 0x66
		__emit 0xB8
		jmp _P1
		__emit 0x31
		__emit 0xC0
		__emit 0x74
		__emit 0xFA
		__emit 0xE8
	}
_P1:
	printf("真实代码!");
	return;
}


滥用返回指针: 在反汇编部分我们看不出函数有调用_P2就retn了,成功欺骗了F5。

void 滥用返回指针()
{
	printf("定位");
	_asm
	{
		call _P1
_P1:   
		add [esp],5
		retn
	}
_P2:
	printf("模糊函数边界!");  //这里会被执行
	return;
}


滥用结构化异常处理:成功欺骗了 F5


void 滥用结构化异常处理()
{
	printf("定位");
	_asm
	{
		mov eax, _PE1
		push eax
		push fs : [0]
		mov fs : [0], esp
		xor ecx, ecx
		div ecx
		retn
_PE1:
		mov esp,[esp+8] 
		mov eax, fs : [0]
		mov eax, [eax]
		mov eax, [eax]
		mov fs : [0], eax
		add esp, 8
	}
	printf("结构化异常");
	return;
}


挫败的栈帧分析: F5后发现怎么有那么多参数。

void 挫败的栈帧分析()
{
	printf("定位");
	_asm
	{
		xor eax, eax
        add eax ,2
		ret 0xff
	}
	printf("挫败的栈帧分析");
	return;
}



[培训]《安卓高级研修班(网课)》6月班开始招生!一年后遇见不一样的自己!(现在进入看雪课程可以试看两节)

最后于 1天前 被Dascolee编辑 ,原因:


文章来源: https://bbs.pediy.com/thread-259064.htm
如有侵权请联系:admin#unsafe.sh