با سلام.
من میخوام یک کد رو به یک پراسس اضافه کنم
برای این کار ابتدا یک یک فضای در پراسس مورد نظر تخصیص دادم بعدش کد
رو درون پراسس نوشتم و توسط تابعthrea رو پراسس
رو فراخوانی کردم.
ولی متسفانه نمی دونم چرا کار نمی کنه برنامه در حالی که کد بسیار ساده می باشد.
#define CREATE_THREAD_ACCESS (PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ)
DWORD Useless();
int privileges();
static DWORD myFunc(LPCWSTR myparam);
int main() {
DWORD size_myFunc = (PBYTE)Useless - (PBYTE)myFunc;
HANDLE Proc;
Proc = OpenProcess(CREATE_THREAD_ACCESS, FALSE, 8328);
cout<<privileges();
LPVOID MyFuncAddress = VirtualAllocEx(Proc, NULL, size_myFunc, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(Proc, MyFuncAddress, (void*)myFunc,size_myFunc, NULL);
LPVOID DataAddress = VirtualAllocEx(Proc,NULL,sizeof("injected ho ho"),MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(Proc, DataAddress,"injected ho ho",sizeof("injected ho ho"), NULL);
HANDLE thread = CreateRemoteThread(Proc, NULL, 0, (LPTHREAD_START_ROUTINE)MyFuncAddress, DataAddress, 0, NULL);
if (thread!=0){
WaitForSingleObject(thread, INFINITE); //this waits untill thread thread has finished
VirtualFree(MyFuncAddress, 0, MEM_RELEASE); //free myFunc memory
VirtualFree(DataAddress, 0, MEM_RELEASE); //free data memory
CloseHandle(thread);
CloseHandle(Proc); //don't wait for the thread to finish, just close the handle to the process
cout<<"Injection completed!"<<endl;
}else{
cout<<"Error!"<<endl;
}
CloseHandle(Proc);
return 0;
}
static DWORD Useless(){
return 0;
}
static DWORD myFunc(LPCWSTR myparam){
SetWindowText(FindWindow(NULL,TEXT("The KMPlayer")),myparam);
return 0;
}
int privileges(){
HANDLE Token;
TOKEN_PRIVILEGES tp;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&Token))
{
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (AdjustTokenPrivileges(Token, 0, &tp, sizeof(tp), NULL, NULL)==0){
return 1; //FAIL
}else{
return 0; //SUCCESS
}
}
return 1;
}