PDA

View Full Version : کرش در اینجکت دی ال ال



fahimeh1512
پنج شنبه 02 آبان 1392, 12:09 عصر
آقا یکی به این سوالم رک و راست جواب بده
وقتی من یه دی ال ال رو به برنامه ای اینجکت میکنم چرا اون برنامه کرش میکنه؟؟؟؟
:عصبانی++::عصبانی++::عصبانی++:

UfnCod3r
پنج شنبه 02 آبان 1392, 12:57 عصر
خب باید دی ال ال طوری باشه که کرش نکنه . مثلا فرض کن برنامه دی ال الی رو استفاده داره می کنه که ی متغیر گلوبال داره توش. و دی ال ال جدیدی که شما اینجکت می کنی اونو نداره و و ...
:متفکر:
جزیات بیشتر بایس بزاری

fahimeh1512
پنج شنبه 02 آبان 1392, 23:54 عصر
این کد منه ببینین میشه ازش فهمید مشکل کرشش کجاست؟ وقتی اجرا میکنم دی ال الم ک فقط توش یه مسیج باکس داره اول مسیج باکسو نشون میده بعد ک دکمه ok یا cancel رو میزنم پروسه هدفم کرش میکنه و همه چی لو میره
ضمنا ایدی ای که تو تابع اپن پروسس استفاده کردم رو از یه برنامه دیگه محض نمونه گرفتم خواهش میکنم یکی بگه مشکل چیه؟
#include <stdio.h>
#include <windows.h>
#include <Psapi.h>

#pragma comment (lib,"Psapi.lib ")

void MyFunc(LPVOID);
void EndFunc();

void main() {

DWORD size_written;
CHAR* ProcName=new char[1024];

//DWORD process_id=GetCurrentProcessId();
//printf("\nprocess id:%d",process_id);

typedef HANDLE (WINAPI *open_pointer)(DWORD,BOOL,DWORD);
typedef BOOL (WINAPI *write_pointer)(HANDLE,LPVOID,LPCVOID,SIZE_T,SIZE_ T*);
typedef DWORD (WINAPI *get_module_name_pointer)(HANDLE,HMODULE,LPSTR,DWO RD);
typedef LPVOID (WINAPI *alloc_pointer) (HANDLE,LPVOID,SIZE_T,DWORD,DWORD);
typedef HMODULE (WINAPI *load_pointer) (LPCSTR);
typedef HANDLE (WINAPI *thread_pointer) (HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_STAR T_ROUTINE,LPVOID,DWORD,LPDWORD);

open_pointer open=(open_pointer)GetProcAddress(GetModuleHandleA ("kernel32"),"OpenProcess");
write_pointer Write=(write_pointer)GetProcAddress(LoadLibrary(L"kernel32"),"WriteProcessMemory");
get_module_name_pointer get_module_name=(get_module_name_pointer)GetProcAd dress(GetModuleHandleA("Psapi"),"GetModuleFileNameExA");
alloc_pointer virtual_alloc=(alloc_pointer)GetProcAddress(GetMod uleHandleA("Kernel32"),"VirtualAllocEx");
load_pointer load_library=(load_pointer)GetProcAddress(GetModul eHandleA("Kernel32"),"LoadLibraryA");
thread_pointer remote_thread=(thread_pointer)GetProcAddress(GetMo duleHandleA("Kernel32"),"CreateRemoteThread");

HANDLE hProc=open(PROCESS_ALL_ACCESS,FALSE,9020);
if (!hProc) {
printf("\nerror in open process");
return;
}

if (!get_module_name(hProc,NULL,ProcName,7260)) {
printf("\nerror in get module file name");
return;
}

printf("\nprocess name:%s",ProcName);

LPVOID start_address=virtual_alloc(hProc,NULL,(int)EndFun c-(int)MyFunc,MEM_COMMIT |MEM_RESERVE,PAGE_EXECUTE_READWRITE);
if (!start_address) {
printf("\nerror in virtual allocate");
return;
}


if (!Write(hProc,start_address,MyFunc,(int)EndFunc-(int)MyFunc,&size_written)) {
printf("\nerror in write process momory");
return;
}

HMODULE Param=load_library("simpledll.dll");
if (!Param) {
printf("\nerror in load library");
return;
}

HANDLE my_remote_thread=remote_thread(hProc,NULL,0,(LPTHR EAD_START_ROUTINE)start_address,&Param,0,NULL);
if (!remote_thread) {
printf("\nerror in createthread");
return;
}


WaitForSingleObject( my_remote_thread,INFINITE );

VirtualFreeEx(hProc, start_address, (int)EndFunc-(int)MyFunc, MEM_RELEASE);

Sleep(1000);
printf("\ninjection completed");
//system("pause");
}

void MyFunc(LPVOID Param) {

FARPROC print=GetProcAddress((HMODULE)Param,"Print");
}


void EndFunc() {
return;
}