- Moderatör
- #1
#Ri
Coder
Hello gayz,
Başlamadan önce okuyupda beğenmeyenlerin ve anlamayanların baştan mq. şimdi devam edelim.
Aşşağıda vericeğim kodlarla External olarak pattern scan yapabilirsiniz. Halk tabiriyle otomatik adres bulma kodlarını paylaşıyorum.
*Unutmayın patternler uzun ömürlüdür çünkü fonksiyonları kolay kolay değiştirmezler
Cheat Engine ile kolay Pattern Çıkarma konumun linki : https://memoryhackers.org/konular/cheat-engine-sigmaker-script-auto-pattern-extractor.40755/
Başlamadan önce okuyupda beğenmeyenlerin ve anlamayanların baştan mq. şimdi devam edelim.
Aşşağıda vericeğim kodlarla External olarak pattern scan yapabilirsiniz. Halk tabiriyle otomatik adres bulma kodlarını paylaşıyorum.
*Unutmayın patternler uzun ömürlüdür çünkü fonksiyonları kolay kolay değiştirmezler
Cheat Engine ile kolay Pattern Çıkarma konumun linki : https://memoryhackers.org/konular/cheat-engine-sigmaker-script-auto-pattern-extractor.40755/
Kod:
#include <Windows.h>
#include <iostream>
#include <TlHelp32.h>
#pragma region Functions
DWORD iGMBase(DWORD dwProcessID, std::string strModulAd, bool retEndOfModule = false) {
MODULEENTRY32 lpModuleEntry = { 0 };
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
if (!hSnapShot)
{
return NULL;
}
lpModuleEntry.dwSize = sizeof(lpModuleEntry);
BOOL bModule = Module32First(hSnapShot, &lpModuleEntry);
while (bModule) {
std::string gelenVeri = lpModuleEntry.szModule;
unsigned ModuleDogrula = gelenVeri.find(strModulAd);
if (ModuleDogrula != std::string::npos) {
CloseHandle(hSnapShot);
if(!retEndOfModule)
return (DWORD)lpModuleEntry.modBaseAddr;
else
return (DWORD)lpModuleEntry.modBaseAddr + (DWORD)lpModuleEntry.modBaseSize;
}
bModule = Module32Next(hSnapShot, &lpModuleEntry);
}
CloseHandle(hSnapShot);
return NULL;
}
DWORD pEx(char * pAd)
{
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe32.dwSize = sizeof(PROCESSENTRY32);
do
{
if (strcmp(pAd, pe32.szExeFile) == 0)
{
DWORD ProcessId = pe32.th32ProcessID;
CloseHandle(hProcessSnap);
return ProcessId;
}
} while (Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
return 0;
}
uintptr_t FindPattern(char* base, unsigned int size, char* pattern, char *mask)
{
size_t patternLength = strlen(mask);
for (uintptr_t i = 0; i < size - patternLength; i++)
{
bool found = true;
for (uintptr_t j = 0; j < patternLength; j++)
{
if (mask[j] != '?' && pattern[j] != *(char*)(base + i + j))
{
found = false;
break;
}
}
if (found)
{
return (uintptr_t)base + i;
}
}
return 0;
}
uintptr_t FindPatternEx(HANDLE hProcess, uintptr_t start, uintptr_t end, char *pattern, char *mask)
{
uintptr_t currentChunk = start;
SIZE_T bytesRead;
while (currentChunk < end)
{
DWORD oldprotect;
VirtualProtectEx(hProcess, (void*)currentChunk, 4096, PROCESS_VM_READ, &oldprotect);
byte buffer[4096];
ReadProcessMemory(hProcess, (void*)currentChunk, &buffer, 4096, &bytesRead);
if (bytesRead == 0)
{
return 0;
}
uintptr_t InternalAddress = FindPattern((char*)&buffer, bytesRead, pattern, mask);
if (InternalAddress != 0)
{
uintptr_t offsetFromBuffer = InternalAddress - (uintptr_t)&buffer;
return currentChunk + offsetFromBuffer;
}
else
{
currentChunk = currentChunk + bytesRead;
}
}
return 0;
}
typedef LONG (NTAPI *NtSuspendProcess)(IN HANDLE ProcessHandle);
void suspend(DWORD processId)
{
HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
NtSuspendProcess pfnNtSuspendProcess = (NtSuspendProcess)GetProcAddress(
GetModuleHandle("ntdll"), "NtSuspendProcess");
pfnNtSuspendProcess(processHandle);
CloseHandle(processHandle);
}
#pragma endregion
int _tmain(int argc, _TCHAR* argv[])
{
static int pdx = 0;
HANDLE hProcess;
while(true)
{
if(pdx != 0)
{
std::cout << "wolftü Found. Stopping Game And Starting Search Patterns" << std::endl;
Sleep(2500);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pdx);
Sleep(1500);
suspend(pdx);
break;
}else
{
Sleep(200);
pdx = pEx("wolftü.bin");
}
}
uintptr_t CShellBase = iGMBase(pdx,"csh");
uintptr_t CShellSize = iGMBase(pdx,"csh",true);
uintptr_t dwNameEspPtr = FindPatternEx(hProcess, CShellBase, CShellSize, "\x75\x31\x38\x00\x00\x00\x00\x00\x75\x29", "xxx?????xx");
CloseHandle(hProcess);
printf("\nCShell Base = 0x%X",CShellBase);
printf("\nCShell Size = 0x%X",CShellSize);
char iout[50];
sprintf(iout,"\nName Esp : Cshxxxx.tmp + 0x%X",dwNameEspPtr - CShellBase);
std::cout << iout << std::endl;
system("pause");
return 0;
}
Son düzenleme: