Перейти к содержанию

не проходит инжект dll


Рекомендуемые сообщения

делаю инжект dll через инжектор winject, а ноль эмоций... по идее должна выскочить консоль с надписью hello, инжектор не ругается говорит мол все нормально.

вот исходник, делал по уроку кодера:


#include <Windows.h>
#include <fcntl.h>
#include <stdio.h>
#include <io.h>

DWORD WINAPI FarCry_thread(LPVOID);

BOOL WINAPI Dllmain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
CreateThread(NULL, NULL, FarCry_thread, NULL, NULL, NULL);
return true;
}
return false;
}

void CreateConsole()
{
int hConHandle = 0;
HANDLE lStdHandle = 0;
FILE *fp = 0;
AllocConsole();
lStdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
hConHandle = _open_osfhandle(PtrToUlong(lStdHandle), _O_TEXT);
fp = _fdopen(hConHandle, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
}

DWORD WINAPI FarCry_thread(LPVOID)
{
CreateConsole();
printf("HELLO!");
Sleep(10000);
FreeConsole();
FreeLibraryAndExitThread(GetModuleHandle("farcry_inject.dll"), 0);
}

Ссылка на комментарий
Поделиться на другие сайты

по ходу не проходит инжект... пробовал втыкать мессэдж бокс, но при инжекте не вылезло мое сообщение...


BOOL WINAPI Dllmain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
//CreateThread(NULL, NULL, FarCry_thread, NULL, NULL, NULL);
MessageBox(NULL, "test", "ds", MB_OK);
return true;
}
return false;
}

что мне делать, есть советы?

far cry у меня издательства от буки 1.04 версия крякнутая... ну думаю на такой старой игре навряли будет какая-либо защита от ижекта

Ссылка на комментарий
Поделиться на другие сайты

блин я уже мозг себе сломал... уже свой инжектор написал с привилегиями дебагера все равно нулевой результат... вот сурс dll http://rghost.ru/47338694 вот сурс инжектора http://rghost.ru/47338840 все писал в 2012 студии. инжектор писал в попыхах так, что не судите строго за косяки типа восстановления обычных прав приложения (debug disable)

Ссылка на комментарий
Поделиться на другие сайты

блин я уже мозг себе сломал... уже свой инжектор написал с привилегиями дебагера все равно нулевой результат... вот сурс dll http://rghost.ru/47338694 вот сурс инжектора http://rghost.ru/47338840 все писал в 2012 студии. инжектор писал в попыхах так, что не судите строго за косяки типа восстановления обычных прав приложения (debug disable)

попробуй инжектор PerX , код кодера уж точно не причем 1000%

попробуй этот код кодера тоже:

void CreateConsole()
{
int hConHandle = 0;
HANDLE lStdHandle = 0;
FILE *fp = 0;
AllocConsole();
SetConsoleTitle("Reverse_Console");
lStdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
hConHandle = _open_osfhandle (PtrToUlong(lStdHandle), _O_TEXT);
fp = _fdopen(hConHandle , "w");
*stdout = *fp;
setvbuf(stdout , NULL, _IONBF , 0 );
}
DWORD WINAPI имя потока (LPVOID)
{
CreateConsole();
printf ("блаблабла" );
for( ; ; )
{}
}

Ссылка на комментарий
Поделиться на другие сайты

попробовал все равно не работает хоть расшибись.... вроде все правильно, а выпендривается

что-то не то... 100% работающие логгеры d3d тоже не работают на всех играх у меня... а инжекторы всей кучей орут, что все нормально приинжектилось

Ссылка на комментарий
Поделиться на другие сайты

блин, уже все перепробовал.... не проходит инжект и все... уже по рихтеру 1 в 1 все делал все равно. Скинь свою тестовую длл и инжектор я попробую, только dll с исходником сами понимаете... как вообще можно понять в чем у меня ошибка? в exe файлах при компиляции можно пошаговую отладку делать, а тут не катит.

Ссылка на комментарий
Поделиться на другие сайты

Вижу 2 причины:

1) Кривая версия Windows

2) Что-то перехватывает инжект

1) винда чистая неделю назад ставил, лицензия windows 7 ult устанавливал с коробки так сказать от майкрософта

2) я не знаю, что может там еще перехватывать все повырубал... переустановлю завтра винду расскажу потом, что вышло

Ссылка на комментарий
Поделиться на другие сайты

1) винда чистая неделю назад ставил, лицензия windows 7 ult устанавливал с коробки так сказать от майкрософта

2) я не знаю, что может там еще перехватывать все повырубал... переустановлю завтра винду расскажу потом, что вышло

поставь НЕ лецензию так сказать

Ссылка на комментарий
Поделиться на другие сайты

переустановил винду(поставил не лицензию) вот ссылка на этот дистр.[CENSORED] и все равно dll инжектятся, но эффекту ноль, как так? уже на 3 компах проверял тоже самое... окна на всех компах разные стоят

Изменено пользователем Xipho
Читай правила форума. На первый раз без преда.
Ссылка на комментарий
Поделиться на другие сайты

логер

//////////////////////////////////////


#include <windows.h>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <conio.h>

#include <d3d9.h>
#include <d3dx9.h>

#pragma comment( lib, "d3d9.lib" )
#pragma comment( lib, "d3dx9.lib" )
#pragma warning( disable : 4996 )

using namespace std;
//-------------------------------------------------------------------

typedef struct _STRIDELOG{
INT Base; UINT Min;
UINT Num; UINT Start;
UINT Prim;
}STRIDELOG,*PSTRIDELOG;

HRESULT ( WINAPI* oReset )
( LPDIRECT3DDEVICE9, D3DPRESENT_PARAMETERS* );

HRESULT ( WINAPI* oEndScene )
( LPDIRECT3DDEVICE9 );

HRESULT ( WINAPI* oDrawIdP )
( LPDIRECT3DDEVICE9, D3DPRIMITIVETYPE,
INT, UINT, UINT, UINT, UINT );

STRIDELOG StrideLog;
vector<STRIDELOG> STRIDE;
vector<DWORD> BASETEX;
D3DPRESENT_PARAMETERS PrP = {NULL};
LPDIRECT3DBASETEXTURE9 BTEX = NULL;
LPDIRECT3DDEVICE9 pDev = NULL;
LPDIRECT3DTEXTURE9 Green = NULL;
LPDIRECT3DTEXTURE9 pTx = NULL;
DWORD dCrDev = NULL;
LPDIRECT3D9 pDx = NULL;
LPD3DXFONT pFont = NULL;
D3DVIEWPORT9 Vpt;
D3DLOCKED_RECT d3dlr;
PDWORD VTab = NULL;
DWORD Old = NULL;
ofstream ofile;
char dlldir[320];
char strbuff[260];
UINT iStride = 0;
UINT iBaseTex = 0;
bool Found = false;
bool Startlog = false;

void __cdecl add_log
(const char *fmt, ...);

//-------------------------------------------------------------------

__declspec( naked )
VOID WINAPI CREATEDEVICE( VOID )
{
__asm
{
PUSH EBP
MOV EBP,ESP
PUSH [EBP+0x20]
PUSH [EBP+0x1C]
PUSH [EBP+0x18]
PUSH [EBP+0x14]
PUSH [EBP+0x10]
PUSH [EBP+0xC]
PUSH [EBP+0x8]
CALL [dCrDev]
MOV EDX,[EBP+0x20]
MOV EDX,[EDX]
MOV [pDev],EDX
POP EBP
RETN 0x1C
}
}

//-------------------------------------------------------------------

HRESULT WINAPI nDrawIdP
( LPDIRECT3DDEVICE9 pDev, D3DPRIMITIVETYPE Type,
INT Base, UINT Min, UINT Num, UINT Start, UINT Prim )
{
LPDIRECT3DVERTEXBUFFER9 Stream_Data;
UINT Offset = 0;
UINT Stride = 0;

if(pDev->GetStreamSource
( 0, &Stream_Data, &Offset, &Stride )==S_OK)
Stream_Data->Release();

if(Stride == iStride)
{
pDev->GetTexture( 0, &BTEX );
Found = false;

for( UINT i = 0;i < BASETEX.size();i++ )
if( BASETEX[i] == (DWORD)BTEX )
Found = true;

if( Found == false )
BASETEX.push_back
( (DWORD)BTEX );

if( BASETEX[iBaseTex] == (DWORD)BTEX && Green )
{
pDev->SetTexture( 0, Green );
pDev->SetRenderState( D3DRS_ZENABLE, FALSE );
oDrawIdP( pDev, Type, Base, Min, Num, Start, Prim );
pDev->SetRenderState( D3DRS_ZENABLE, TRUE );

if( Startlog == true )
{
Found = false;
for( UINT i = 0;i < STRIDE.size();i++ )
if( STRIDE[i].Base == Base &&
STRIDE[i].Min == Min &&
STRIDE[i].Num == Num &&
STRIDE[i].Start == Start &&
STRIDE[i].Prim == Prim )
{
Found = true;
break;
}

if( Found == false )
{
StrideLog.Base = Base;
StrideLog.Min = Min;
StrideLog.Num = Num;
StrideLog.Start = Start;
StrideLog.Prim = Prim;

add_log( "(NumVertices == %i && PrimitiveCount == %i && Stride == %i)",
Num, Prim, Stride );

STRIDE.push_back
( StrideLog );
}
}
}
}

return oDrawIdP( pDev, Type,
Base, Min, Num, Start, Prim );
}

//-------------------------------------------------------------------

HRESULT WINAPI nEndScene
( LPDIRECT3DDEVICE9 pDev )
{
pDev->GetViewport( &Vpt );

RECT FRect = { Vpt.Width-250,Vpt.Height-300,
Vpt.Width,Vpt.Height };

if( Green == NULL )
if( pDev->CreateTexture(8, 8, 1, 0, D3DFMT_A8R8G8B8,
D3DPOOL_DEFAULT, &Green, NULL) == S_OK)
if( pDev->CreateTexture(8, 8, 1, 0, D3DFMT_A8R8G8B8,
D3DPOOL_SYSTEMMEM, &pTx, NULL) == S_OK)
if( pTx->LockRect( 0, &d3dlr, 0, D3DLOCK_DONOTWAIT |
D3DLOCK_NOSYSLOCK ) == S_OK )
{
for(UINT xy=0; xy < 8*8; xy++)
((PDWORD)d3dlr.pBits)[xy] = 0xFF00FF00;

pTx->UnlockRect( 0 );
pDev->UpdateTexture( pTx, Green );
pTx->Release();
}

if( pFont == NULL )
D3DXCreateFontA( pDev, 16, 0, 700, 0, 0, 1, 0,
0, DEFAULT_PITCH | FF_DONTCARE, "Calibri", &pFont );

sprintf( strbuff, "Num of Textures: %i\nStride: %i\nBase Tex Num: %i\n\nSTRIDE LOGGER V1\n\n" \
"Log Enable: %i\n\nNUM1: Stride++\nNUM2: Stride--\nNUM3: BaseTexNum++" \
"\nNUM4: BaseTexNum--\nNUM0: Log On/Off", \
BASETEX.size(), iStride, iBaseTex + 1, Startlog );

if( pFont )
pFont->DrawTextA( 0, strbuff, -1, &FRect,
DT_CENTER|DT_NOCLIP, 0xFF00FF00);

if( GetAsyncKeyState( VK_NUMPAD1 ) &1 )
{iStride++;BASETEX.clear();iBaseTex = 0;}

if( GetAsyncKeyState( VK_NUMPAD2 ) &1 )
if( iStride > 0 )
{iStride--;BASETEX.clear();iBaseTex = 0;};

if( GetAsyncKeyState( VK_NUMPAD3 ) &1 )
if(iBaseTex < BASETEX.size() - 1)iBaseTex++;

if( GetAsyncKeyState( VK_NUMPAD4 ) &1 )
if( iBaseTex > 0 )
iBaseTex--;

if( GetAsyncKeyState( VK_NUMPAD0 ) &1 )
{Startlog = !Startlog;STRIDE.clear();}

return oEndScene( pDev );
}

//-------------------------------------------------------------------

HRESULT WINAPI nReset
( LPDIRECT3DDEVICE9 pDev,
D3DPRESENT_PARAMETERS* PresP )
{
if( pFont ) {pFont->Release();pFont = NULL;}
if( Green ) {Green->Release();Green = NULL;}

return oReset( pDev, PresP );
}

//-------------------------------------------------------------------

VOID WINAPI THREAD( )
{
while( pDev == NULL )
Sleep( 100 );

VTab[16] = dCrDev;
VirtualProtect( (PVOID)&VTab[16], 4, Old, &Old );

VTab = (PDWORD)*(PDWORD)pDev;

*(PDWORD)&oEndScene = VTab[42];
*(PDWORD)&oReset = VTab[16];
*(PDWORD)&oDrawIdP = VTab[82];

while( 1 )
{
VTab[42] = (DWORD)nEndScene;
VTab[16] = (DWORD)nReset;
VTab[82] = (DWORD)nDrawIdP;
Sleep( 100 );
}
}

//-------------------------------------------------------------------

void __cdecl add_log (const char *fmt, ...)
{
if(ofile != NULL)
{
if(!fmt) { return; }

va_list va_alist;
char logbuf[256] = {0};

va_start (va_alist, fmt);
_vsnprintf (logbuf+strlen(logbuf),
sizeof(logbuf) - strlen(logbuf), fmt, va_alist);
va_end (va_alist);

ofile << logbuf << endl;
}
}

//-------------------------------------------------------------------

BOOL WINAPI DllMain( HMODULE hModule,
DWORD dwReason, LPVOID lpReserved )
{
if( dwReason == DLL_PROCESS_ATTACH )
{
DisableThreadLibraryCalls( hModule );
GetModuleFileNameA( hModule, dlldir, 320 );
dlldir[strlen(dlldir)-3] = 0;
strcat(dlldir,"txt");

ofile.open(dlldir, ios::app);
add_log("\nxDD Log");

pDx = Direct3DCreate9
( D3D_SDK_VERSION );

if( pDx != NULL )
{
VTab = (PDWORD)*(PDWORD)pDx;
pDx->Release();

dCrDev = (DWORD)VTab[16];
VirtualProtect( (PVOID)&VTab[16], 4, 0x40, &Old );

VTab[16] = (DWORD)CREATEDEVICE;
CreateThread( NULL, NULL, (LPTHREAD_START_ROUTINE)
THREAD, NULL, NULL, NULL );
}
}

return TRUE;
}

инжектор
///////////////////////////////////////////


#include <Windows.h> // Windows API
#include <TlHelp32.h> //Связано с процессами
#include <iostream> // Для вывода консоли
#include <io.h> //Проверять фаил на наличие dll

DWORD GetProcessByName(char * process_name)
{
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 process;
DWORD proc_id = 0;
if(Process32First(snapshot, &process))
{
while (Process32Next(snapshot, &process))
{
if(_stricmp(process.szExeFile, process_name) == 0)
{
proc_id = process.th32ProcessID;
break;
}
}
}
CloseHandle(snapshot);
return proc_id;
}

bool FileExist(char * name)
{

return _access(name, 0) != -1;
}


bool Inject(DWORD pID, char * path)
{
HANDLE proc_handle;
LPVOID RemoteString;
LPVOID LoadLibAddy;
if(pID == 0)
return false;
proc_handle = OpenProcess(PROCESS_ALL_ACCESS ,false, pID);
if (proc_handle == 0)
return false;
LoadLibAddy = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
RemoteString = VirtualAllocEx(proc_handle, NULL, strlen(path), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(proc_handle, RemoteString, path, strlen(path), NULL);

CreateRemoteThread(proc_handle, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, RemoteString, NULL, NULL);
CloseHandle(proc_handle);
return true;
}

int main()
{

printf("-------------------------------CONSOLE INJECTOR---------------------------------\n" );
//**************************************************************************************************
char dll_name[32];
char path[256];
while (FileExist(path) == 0 )
{
printf("Enter dll name : " );
scanf("%s", dll_name);
GetFullPathName(dll_name, sizeof(path), path, 0);
if(FileExist(path))
{
printf("dll found \n ");
//break;
}
else
{
printf("dll not found \n ");
}


//***************************************************************************************************
char process_name[32];
printf("Enter Process Name : " );
scanf("%s", process_name);
DWORD pID = GetProcessByName(process_name);
printf("Waiting %s for start ...... \n", process_name);
for(;;Sleep(50))
{
if(pID == 0)
pID = GetProcessByName(process_name);
if(pID != 0) break;
}
printf("%s Process found (pid %X)! \n" , process_name , pID);

//*****************************************************************************************************
printf("Preparing dll for injection \n");
if(Inject(pID, path))
{
printf("dll successfully injected !!!!!!!! \n" );
system("PAUSE");
}
else
{
printf("CRITICAL ERROR ???????? \n" );
Sleep(500);
}

}

}

#include <Windows.h> // Windows API
#include <TlHelp32.h> //Связано с процессами
#include <iostream> // Для вывода консоли
#include <io.h> //Проверять фаил на наличие dll

DWORD GetProcessByName(char * process_name)
{
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 process;
DWORD proc_id = 0;
if(Process32First(snapshot, &process))
{
while (Process32Next(snapshot, &process))
{
if(_stricmp(process.szExeFile, process_name) == 0)
{
proc_id = process.th32ProcessID;
break;
}
}
}
CloseHandle(snapshot);
return proc_id;
}

bool FileExist(char * name)
{

return _access(name, 0) != -1;
}


bool Inject(DWORD pID, char * path)
{
HANDLE proc_handle;
LPVOID RemoteString;
LPVOID LoadLibAddy;
if(pID == 0)
return false;
proc_handle = OpenProcess(PROCESS_ALL_ACCESS ,false, pID);
if (proc_handle == 0)
return false;
LoadLibAddy = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
RemoteString = VirtualAllocEx(proc_handle, NULL, strlen(path), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(proc_handle, RemoteString, path, strlen(path), NULL);

CreateRemoteThread(proc_handle, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, RemoteString, NULL, NULL);
CloseHandle(proc_handle);
return true;
}

int main()
{

printf("-------------------------------CONSOLE INJECTOR---------------------------------\n" );
//**************************************************************************************************
char dll_name[32];
char path[256];
while (FileExist(path) == 0 )
{
printf("Enter dll name : " );
scanf("%s", dll_name);
GetFullPathName(dll_name, sizeof(path), path, 0);
if(FileExist(path))
{
printf("dll found \n ");
//break;
}
else
{
printf("dll not found \n ");
}


//***************************************************************************************************
char process_name[32];
printf("Enter Process Name : " );
scanf("%s", process_name);
DWORD pID = GetProcessByName(process_name);
printf("Waiting %s for start ...... \n", process_name);
for(;;Sleep(50))
{
if(pID == 0)
pID = GetProcessByName(process_name);
if(pID != 0) break;
}
printf("%s Process found (pid %X)! \n" , process_name , pID);

//*****************************************************************************************************
printf("Preparing dll for injection \n");
if(Inject(pID, path))
{
printf("dll successfully injected !!!!!!!! \n" );
system("PAUSE");
}
else
{
printf("CRITICAL ERROR ???????? \n" );
Sleep(500);
}

}

}

Изменено пользователем Coder
Код нужно пихать под спойлер и в тэг CODE
Ссылка на комментарий
Поделиться на другие сайты

все проблема решена неожиданным способом... Решил видео записать, где собирался показать как у меня ничего не работает и тут заработало! Дело было я думаю в косячной 2012 студии, после ее обновления сразу все нормально стало. Вот видос рас уже записал.

http://youtu.be/GqNFqWztz2A

Ссылка на комментарий
Поделиться на другие сайты

у меня вывод только один, все нормально стало только после установки 3-го обновления на студию... лично мое мнение, да 2012 хороша тем, что код наглядней выглядит, подсказки сделали более лучше, но факт есть факт я убил 4 дня думая над тем, что же у меня такое, а проблема оказалась там, где я её не ожидал...

Ссылка на комментарий
Поделиться на другие сайты

Наверное плохо что ссылку кинул на трекер .

Вот студия 2012 не рекомендую так как она очень сырая пока что, пользуйся 2010.

Действительно, что за бред?

2012-я релизный продукт, и она исправно работает с самого первого релиза.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.