先谢过了....
long dwID;
long dwSysID;
long dwAddress;
long dwWAddress;

ReadProcessMemory(g_hProcess, (LPCVOID)BASEADDR, &dwAddress, 4, 0);
ReadProcessMemory(g_hProcess, (LPCVOID)(dwAddress+0x8), &dwAddress, 4, 0);
ReadProcessMemory(g_hProcess, (LPCVOID)(dwAddress+0x24), &dwAddress, 4, 0);
ReadProcessMemory(g_hProcess, (LPCVOID)(dwAddress+0x18), &dwAddress, 4, 0);
for(int i = 0; i <= 768; i++)
{
ReadProcessMemory(g_hProcess, (LPCVOID)(dwAddress+0x4*i), &dwWAddress, 4, 0);
if(dwWAddress > 0)
{

ReadProcessMemory(g_hProcess, (LPCVOID)(dwWAddress+0x4), &dwWAddress, 4, 0);
ReadProcessMemory(g_hProcess, (LPCVOID)(dwWAddress+0x110), &dwID, 4, 0);
ReadProcessMemory(g_hProcess, (LPCVOID)(dwWAddress+0x10c), &dwSysID, 4, 0);
CString str;
str.Format("%x:%x", dwID, dwSysID);
MessageBox(NULL, str, "", MB_OK);
__asm
{
pushad

mov ecx, dword ptr [CALLBASE]
mov edx, dwID
mov eax, dwSysID
push edx
mov ecx, dword ptr [ecx+0x20]
push eax
add ecx, 0xd4
mov ebx, CALL_PICK                      //程序到此好像就没有跳出来 为什么不解中....
  call ebx

popad
}
Sleep(100);
}
}
以上是我写挂自动拾取的代码.    __asm块 独立使用CreateRemoteThread就可以正确执行

解决方案 »

  1.   

    CALL_PICK存在于目标进程,跟本地进程地址不是一个东西。
    注入到目标进程后才能正确执行。
      

  2.   

    恩 谢谢 是的
    我利用HOOK将Dll映射到目标进程中
    我的 攻击Call 打坐Call (无参) 可以正确执行
    声明: dwID dwSysID  参数正确
      

  3.   

    哈。。汇编这东西就是难搞mov ecx, dword ptr [CALLBASE]  ==》  mov ecx, CALLBASE
                                         mov ecx, dword ptr [ecx] 
    你这样改看看。。