码迷,mamicode.com
首页 > 编程语言 > 详细

代码注入之远程调用线程的一些问题

时间:2019-05-26 19:56:53      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:strong   read   ppa   生成   看到了   代码   必须   oid   roc   

vs2019里写代码注入,本来用裸函数写的就像这样:

 1 __declspec(naked) void myput()
 2 {
 3     {
 4         __asm
 5         {
 6             pushad
 7             push - 1     //未知,恒为-1
 8             push 2             //ID
 9             mov eax, 0        //坐标x
10             push 0            //坐标y
11             mov ebx, ds:[0x6A9EC0]
12             mov ebx, ds:[ebx + 0x768]
13             push ebx
14             mov edx, 0x40D120
15             call edx
16             popad
17             ret
18         }
19     }
20 }

但是当我想给这个函数传入一些参数的时候就不得不抛弃裸函数,用

DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{
	DWORD _id = ((ppara)lpParameter)->id;
	DWORD _pos_x = ((ppara)lpParameter)->pos_x;
	DWORD _pos_y = ((ppara)lpParameter)->pos_y;
	__asm
	{
		pushad
		push -1     //未知,恒为-1
		push _id			 //ID
		mov eax, _pos_x		//坐标x
		push _pos_y			//坐标y
		mov ebx, ds:[0x6A9EC0]//必须加ds这是vs内嵌汇编的规定
		mov ebx, ds:[ebx + 0x768]//同上
		push ebx
		mov edx, 0x40D120
		call edx
		popad
	}
	return 0;
}  

这种远程线程回调函数写,可是这样一写,原程序一直崩溃,一直找不到原因,后来看到了一个帖子,去od里看了看它写入的代码,发现问题出在vs2019的几个编译选项里了如下:

把安全检查与基本运行检查给关了,因为这俩会在生成的函数尾加入几个call,而这几个call是检查堆栈平衡之类的,但是注入到目标进程后,目标进程里并没有着几个call的实际代码就会出错

还有一点就是,vs内嵌汇编的时候,mov eax,[0xxxxxx]这种汇编代码必须写成 mov eax,ds:[0xxxxx]这种形式,否则vs编译的时候就会编译成 mov eax,0xxxxx这种形式,当然不是我们的本意.

 

代码注入之远程调用线程的一些问题

标签:strong   read   ppa   生成   看到了   代码   必须   oid   roc   

原文地址:https://www.cnblogs.com/fanwenke/p/10927058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!