تزریق کد در پراسس - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تزریق کد در پراسس

0 امتیاز
با سلام.

من میخوام یک کد رو به یک پراسس اضافه کنم

برای این کار ابتدا یک یک فضای در پراسس مورد نظر تخصیص دادم بعدش کد

رو درون پراسس نوشتم و توسط تابع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;
}

سوال شده اسفند 26, 1392  بوسیله ی Anthrax (امتیاز 9)   1 2
از این لینک
http://www.7khatcode.com/1641/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D8%AA%D8%A7%D8%A8-c?show=1641#q1641
کتاب windows via c رو دانلود کنید کاملاً توش توضیح داده شده فکر کنم در فصل 22 در مورد تزریق کد بحث شده

1 پاسخ

+1 امتیاز
سلام .

برای صدا زدن () VirtualAllocEx درواقع Handle ی که شما با ()OpenProcess بدست آوردید باید حق PROCESS_VM_OPERATION رو داشته باشه . که من توی کد شما ندیدم همچین چیزی رو .
پاسخ داده شده اسفند 26, 1392 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
سلام.
اتفاقا صدا زدم ولی یکم کد رو خوب نمایش نداده اینجا
همون خط اول رو تا ته برید اون وسطاش میبینید دستور proccess_vm_operation رو.
ممنون.
من الان کد رو اجرا کردم . برنامه هدف Crash میکنه .
فک کنم یا کدی که میخوای تزریق کنی ایراد داره یا اشتیاه آدرس رو تزریق میکنی .
والا کدی که میخوام تزریق کنم که تغییرش دادم و مطمئنا درست هست.
ولی شاید آدرس رو درست تزریق نمی کنم!
...