-
Постов
14 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные darthmaul
-
-
Вывожу ники игроков, на латинце без проблем, а если крилица то тоже выводит то на конце иероглифы почему то.
Спойлерvoid draw::Text(int x, int y, int align, unsigned color, const char* text, ...) { wchar_t wstr[128]; char cstr[256]; va_list va_alist; va_start(va_alist, text); vsprintf(cstr, text, va_alist); va_end(va_alist); MultiByteToWideChar(CP_UTF8, 0, cstr, -1, wstr, 128); if (align) { int w, h; surface->GetTextSize(g_iFont, wstr, w, h); if (align == 1 && w > 0) w /= 2; x -= w; } surface->DrawSetTextColor(RGBA(color)); surface->DrawSetTextPos(x, y); surface->DrawSetTextFont(g_iFont); surface->DrawPrintText(wstr, strlen(cstr)); }
-
Всем доброго времени суток. Помогите решить такую задачку:
Меняю модельку оружия через проп m_nModelIndex, получаю мерцание модельки, в основном показывает новую модельку а на доли секунд показывается стандартная моделька. Мерцание исчезает при cl_predict 0, но при этом значении играть не возможно.
-
2 минуты назад, partoftheworlD сказал:
Нопить во время старта игры, запустил программу она в цикле ищет игру, если находит, то патчит необходимые тебе байты и закрывается.
это понятно. но как адреса этих байтов найти?
-
вот что нарыл в sdk
Скрытый текст#define MAX_ALIAS_NAME 32 typedef struct cmdalias_s { struct cmdalias_s *next; char name[ MAX_ALIAS_NAME ]; char *value; } cmdalias_t; static cmdalias_t *cmd_alias = NULL; /* =============== Cmd_Alias_f Creates a new command that executes a command string (possibly ; seperated) =============== */ void Cmd_Alias_f (void) { cmdalias_t *a; char cmd[1024]; int i, c; char *s; if (Cmd_Argc() == 1) { Con_Printf ("Current alias commands:\n"); for (a = cmd_alias ; a ; a=a->next) Con_Printf ("%s : %s\n", a->name, a->value); return; } s = Cmd_Argv(1); if (strlen(s) >= MAX_ALIAS_NAME) { Con_Printf ("Alias name is too long\n"); return; } // copy the rest of the command line cmd[0] = 0; // start out with a null string c = Cmd_Argc(); for (i=2 ; i< c ; i++) { strcat (cmd, Cmd_Argv(i)); if (i != c) strcat (cmd, " "); } strcat (cmd, "\n"); // if the alias allready exists, reuse it for (a = cmd_alias ; a ; a=a->next) { if (!strcmp(s, a->name)) { if ( !strcmp( a->value, cmd ) ) // Re-alias the same thing return; delete[] a->value; break; } } if (!a) { a = (cmdalias_t *)new cmdalias_t; a->next = cmd_alias; cmd_alias = a; } strcpy (a->name, s); a->value = CopyString (cmd); } static ConCommand alias("alias",Cmd_Alias_f);
Через CE нашел сначала строку "Current alias commands:", поставил брейк поинт на чтение, при выполнении комнады alias вышло две функции: https://www.dropbox.com/s/960r1oe5j4yez2e/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%202017-01-30%2014.50.23.png?dl=0
Но что то думаю что копаю не в ту сторону. По коду есть ConCommand alias("alias",Cmd_Alias_f); т.е. регистрация команды alias. по идее эту строку и нужно занопить, но вот как словить это событие если регистрация команды происходит сразу после старта игры.
-
как найти кусок кода связанный с исполнением команды alias? чтоб занопить.
-
Разобрался, тему можно закрывать.
Хук:
http://www.unknowncheats.me/forum/d3d-tutorials-and-source/58599-vtable-d3d9-base.html
Код для скриншота:
Скрытый текстHRESULT DXI_Capture(IDirect3DDevice9* Device, const char* FilePath) { IDirect3DSurface9* RenderTarget = nullptr; HRESULT result = Device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &RenderTarget); result = D3DXSaveSurfaceToFile(FilePath, D3DXIFF_JPG, RenderTarget, nullptr, nullptr); //SafeRelease(RenderTarget); return result; }
-
55 минут назад, gmz сказал:
http://flatassembler.net/examples/screenshot.zip
годится как теоретический пример... наверно снятие скрина с д3д не особо отличается
при полноэкранном режиме выдает черный снимок(
вот в программе фрапс при запуске происходит инжект к игре fraps32.dll
-
Вопрос в заголовке. Есть какие нибудь идеи реализации? Сам очень много гуглил, но так ничего рабочего не нашел. Теоретически понимаю, что без инжекта не обойтись, но как реализовать загадка.
-
Найти это не сложно, сигнатуру сам думаю сделаешь. В общем полазив немного по коду.
.text:000B3ED0 ExecuteCmd proc near ; DATA XREF: .rdata:003067E4o.text:000B3ED0 push ebp.text:000B3ED1 mov ebp, esp.text:000B3ED3 push dword ptr [ebp+8].text:000B3ED6 call Cbuf_AddText ; STR: "Cbuf_AddText: buffer overflow".text:000B3EDB add esp, 4.text:000B3EDE call Cbuf_Execute .text:000B3EE3 pop ebp.text:000B3EE4 retn 4.text:000B3EE4 ExecuteCmd endp
Я искал с помощью engine.dylib как в первом посте описывал, ExecuteCmd это 106 индекс в виртуальной таблице CEngineClient. Если будешь искать не по виртуальной таблице, то для начала надо найти строку "Cbuf_AddText: buffer overflow" эта строка находится в функции "Сbuf_Addtext", дальше смотришь откуда вызывается она, переходишь по этим ссылкам и ищешь примерно похожий код. Если будет время, возможно вечером запишу как это работает
а у меня в папке с игрой только client.dylib и server.dylib
-
На гитхабе нашел проект, называется sourcecmd, который выполняет консольные команды в играх типа CS:GO, CS:S и т.д. Но для работы как я понял нужно обновить сигнатуру. Так вот как через cheatengine найти сигнатуру на выполнение консольных команд?
if ( ::ReadProcessMemory( mhProcess, hmEngine, dump, size, NULL ) ) { // Do a sigscan for CEngineClient::ExecuteClientCmd // (old) Pattern: 8B 44 24 04 50 E8 ? ? ? ? 68 ? ? ? ? E8 ? ? ? ? 83 C4 08 E8 ? ? ? ? C2 04 00 // (old) Pattern: 55 8B EC 8B 45 08 50 E8 ? ? ? ? 68 ? ? ? ? E8 ? ? ? ? 83 C4 08 5D C2 04 00 // Pattern: 55 8B EC 8B 45 08 50 E8 ? ? ? ? 83 C4 04 5D C2 04 00 if ( void* p = FindPattern( dump, size, "\x55\x8B\xEC\x8B\x45\x08\x50\xE8\x00\x00\x00\x00\x83\xC4\x04\x5D\xC2\x04\x00", "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF" ) )
[Counter-Strike: Source] ISurface Проблема с выводом кирилицы
in Вопросы по взлому FPS игр
Опубликовано
Спасибо тебе админушка! Проблема действительно была в подсчете строки, заменил на wcslen(wstr) и все работает корректно)