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

Выполнение команд в консоли игры (CS:GO, CS:S)


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

На гитхабе нашел проект, называется 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" ) )
Ссылка на комментарий
Поделиться на другие сайты

Для того чтобы получить адрес буфера CEngineClient::ExecuteClientCmd, тебе надо либо пользоваться виртуальной таблицей, либо искать вызов этой функции в дизассемблере где-то около вызова cvar-команд или самый простой способ найти engine.dylib для MAC OS нужной тебе игры, там каждая функция подписана.

nkuERkiBjBE.jpg

Изменено пользователем partoftheworlD
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

darthmaul, самый простой способ, который я знаю. Ищешь все значения сперва 1 или 0 , включаешь нужный чит и отсеиваешь 0 или 1, выключаешь чит и отсеиваешь 1 или 0, и так несколько раз до нужного значения. Узнаёшь при помощи брекпойта на запись и чтение нужный адрес и на основе этого адреса делаешь сигнатуру.
Ссылка на комментарий
Поделиться на другие сайты

Найти это не сложно, сигнатуру сам думаю сделаешь. В общем полазив немного по коду.
 

.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", дальше смотришь откуда вызывается она, переходишь по этим ссылкам и ищешь примерно похожий код. Если будет время, возможно вечером запишу как это работает :-D

Изменено пользователем partoftheworlD
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Найти это не сложно, сигнатуру сам думаю сделаешь. В общем полазив немного по коду.

 

.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", дальше смотришь откуда вызывается она, переходишь по этим ссылкам и ищешь примерно похожий код. Если будет время, возможно вечером запишу как это работает :-D

а у меня в папке с игрой только client.dylib и server.dylib

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

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

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

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