I rewrite my functions, but not result, game crush when i call functions(press button) and i don't know why, and no one can help me :(.
But what iterest? If see my exe program in ollydbg and copy binary code, and after write it in memory program work.
not work:
Code:
void Target_THREAD()
{
DWORD wid = 0; //0x80104ac7
DWORD Myfunc = 0x00693D60;
_asm{
MOV EAX,DWORD PTR DS:[0x00B8FBCC] //BA
PUSH 0 //
MOV ECX,DWORD PTR DS:[EAX+0x20]
ADD ECX,0x0EC
MOV EAX,0x00693D60
CALL EAX
RETN
}
}
BYTE Inject(void* Func, void* Params)
{
/* CString str;*/
LPVOID pfunc = NULL;
LPVOID paramaddr = NULL;
LPVOID lpNumberOfBytes = NULL;
HANDLE hProcThread;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pidgmwnd);
if(!hProcess)
{
MessageBox(NULL,"pid равен 0","",MB_OK);
return 0;
}
pfunc = VirtualAllocEx(hProcess,NULL,4096,MEM_COMMIT,PAGE_READWRITE);
paramaddr = VirtualAllocEx(hProcess,NULL,256,MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(hProcess,pfunc,Func,4096,NULL);
WriteProcessMemory(hProcess,paramaddr,Params,256,NULL);
hProcThread = CreateRemoteThread(hProcess,NULL,NULL,(LPTHREAD_START_ROUTINE)pfunc,paramaddr,NULL,NULL);
//DWORD t = GetLastError();
//str.Format("%lu",t);
//MessageBox(NULL,str,"",MB_OK|MB_ICONINFORMATION);
WaitForSingleObject(hProcThread,INFINITE);
CloseHandle(hProcThread);
CloseHandle(hProcess);
VirtualFreeEx(hProcess, pfunc,4096, MEM_RELEASE);
VirtualFreeEx(hProcess, paramaddr,256, MEM_RELEASE);
return 1;
}
void CTestAssemblerDlg::OnBnClickedOk()
{
Inject(&Target_THREAD,0);
//OnOK();
}
But same code work if add byte code:
Code:
BYTE Inject(void* Func, void* Params)
{
/* CString str;*/
char packet[25] = "\xA1\xCC\xFB\xB8\x00\x6A\x00\x8B\x48\x20\x81\xC1\xEC\x00\x00\x00\xB8\x60\x3D\x69\x00\xFF\xD0\xC3";
LPVOID pfunc = NULL;
LPVOID paramaddr = NULL;
LPVOID lpNumberOfBytes = NULL;
HANDLE hProcThread;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pidgmwnd);
if(!hProcess)
{
MessageBox(NULL,"pid равен 0","",MB_OK);
return 0;
}
pfunc = VirtualAllocEx(hProcess,NULL,4096,MEM_COMMIT,PAGE_READWRITE);
paramaddr = VirtualAllocEx(hProcess,NULL,256,MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(hProcess,pfunc,packet,4096,NULL);
WriteProcessMemory(hProcess,paramaddr,Params,256,NULL);
hProcThread = CreateRemoteThread(hProcess,NULL,NULL,(LPTHREAD_START_ROUTINE)pfunc,paramaddr,NULL,NULL);
//DWORD t = GetLastError();
//str.Format("%lu",t);
//MessageBox(NULL,str,"",MB_OK|MB_ICONINFORMATION);
WaitForSingleObject(hProcThread,INFINITE);
CloseHandle(hProcThread);
CloseHandle(hProcess);
VirtualFreeEx(hProcess, pfunc,4096, MEM_RELEASE);
VirtualFreeEx(hProcess, paramaddr,256, MEM_RELEASE);
return 1;
}
void CTestAssemblerDlg::OnBnClickedOk()
{
Inject(&Target_THREAD,0);
//OnOK();
}
this byte code
Code:
char packet[25] = "\xA1\xCC\xFB\xB8\x00\x6A\x00\x8B\x48\x20\x81\xC1\xEC\x00\x00\x00\xB8\x60\x3D\x69\x00\xFF\xD0\xC3";
is equally
Code:
void Target_THREAD()
{
DWORD wid = 0;
DWORD Myfunc = 0x00693D60;
_asm{
MOV EAX,DWORD PTR DS:[0x00B8FBCC]
PUSH 0
MOV ECX,DWORD PTR DS:[EAX+0x20]
ADD ECX,0x0EC
MOV EAX,0x00693D60
CALL EAX
RETN
}
}
it's mysticism?