首页
社区
课程
招聘
[求助] 关于C++ 特征码搜索后,地址+0x15的疑惑 求大神帮忙瞧一下 代码如下
发表于: 2017-3-13 10:11 4805

[求助] 关于C++ 特征码搜索后,地址+0x15的疑惑 求大神帮忙瞧一下 代码如下

2017-3-13 10:11
4805
        BOOL bRet = FALSE;
	ULONG uSearchAddr = 0;
	DWORD dwPt = 0;
	MODULEINFO miAdobe = MyTool::GetModuleInfo(L"xxxxx.dll");	
	if ((ULONG)miAdobe.lpBaseOfDll < 1)
	{		
		goto _exit;
	}
	uSearchAddr = (ULONG)MyTool::FindPattern(
		(ULONG)miAdobe.lpBaseOfDll, miAdobe.SizeOfImage,
		(PUCHAR)"\x9B\x56\x3F\x03\x46\x3F\x57\xFF\x74\x08\x33\xDB\x50\x89\x6D\xFC\xE7",
		(PCHAR) "xx?xx?xxxxxxxxxxx");//这边可以正常搜索到call
	if (uSearchAddr < 1)
	{		
		goto _exit;
	}
	g_Send_uHookAddr = uSearchAddr + 0x15; //问题在这里不明白为什么 + 0x15
	g_Send_uReturnAddr = g_Send_uHookAddr + 0x06;//还有这里 + 0x06 
	BYTE arrHookBytes[5] =
	{ 0xe9,   0x00,   0x00,    0x00,   0x00 }
	*(PULONG)(&arrHookBytes[1]) = (ULONG)&_send_stub - g_Send_uHookAddr - 0x05;	
	VirtualProtect((PVOID)g_Send_uHookAddr, 0x05, PAGE_EXECUTE_READWRITE, &dwPt);	
	RtlCopyMemory((PVOID)g_Send_uHookAddr, arrHookBytes, 5);
	VirtualProtect((PVOID)g_Send_uHookAddr, 0x05, dwPt, &dwPt);
	bRet = TRUE;
 //这段代码可以正常使用,也能获取到想要的数据
g_Send_uHookAddr = uSearchAddr + 0x15; //问题在这里不明白为什么 + 0x15
g_Send_uReturnAddr = g_Send_uHookAddr + 0x06;//还有这里 + 0x06

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人知道吗
2017-3-13 12:02
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
0x15不是固定值, 哪来的为什么。你查看uSearchAddr地址的汇编代码就知道了,代码在0x15偏移处写入0xe9 jmp指令
2017-3-13 12:16
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
0F9493DD    8B46 4C         mov eax,dword ptr ds:[esi+0x4C]  8B 46 4C 03 46 70 
0F9493E0    0346 70         add eax,dword ptr ds:[esi+0x70]
0F9493E3    57              push edi
0F9493E4    FF75 08         push dword ptr ss:[ebp+0x8]
0F9493E7    33DB            xor ebx,ebx
0F9493E9    50              push eax
0F9493EA    895D FC         mov dword ptr ss:[ebp-0x4],ebx
0F9493ED    E8 FE57E5FF     call Adobe_AI.0F79EBF0
0F9493F2    83C4 0C         add esp,0xC
0F9493F5    FF76 4C         push dword ptr ds:[esi+0x4C]
0F9493F8    8D4D B4         lea ecx,dword ptr ss:[ebp-0x4C]
0F9493FB    FF76 70         push dword ptr ds:[esi+0x70]
0F9493FE    6A 07           push 0x7

目标地址 - 下个指令地址? 怎么算出来的 0x15 

2017-3-13 15:15
0
雪    币: 2235
活跃值: (1410)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
因为查找特征码的函数返回的是特征码的首地址,然后+0x15才是真正的call的地址,至于+0x6 就是hook后返回的地址吧
2017-3-13 17:32
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6

谢谢 谢谢 ,研究了一下午刚整明白了...   又再看新问题了 - - jmp 进入我函数我弹出一个框 点完确定程序就崩溃了 ai......

void __declspec(naked) _send_stub()
{	__asm
	{
		pushad
		pushfd
		jmp dword ptr[aaaaa]
		popfd
		popad
		//把上面注释一切正常,aaaaa里面我就弹了一个框点了确定程序就退出. 不弹框更直接,就直接闪退了
		add esp, 0Ch
		push[esi + 4Ch]
		jmp dword ptr[bbbbb]
	}
}

谁来救救我.....

2017-3-13 18:20
0
雪    币: 8446
活跃值: (6363)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
飞飞飞飞飞 谢谢 谢谢 ,研究了一下午刚整明白了... &nbsp; 又再看新问题了 - - jmp 进入我函数我弹出一个框 点完确定程序就崩溃了 ai...... void& ...
你JMP aaaaa后是不返回了的,就是不会执行 popfd,popad以及后面的指令,要找问题你去aaaaa看,或者你是用错了,JMP AAA应该改成call aaaaa,真的是....什么逻辑啊,先去看看汇编指令,熟悉个个指令再来写shellcode啊
2017-3-13 19:32
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
lononan 你JMP aaaaa后是不返回了的,就是不会执行 popfd,popad以及后面的指令,要找问题你去aaaaa看,或者你是用错了,JMP AAA应该改成call aaaaa,真的是....什么逻辑啊, ...
0FEA93DD  |.  8B46 4C       mov eax,dword ptr ds:[esi+0x4C]
0FEA93E0  |.  0346 70       add eax,dword ptr ds:[esi+0x70]
0FEA93E3  |.  57            push edi
0FEA93E4  |.  FF75 08       push [arg.1]                             ;  text.00F4AFA4
0FEA93E7  |.  33DB          xor ebx,ebx
0FEA93E9  |.  50            push eax                                 ;  text.00F40000
0FEA93EA  |.  895D FC       mov [local.1],ebx
0FEA93ED      E8 FE57E5FF   call                                
0FEA93F2  |.  83C4 0C       add esp,0xC                          //这里CE查看会变成修改后的 Jmp 跳如下面的汇编
0FEA93F5  |.  FF76 4C       push dword ptr ds:[esi+0x4C]
0FEA93F8  |.  8D4D B4       lea ecx,[local.19]                   //jmp dword ptr[bbbb] hook 回来
0FEA93FB  |.  FF76 70       push dword ptr ds:[esi+0x70]
0FEA93FE  |.  6A 07         push 0x7
__asm
	{
		pushad
		pushfd
		push edi         //这句有问题 加上就闪退了
		push[esi + 4Ch]  //这句有问题 加上就闪退了
		call dword ptr[aaaa]
		popfd
		popa
		add esp, 0Ch  
		push[esi + 4Ch]
		jmp dword ptr[bbbb]
	}
void gggg(LPCVOID code, long lParam
)
{	AfxMessageBox(L"结束");
}

昨天改了一天有点蒙,优化一下





2017-3-14 09:45
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9

知道什么原因了


2017-3-14 09:55
0
雪    币: 0
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10

2017-3-14 10:32
0
游客
登录 | 注册 方可回帖
返回