Патчим байты с SourcePython

x330122

Участник
Сообщения
357
Реакции
152
Это не совсем гайд, а скорее всего лишь пошаговая инструкция того как я патчил байты в инструкции server.so файла для того, чтобы игроков не обезоруживало от удара кулаков на ПКМ в CSGO

Для чего это надо ?
Для меня лично это лучше чем компилить Extension и патчить сошку(.SO) напрямую.

Что вам понадобится:
Ida(6.8+)
PyCharm
HxD

Шаг первый

Для начала надо определится что конкретно надо пропатчить и какую инструкцию, заменить JE на JMP или еще что.
В моем случае я хотел отключить обезоруживание игроков от удара кулаками.
Окей, открываем Ida Pro, закидываем туда server.so файл, прыгаем на нужную инструкцию.
В моем случае было вот это:

1583245644883.png

Я хочу заменить jz на jmp loc_C4202F
Выделяем нужную вам инструкцию и затем переходим в Text View и выделяем адрес на котором находится данная инструкция(В моем случае адрес находится на 00C42915)

Шаг второй

Открываем HxD, закидываем туда нашу сошку, затем из полученного ранее адреса(00C42915), переходим на этот адрес.
Результ:
1583245969439.png


Окей, прыгнули на нужные нам байты, теперь надо выделить какой участок байтов мы можем пропатчить.
В HxD кликаем на UInt64 получаем :
1583246035943.png


Видим выделился участок который мы можем спокойно пропатчить просто поменяв число через плагин.
Одно но, если вы пропатчите байты которые выходят за предел этой границы, возможен Segmentation Fault 💩.
Окей, определились что мы можем пропатчить.

Шаг третий

Начинаем менять инструкцию в иде.
Я поменял вот так
1583246217237.png

Окей, байты поменялись, теперь открываем Hex View в иде и смотрим какие байты поменялись.

1583246288363.png
Вот что получилось.

Теперь мы прыгаем назад в HxD, начинаем по байту вводить изменения

1583246541340.png

Запомните значения UInt64 до и после, это будет необходимо.
Значение Было - это то, что плагин будет искать чтобы пропатчить, а значение Стало - это то, что плагин запишет вместо этого значения(пропатчит типа)

Шаг четвертый

Разжуйте все то что вы сделали, вникните в суть(если сможете, этот этап можно пропустить)
Запишите себе в блокнотик следующие:
Место где находится эта инструкция(адрес): 0x00C42915
Значения До и После из 3-го шага.

Молимся, потом начинаем писать плагин.

Быдлокод:
from memory import *
from memory.hooks import *
from memory.manager import TypeManager


func = find_binary('server.so')[b'']#Тут мы берем нашу сошку, с ней мы будем работать OFC(KFC)
#0x00C42915 - это адрес инструкции в сошке
(func + 0x00C42915).unprotect(8)#Очень важная строка которую я искал целый день, если её не будет, Segmentation fault вам обеспечен.(Спс челику
#https://steamcommunity.com/id/hhrhhrhrhr/)
val = func.get_ulong_long(0x00C42915)#Проверяем что значение ДО совпало с этим адресом.
print('Значение до' + str(val))#Да, вот смотреть вот сюда надо.
val = func.set_ulong_long(16206362688278173161, 0x00C42915)#Если все чики пуки, то начинаем менять значение на то которое нужно(Значение После)
print(val)#Если написало None, то поздравляю, вы пропатчили байты.

Сохраняем, закидываем в плагин папку, загружаем плагин(sp plugin load <имя плагина которое вы указали>)

Радуемся !
Результик:
Накинь на дошик если твой 1337 scripting скилл увеличился на 1%:
Qiwi +79232709034
 
Сверху Снизу