estou aprendendo dll injection e por algum motivo meu código retorna com sucesso. mesmo se a dll não existir. alguém consegue me ajudar? segue o código:
Se eu deletar o DLL.dll do c:// ele continua dando como sucesso
/*
how to do dll inject
1 - abrimos o processo com OpenProcess() passando o id do processo
2 - se sucesso, então pegamos o endereço do processo com a função (LPVOID) getProcAddress(getModuleHandleA("Kernel32.dll"), "LoadLibraryA")
3 - Alocamos memória virtual com a função VirtualAllocEx()
4 - criamos um remote thread com CreateRemoteThread()
5 - wait for the operation complete com WaitForSingleObject()
6 - liberamso memoria com vitualFreeEx()
CloseHandle() - remote thread
CloseHandle() - hTargetProcess - processo aberto
*/#include<cstdio>#include<iostream>#include<windows.h>#include<tlhelp32.h>#include<string>#include<cstdlib>#include<vector>usingnamespace std;
DWORD find_process_id(wstring processName){
PROCESSENTRY32 entry;
entry.dwSize =sizeof(PROCESSENTRY32);
HANDLE snapshot =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);if(Process32First(snapshot,&entry)== TRUE){while(Process32Next(snapshot,&entry)== TRUE){if(stricmp(entry.szExeFile,"Tibia.exe")==0){return entry.th32ProcessID;}}}CloseHandle(snapshot);}boolInjectDynamicLibrary(DWORD processId,char* dllPath){// Open a new handle to the target process
HANDLE hTargetProcess =OpenProcess(PROCESS_ALL_ACCESS,0, processId);if(hTargetProcess != NULL)// if the handle is valid{
cout <<"Processo aberto.......ok"<< endl;
cout <<"Tentaremos injetar a LIB :"<< dllPath << endl;// Kernel32.dll is always mapped to the same address in each process// So we can just copy the address of it & LoadLibraryA in OUR process and// expect it to be same in the remote process too.
LPVOID LoadLibAddr=(LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"),"LoadLibraryA");if(LoadLibAddr!= NULL){
cout <<"LoadLibAddr.......OK"<< endl;// We must allocate more memory in the target process to hold the path for our dll in it's addresspace.
LPVOID LoadPath=VirtualAllocEx(hTargetProcess,0, strlen(dllPath), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);if(LoadPath!= NULL){//MessageBox(HWND_DESKTOP, "LoadPath Sucesso!", "MESSAGE", MB_OK);
cout <<"LoadPath.......OK"<< endl;// Create a thread in the target process that will call LoadLibraryA() with the dllpath as a parameter
HANDLE RemoteThread=CreateRemoteThread(hTargetProcess,0,0,(LPTHREAD_START_ROUTINE)LoadLibAddr,LoadPath,0,0);if(RemoteThread){
cout <<"Remote Thread.......OK"<< endl;// Wait for the operation to complete, then continue.WaitForSingleObject(RemoteThread, INFINITE);// the path to the dll is no longer needed in the remote process, so we can just free the memory now.VirtualFreeEx(hTargetProcess,LoadPath, strlen(dllPath), MEM_RELEASE);CloseHandle(RemoteThread);CloseHandle(hTargetProcess);returntrue;}else{MessageBox(HWND_DESKTOP,"Remote Thread Error!","MESSAGE", MB_OK);}}else{MessageBox(HWND_DESKTOP,"LoadLibAddr ERROR","MESSAGE", MB_OK);}}else{MessageBox(HWND_DESKTOP,"LoadLibAddr Fail!","MESSAGE", MB_OK);}}else{MessageBox(HWND_DESKTOP,"problema ao abrir processo!","MESSAGE", MB_OK);}returnfalse;}int main(int,char*[]){
DWORD processId = find_process_id(L"chrome");if(processId){// MessageBox(0, "Processo localizado. fazendo inject","NOTICE", MB_OK);
cout <<"Process ID finded : "<< processId << endl;constwchar_t* libName = L"c:/DLL.dll";// or L"zß???"char lib[11];
std::wcstombs(lib, libName,11);
wcout << libName << endl;InjectDynamicLibrary(processId,"c:/DLL.dll");}return0;}
Pergunta
dearwin
Olá galera,
estou aprendendo dll injection e por algum motivo meu código retorna com sucesso. mesmo se a dll não existir. alguém consegue me ajudar? segue o código:
Se eu deletar o DLL.dll do c:// ele continua dando como sucesso
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.