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

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

ДВС!

Стал интересен процесс реверс инжиниринга. После просмотров мануалов на ютубе от GameHackLab и Keng'а, появились начальные знания в этой области, за что им большая благодарность! При анализе игры CS 1.6 возникла такая проблема:

Не получается найти реальный адрес здоровья игрока (ХП). При поиске по значению, выдается 8 адресов и дальнейшим отсеиванием это число не изменяется. Есть 1 статический адрес, который отвечает за вывод значения ХП на экран. Остальные 7 адресов, никаким образом не влияют на истинное значение ХП. При их заморозке в Cheat Engine (CE), значения продолжают уменьшаться. Если взять любой из этих 7 адресов и поставить breakpoint на запись, то выходит инструкция такого вида :

mov edx, [eax + 10]

В стуктуре eax по смещению 10 записано значение ХП на данный момент.

Подскажите, как найти настоящее значение?

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

Настоящий адрес нашелся через функцию нанесения урона. Причем порадовало, что он статический. Значения в нем хранятся в виде Float.  Следующая трудность возникла с реализацией бессмертия - данные о здоровье игрока и противника лежат в одной структуре. Как в этом случае отфильтровать по принципу "свой-чужой"?

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

Понятно! Значит по одной инструкции работают адрес(а) твои и ботов тоже...

Знаю 3 варианта как отфильтровать...

1: Найти многоуровневый указатель.

2: Анализ данных/структур.

3: Использовать регистры со смещениями.

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

Т.е. написать как фильтр, скрипт вроде этого:

alloc(newmem,2048)label(returnhere)label(originalcode)label(exit)newmem:cmp [eax+10],#100jne exitoriginalcode:fld dword ptr [eax+10]jmp returnhereexit:fld dword ptr [eax+10]mov [eax+10],(Float)100jmp returnhere"css.dll"+977C9:jmp newmemnopreturnhere:[DISABLE]"css.dll"+977C9:fld dword ptr [eax+10]dealloc(newmem)

Спасибо за подсказку. Буду работать в этом направлении.

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

Ну что-то в этом роде! Главное что бы работало всегда и везде.

Если что, скрипт можно всегда отфиксить...

В общем удачного взлома!!! ;)

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

Попробую подсказать - в современных версиях CS (Source и GO) есть разделение игроков на команды. Думаю, что такое же есть и в 1.6. Обычно это целое число, 0, 1 или 2. 0 в данном случае - "наблюдатель" (spectator), который бесплотным духом ездит по карте и просто смотрит, как другие играют. Соответственно, 1 и 2 - T и CT.
Ссылка на комментарий
Поделиться на другие сайты

Все структуры игроков изучил по несколько раз, идентификатор команды так и не нашел. Ни 0 - SP, 1 -TR, 2 - CT. Ни 1 - SP, 2 -TR, 3 - CT. Ничего похожего нет даже. Места, где совпадают по команде значения, меняются при перезапуске :(

Пришлось зацепиться за идентификатор определения бота от игрока. В результате infinite_hp независимо от команды. Также на основе этого реализовал one_hit_kill. Дальнейшее направление связанно со структурой оружия. Реализовано infinite_ammo, no_recoil, rapid_fire. Ковыряю дальше :mad::-D

 

Подскажите, как найти функцию отвечающую за кучность стрельбы? Хотя бы пример как она может выглядеть в листинге дизассемлера.

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

Чаще всего это некий таймер и пара инструкций - CMP для сравнения, не равна ли текущая кучность максимальной и за ней CALL для вызова функции, которая эту самую кучность реализует. Реализуется практически так же, как и no recoil.
Ссылка на комментарий
Поделиться на другие сайты

Привет всем!

 

Пытаюсь найти функцию, отвечающую за точность стрельбы. Перепробывал нопить call'ы, изменять значения заносимые в регистры, менять условные переходы на безусловные, менять условия перехода...В итоге сработало только затереть инструкцию или изменить вид перехода jg zbotcz.weapon_usp+602. При этом возникла проблема - появилась точность + как бонус бесконечные патроны, но...пропал дамаг.

При переходе по адресу zbotcz.weapon_usp+602, расположена инструкция

Подскажите, в чем может быть причина?

NullAlex: большой код принято убирать под спойлер.
mov eax,[esi+000000CC]test eax,eaxmov [esi+000000FC],ecxjg zbotcz.weapon_usp+602 mov eax,[esi+000000B4]test eax,eaxje zbotcz.weapon_usp+5DAmov edx,[esi]mov ecx,esicall dword ptr [edx+0000014C]call zbotcz.func_rain+50fadd qword ptr [zbotcz.worldspawn+E768]fstp dword ptr [esi+000000B8]mov ecx,[zbotcz.`string'+16EA8]test ecx,ecxje zbotcz.weapon_usp+7FBmov edx,[esi+000000A4]mov eax,[ecx]push 00push edxpush 02call dword ptr [eax+24]pop edipop esipop ebppop ebxadd esp,24ret 000Ccall zbotcz.func_rain+50fadd dword ptr [esp+3C]mov ebx,[esi+000000CC]mov ecx,esidec ebxmov [esi+000000CC],ebx          // Бряк на запись сработал здесь
fld dword ptr [zbotcz.worldspawn+E750] // 0000000000ret 
Ссылка на комментарий
Поделиться на другие сайты

Подскажите, в чем может быть причина?

Во-первых не понятно - на что ты ставил бряк (на дамаг?) // Бряк на запись сработал здесь.

PS: И ещё jg - это оригинальный прыжок или уже изменённый тобой?

 

Во-вторых предположу, что раз ты игрался с переходом jg zbotcz.weapon_usp+602., то видимо игра не получает значение дамага и тебе его нужно занести в адрес, наверное нужно сделать так, перед прыжком  jg zbotcz.weapon_usp+602 записать в адрес [zbotcz.worldspawn+E750], какое-нибудь значение, типа: 

mov dword ptr [zbotcz.worldspawn+E750],(float)1000  

а после пусть инструкция

fld dword ptr [zbotcz.worldspawn+E750] // (float)1000ret 

выталкивает это значение в стек.

Попробуй, может получиться.

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

Код оригинальный. Бряк ставил на количество патронов в обойме. Через него вышел на структуру оружия. Там и нашел функции подсчета патронов, скорострельность, отдачу. Нашел даже функцию стрельбы отсечками. А на функции точности стрельбы застрял. Сделал как сказал Garik66, не помогло. Крашится.

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

Тогда вот это: 

В итоге сработало только затереть инструкцию или изменить вид перехода jg zbotcz.weapon_usp+602.

нужно поподробней изложить. Какую инструкцию nopиш? И на какой переход меняешь? 

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

Вроде всё ясно написано.


 

Перепробывал нопить call'ы, изменять значения заносимые в регистры, менять условные переходы на безусловные, менять условия перехода...В итоге сработало только затереть инструкцию или изменить вид перехода jg zbotcz.weapon_usp+602.

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

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

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

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