-
Постов
174 -
Зарегистрирован
-
Посещение
-
Победитель дней
7
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные temtriss
-
-
2 часа назад, vadik111 сказал:
это же просто #define
Дефайн чего? PostMessageA в случае мультибайтовой кодировки и PostMessageW в случае уникод.
Если следовать вашей логике, то и SendMessage - define
Если я правильно помню, то сенд месседж ожидает обратки сообщения до возврата, а пост просто помещает сообщение в очередь, более детально я хз.
-
Вот... Довольно интересный гайд.
Я C# хоть и нелюблю, но посмотрел и послушал с удовольствием
- 1
-
В 05.02.2018 в 20:49, roma91212 сказал:
Пиши Internal cheat
У человека явные проблемы с простейшими WinAPI функциями и указателями, о чем еще может быть речь?
А по теме, скинь свой код, может косякнул где, так же сегодня как домой приду гляну старые проекты, может найду что-то на чтение/запись в сторонний процес.
-
Все что сказали выше более правельный подход, только вот SendMessage у меня не разу не отработало не в одном приложении, а вот
PostMessage(targetHWND,WM_KEYDOWN,VK_F2, 1); PostMessage(targetHWND, WM_KEYUP, VK_F2, 0);
Отрабатывало в некоторых приложениях Можешь попробовать. -
14 минуты назад, vagingameh сказал:
6.7?
на счет 6.7 точно не помню, но в 6.6 точно работал. могу посоветовать альтернативу: Не Луа!!! плагин для CE Sig maker... в гугле найти не сложно.
-
В 25.11.2017 в 19:20, X86Jumps сказал:
создают D3DDevice
Вот у меня остался старый проектик - частично переделанный урок кенга с убранной утечкой памяти(В уроке шрифт создавался в хукнутой Present и не высвобождался, а это очень опасно для функции, которая вызывается 60 раз в секунду(Ну или сколько там ФПС в вашем приложении)) и хуком EndScene вместо Present
Скрытый текст#include "HackClass.h" #include <d3dx9.h> #include <d3d9.h> // #include <MinHook.h> #pragma comment(lib, "d3dx9.lib") #pragma comment(lib, "d3d9.lib") // #pragma comment(lib, "libMinHook-x86-v140-mtd.lib") typedef IDirect3D9*(__stdcall *DIRECT3DCREATE9)(unsigned int); // EndaaScene() sig: // \x6A\x20\xB8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x8B\x75 // xxx????x????xx // d3d9.dll + 43B60 HackClass* h = new HackClass; DWORD * DXvTable; typedef HRESULT(__stdcall * EndScene)(IDirect3DDevice9* pDevice); EndScene fnEndScene; BYTE origCode[5] = { 0,0,0,0,0 }; BYTE jmpCode[5] = { 0,0,0,0,0 }; DWORD oldProtEndScene; DWORD funcAddr = 0; LPD3DXFONT pFont; void FildRect(IDirect3DDevice9* pDevice,int x, int y, int w, int h, int a, int r, int g, int b ) { D3DCOLOR color = D3DCOLOR_ARGB(a, r, g, b); D3DRECT rect = { x, y, w, h }; pDevice->Clear(1, &rect, D3DCLEAR_TARGET | D3DCLEAR_TARGET, color, 0, 0); } void WriteTextToScreen(IDirect3DDevice9* pDevice,int x, int y,DWORD color, char* txt) { RECT rect; SetRect(&rect, x, y, x, y); pFont->DrawTextA(NULL, txt, -1, &rect, DT_NOCLIP | DT_LEFT, color); } HRESULT __stdcall HookedEndScene(IDirect3DDevice9* pDevice) { BYTE * CodeDest = (BYTE*)fnEndScene; CodeDest[0] = origCode[0]; *(DWORD*)(CodeDest + 1) = *(DWORD*)(origCode + 1); //h->Log("We Hook EndScene yeaah!!!"); if (pFont) { pFont->Release(); pFont = NULL; } if (!pFont) { D3DXCreateFontA(pDevice, 14, 0, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &pFont); } WriteTextToScreen(pDevice, 15, 80, D3DCOLOR_ARGB(255, 255, 000, 000), "Type your Text HERE!"); FildRect(pDevice, 15, 80, 300, 300, 30, 50, 50, 200); DWORD res = fnEndScene(pDevice); CodeDest[0] = jmpCode[0]; *(DWORD*)(CodeDest + 1) = *(DWORD*)(jmpCode + 1); return res; } void HookDevice() { HWND hWnd = CreateWindowA("STATIC", "WindowsName", 0, 0, 0, 0, 0, 0, 0, 0, 0); HMODULE hD3D9 = GetModuleHandleA("d3d9"); // GetModuleHandleA("d3d9"); h->Log("D3D9 Library Handle: 0x%x", hD3D9); //IDirect3D9*(__stdcall*pDirect3DCreate9)(UINT) = (IDirect3D9*(__stdcall*)(UINT))GetProcAddress(hD3D9, "Direct3DCreate9"); DIRECT3DCREATE9 pDirect3DCreate9 = (DIRECT3DCREATE9)GetProcAddress(hD3D9, "Direct3DCreate9"); // Создаем свое устройство IDirect3D9* pD3D = pDirect3DCreate9(D3D_SDK_VERSION); D3DDISPLAYMODE d3ddm; pD3D->GetAdapterDisplayMode(0, &d3ddm); D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = 1; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format; IDirect3DDevice9 * ppReturnedDeviceInterface = 0; // Да - Это то, что нам нужно!)) pD3D->CreateDevice(0, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &ppReturnedDeviceInterface); DXvTable = (DWORD*)(*((DWORD*)ppReturnedDeviceInterface)); ppReturnedDeviceInterface->Release(); pD3D->Release(); FreeLibrary(hD3D9); CloseHandle(hWnd); } // Пустой поток, я не помню зачем я его делал, но удалять и коментить не стал, только вызов закоментил DWORD __stdcall NewThread(LPVOID lp) { return 0; } DWORD __stdcall HookThread(LPVOID lp) { HookDevice(); h->Log("Reset() : 0x%x", DXvTable[16]); h->Log("Present() : 0x%x", DXvTable[17]); h->Log("EndScene() : 0x%x", DXvTable[42]); h->Log("DrawIndexPrimitive() : 0x%x", DXvTable[82]); funcAddr = DXvTable[42]; // Пробуем!) fnEndScene = (EndScene)((DWORD)funcAddr); jmpCode[0] = 0xE9; DWORD addr = (DWORD)HookedEndScene - (DWORD)fnEndScene - 5; // Расчитываем джампик memcpy(jmpCode + 1, &addr, sizeof(DWORD)); memcpy(origCode, fnEndScene, 5); VirtualProtect(fnEndScene, 5, PAGE_EXECUTE_READWRITE, &oldProtEndScene); memcpy(fnEndScene, jmpCode, 5); return 0; } BOOL __stdcall DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: // LPDIRECT3DDEVICE9 lpDevice; // CreateThread(0, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(NewThread), hModule, 0, 0); CreateThread(0, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(HookThread), hModule, 0, 0); case DLL_PROCESS_DETACH: break; } return TRUE; }
P.s.: Ну и соответственно обьявление HackClass и все вызовы Log надо убрать, я морочится не стал) Хотя если интересно, могу скинуть(там не чего особенного).
P.s.2: Надеюсь сейчас по правилам оформил, очень старался)) Мат из коментов поудалял
-
Хорошо, я отвечу,
5 часов назад, sallahdin сказал:1) Что собственно нужно для этого?
Не малый багаж знаний. Очень не малый.
5 часов назад, sallahdin сказал:с чего мне начать
Я бы посоветовал начать с основ и хотя бы поверхностно выучить асм, но это не самый легкий путь. Далее я бы посоветовал почтитать что-то связаное с процессами и их устроством, память и прочее. Ну и далее выбрать язык програмирования более высокого уровня, например С++(советую С++ так как сам на нем пишу и очень люблю этот язык, хотя перепробовал массу). А делее дело техники.
5 часов назад, sallahdin сказал:дебаггеры безполезны
Приемов атни-анти-отладки дофига, погуглите. Какой-то ТитанИнжен например.
P.s. какой вопрос, такой и ответ, в вопросе конкретики я не вижу, по этому просто высказал свое мнение!)
-
Посмотри какие функции обращаются к адресу, а так же посмотри к каким адресам обращаются найденые функции. Если к одному, то все просто делаешь иньекцию кода, копируешь адрес(оттуда где обращение идет к адресу), выполняешь затертый джампом кусок и возвращаешся. Ну просто как вариант, он далеко не 100% и не всегда его возможно реализовать.
-
5 часов назад, partoftheworlD сказал:
далеко до hex-rays
Ну это бесспорно)) но возможность же имеется)) да выглядит как обфусцированый автоит скрипт, но все же)))
5 часов назад, partoftheworlD сказал:Удобна
Ну это наверно дело привычки, с Идой я мало работал, а вот с Олли и потом с х64дбг достаточно, мне на много удобнее)))
-
В 11.11.2017 в 14:56, Dejavu сказал:
IDA куда удобнее
Ида - как отладчик не особо то и удобная... Как сказали выше, лучше и удобнне использовать привычный дебагер(х64дбг/СЕ дебагер, ВинДбг etc.)
В 11.11.2017 в 14:56, Dejavu сказал:она распознает уже документированные функции.
x64Dbg тоже умеет и так же умеет выдавать псевдокод, а по поводу распознания оно так, 50/50 в плане конвенции вызова) так что это не панацея.
-
Запилил видосик на скорую руку))) По гайду так сказать.... видос доступен только по ссылке... вроде... Но это не точно
- 2
-
1 час назад, TheErel сказал:
Пожалуйста запишите видео.
Блин... тут же гайд аля, делай как я... если вы не можете с этим справится, то вам еще такое рано, не в обиду сказано. Но хорошо, я запишу, сейчас докачаю сорс.
-
12 минуты назад, TheErel сказал:
я дополнил вопрос.
Ида - интерактивный дизасемблер, она анализирует без подключения(Да функция и возможность дебага есть, но ИМХО не так удобно как например Олли или х64дбг)... Открывается dllка из папки игры... можно посмотреть в заголовке окна иды... найти строку... кликнуть по строке выбрать Xref или просто нажать на X... в окошке выбираем функцию(как я понял только одна функция использует эту строку).... далее ищем первый call перед помещением(ну так на скрине) ее в стек(push offset что-то там....) заходим в функцию и ищем где заполняется ECX... нашел?! отлично дальеш подключаешся любым дебагером к игре(можно и ЦЕ) идеш по смещению в engine dll... ставишь бряк, на функцию, которая заполняет ECX получаешь адрес... профит!
P.s. Залейте мне куда-то engine.dll я вам нагляднее покажу))
-
10 минут назад, TheErel сказал:
Почему именно engine.dll ?
По тому, что на скрине открыт именно engine.dll... Вопрост же был про пример)) Вот я по примеру все и выдал)
-
В 02.11.2017 в 21:53, partoftheworlD сказал:
имя владельца процесса.
Хех, я не подумал об одном моменте, для получения токена нужен хэндл, а на стадии получения хэндла отсеивается 99% ненужных приложений из списка c ошибкой 0x5(Windows (User-Mode): Access is denied.). В общем решил задачу!) Всем еще раз спасибо за участие, тему можно закрыть!)
-
В 31.10.2017 в 23:17, ReWanet сказал:
но это не меняет сути
Пока не было времени посмотреть :(( Работа :(( Но завтра последний рабочий день и 3 выходных, обязательно гляну!)) Спасибо и + в репу в любом случае :))) Если ответов больше не будет, то тему можно закрыть в выходные сам разберусь если инфа выше не поможет :))
-
9 минут назад, ReWanet сказал:
Может чем поможет.
Спасибо, но чуть выше в коде это и реализовано)) А вот как отличить системное приложение и пользовательское вообще не сообразить
-
Всем привет, наверно странный вопрос. Понадобилась такая тема как отображение процессов(Помогаю товарищу), да задача элементарная.
Что-то типо этого:
void GetProcessesList()
{
DWORD ProccessID = NULL;
HANDLE hSnapshot;
// Обьявим структуру ProcessEntry и сразу заполним ее размер.
PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
// Начинаем перебирать с первого процесса!)
if (Process32First(hSnapshot, &pe32))
{
// Цикл
do
{
// Чуть позже переделаю AddText в функцию с неизвестным кол-вом параметров и буду формировать строки
// Через vsprintf уже внутри, а пока е... с буфером
// Лишние 3 строки для переделывания AddText это перебор для меня
ProccessID = pe32.th32ProcessID;
char buff[255];
sprintf(buff, "PID: %d", ProccessID);
AddTextToList(hListBox1, buff);
AddTextToList(hListBox1, pe32.szExeFile);
}
// До тех пор пока есть след. процесс
while (Process32Next(hSnapshot ,&pe32 ));
}
AddTextToList(hListBox1, "Finish \n");
CloseHandle(hSnapshot);
}
Вроде все просто и работает отлично. Но мне нужно отфильтровать процессы, не найти какой-то конкретны(Это слишком легкая задача), а отфильтровать типо системный/пользовательский и отобразить только пользовательские. Или можно, а даже лучший вариант это как в CE 6.7 вкладка Application но это уже не обязательно. Как бы это можно реализовать? Может не правильно гуглил, но гугл инфы не дал
Заранее спасибо!
-
5 часов назад, Gekas сказал:
вызова функции по факту не происходит
а вы уверены в правильности передачи параметров функции?) я в портотипе не вижу конвенции вызова. Я не знаю на 100 процентов, но могу предположить, что по умолчанию плюсы будут использовать cdecl
-
12 часа назад, Garik66 сказал:
туалет
ну главное, что бы в ожидаемом месте туалета не сходил а остальное уже мелочи :)))
-
3 часа назад, gamehikker сказал:
От компа зависит
эммм... а Вы уверены в правильности Вашей функции поиска сигнатур? для примера 2гб оепативы у меня сканируется около 2-3 сек на планшете!!!(Intel Atom 1.44Ghz) Я почему-то сомневаюсь, что у вас комп слабее моего планшета...
-
3 минуты назад, ReWanet сказал:
А вот это не пробовал:
чуть-чуть опередил меня
-
strLen = SendMessageA(hEdit, WM_GETTEXTLENGTH, 0, 0);
SendMessageA(hEdit, EM_SETSEL, (WPARAM)strLen, (LPARAM)strLen);
SendMessageA(hEdit, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)str);
- 1
-
7 минут назад, gamehikker сказал:
новую строку , не стирая старых
Мультилайн edit надеюсь?)
LB_ADDSTRING это же для лист бокса)
попробуйте сообщение WM_SETTEXT вроде должно работать, если не поможет, я свои старые проекты раскопаю, подскажу)
- 1
Изменение значения в адресе указателя
in Высокоуровневое программирование
Опубликовано
Сори, не нашел в своем хламе не чего с работой с памятью
быстренько написал код для чтения указателя, если надо, то поясню по строчкам. или запишу видос с пояснением кода.
#include <Windows.h> #include <TlHelp32.h> #include <iostream> DWORD PID = NULL; DWORD BaseAddr = NULL; DWORD offs = NULL; char* ProcName = "Tutorial-i386.exe"; int HP; // Портотип bool OpenProc(); int main() { OpenProc(); HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, TRUE, PID); printf("%x \n", hProc); if (hProc != NULL) { // Базовый адрес BaseAddr = 0x400000; printf("0x%x \n", PID); // До тех пор пока не нажмем INSERT while (!GetAsyncKeyState(VK_INSERT)) { if (GetAsyncKeyState(VK_F1) & 1) { printf("Test Memory Read \n"); // Ох... Давно не работал из вне процесса жертвы // Так бы сейчас разименованым указателем жахнул // *(DWORD*) ReadProcessMemory(hProc, (LPVOID*)(BaseAddr + 0x001FD5D0), &offs, 4, NULL); printf("Readed \n Now We need add offset 0x480 to readed Addr 0x%x \n", offs); offs += 0x480; // Ну вот и все, читаем наш оффс ReadProcessMemory(hProc, (LPVOID*)(offs), &HP, 4, NULL); printf("Our HP is %d \n", HP); } } } else { printf("LastError: %x \n", GetLastError()); } system("PAUSE"); return 0; } bool OpenProc() { // Сначала ищем наш процес // как-то так PROCESSENTRY32 pe = { sizeof(PROCESSENTRY32) }; HANDLE hSnapshot; while (!PID) { hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (Process32First(hSnapshot, &pe)) { do { if (!strcmp(pe.szExeFile, ProcName)) { PID = pe.th32ProcessID; printf("We find Process!!! PID: %x \n", PID); break; } } while (Process32Next(hSnapshot, &pe)); } Sleep(1000); } // В любом случае вернем false в PID мы и так все записали раз дошли сюда :) return false; }
Как-то так, надеюсь поможет.
P.s. для модеров, удалил тег кода, он весь мой код без перехода на след. строку лепит. Не читабельно!