![Цитата](images/wow-circle/misc/quote_icon.png)
Сообщение от
aa_talanin
Ну или если не боишься вводить пароль в экзешники от незнакомых людей,
А на самом деле боятся стоит.
- - - Updated - - -
![Цитата](images/wow-circle/misc/quote_icon.png)
Сообщение от
aa_talanin
Я делал это прогой отдельной, в неё вводил пароль один раз, потом при каждом запуске вова она выжидала 10 секунд, позволяя вову запуститься, потом имитировала нажатие клавиш на клавиатуре в той последовательности, в какой они стоят в пароле, нажимала ентер и спустя 5 секунд еще раз ентер, таким образом входил через неё вообще без каких-либо манипуляций, кроме запуска самой проги.
Но способ плох тем, что если ты вов свернул до выполнения ввода пароля, то она спустя 10 секунд его напишет в первое попавшееся окно по фокусу все-равно.
На с++ пробуй читая ячейки памяти 0x7D078A, возвратит штат, далее
PHP код:
#pragma once
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <psapi.h>
#include <TlHelp32.h>
#define pause system("pause")
const char injectDLLName[] = "Твой_.dll";
int InjectDll(HANDLE hProcess, const char* dllNameArray)
{
void* pAllocDllName = VirtualAllocEx(hProcess, NULL, strlen(dllNameArray), MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, pAllocDllName, dllNameArray, strlen(dllNameArray), NULL);
HMODULE hKernel32 = GetModuleHandle("Kernel32");
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)GetProcAddress(hKernel32, "LoadLibraryA"), pAllocDllName, 0, NULL);
if (hThread != NULL)
{
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
}
VirtualFreeEx(hProcess, pAllocDllName, strlen(dllNameArray), MEM_RELEASE);
return 1;
}
int EnumModules(DWORD pID) {
HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded;
unsigned int i;
hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, FALSE, pID);
if (hProcess == NULL)
return 3;
if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) {
for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) {
TCHAR szModName[MAX_PATH];
if (GetModuleBaseName(hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR))) {
if (_stricmp((TCHAR*)injectDLLName, szModName) == 0) {
CloseHandle(hProcess);
return 1;
}
}
}
}
char path[MAX_PATH];
DWORD injectorPathSize = GetModuleFileName(NULL, path, MAX_PATH);
char* pSlash = strrchr(path, '\\');
strcpy_s(pSlash + 1, sizeof(injectDLLName), injectDLLName);
InjectDll(hProcess, path);
return 0;
}
PHP код:
#include "main.h"
int main() {
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pInfo;
pInfo.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(snapshot, &pInfo)) {
while (Process32Next(snapshot, &pInfo)) {
if (_stricmp((char*)"Wow.exe", pInfo.szExeFile) == 0) {
switch (EnumModules(pInfo.th32ProcessID)) {
case 0:
printf("pID = %d %s\n", pInfo.th32ProcessID, "Injected now!");
break;
case 1:
printf("pID = %d %s\n", pInfo.th32ProcessID, "Already injected!");
break;
}
}
}
}
CloseHandle(snapshot);
pause;
return 0;
}
Дальше из длл делаем что хотим с памятью вовки
PHP код:
DWORD MainThreadControl(LPVOID /* param */);
BOOL APIENTRY DllMain(HINSTANCE instDLL, DWORD reason, LPVOID /* reserved */)
{
if (reason == DLL_PROCESS_ATTACH)
{
instanceDLL = instDLL;
DisableThreadLibraryCalls(instDLL);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&MainThreadControl, NULL, 0, NULL);
}
else if (reason == DLL_PROCESS_DETACH){}
return TRUE;
}
DWORD MainThreadControl(LPVOID lpParm)
{
Sleep(200);
// делаем наши махинации
}
Ну дальше топаем на овнед и занимаемся поисками оффсэтов, которые отвечают за акк и пасс