Сообщение от
frank
↑
А можно подробнее про послденее предложение, я просто в реверсе совсем не силен, так, на уровне примитива. Т.е., я правильно понимаю что в клиента внедряется некая функция, на не котором этапе обработки кода, отдает функции и код в программу, модифицирует на лету и возвращает в клиента уже где-то на другом этапе обработки?
Уважаемый frank, вы немного не так поняли
1. сначала декомпилируем приложение, находим нужную нам функцию и узнаем её адрес
2. в библиотеке (dll) пишем перехват функции и модификацию данных
например:
в программе есть функция "пить чай" с входными параметрами "тип чая (зелёный, чёрный)" и "кол-во сахара (в чайных ложках)"
эта функция имеет следующий вид - ПитьЧай(чай, сахар) с адресом 0x0000001
делаем прототип функции "пить чай"
эта функция имеет следующий вид - ПрототипПитьЧай(чай, сахар)
делаем перехват функции - я использую метод сплайсинга (
https://ru.wikipedia.org/wiki/Перехват_(программирование ))
суть в том, что когда идёт вызов оригинальной функции ПитьЧай по адресу 0x0000001 то запускается наш прототип ПрототипПитьЧай и получает входные параметры, которые передаются в оригинальную функцию
в функции ПрототипПитьЧай мы изменяем входные параметры и модифицированные данные передаем в оригинальную функцию ПитьЧай
это выглядит примерно так:
//допустим что "чай" - чёрный, а "сахар" - 2 ложки
функция ПрототипПитьЧай(чай, сахар){
//меняем параметры
чай = кофе
сахар = 100500
//передаем модифицированные параметры
ПитьЧай(чай, сахар)
}
или так
//допустим что "чай" - чёрный, а "сахар" - 2 ложки
функция ПрототипПитьЧай(чай, сахар){
//передаем модифицированные параметры
ПитьЧай(кофе, 100500)
}