Часто бывает что строки в программе чем то зашифрованы, обычно это base64 и подобные, однако мне всё чаще попадаются программы где шифрование самодельное (ох уж этот xor) и порой реверсить это дело не хочется! В этой статье я опишу как убрать шифрование и подсовывать программе строки в нормальном виде.
Наш подопытный на сегодня - это бот для одного из тысячи сайтов по обмену лайками, он бесплатный, автор молодец и наверное на этом можно было бы закончить статью если бы не одно но! Бот сливает % лайков разработчику, многие негодуют по этому поводу и пишут мне с просьбой вписать рефку, ну и приходиться вписывать, тем более 500р за 5-10 минут совсем не плохо.
Начнём с поиска зашифрованной строки, далеко ходить не надо - в FormCreate находим:
Минутка криптоанализа:
Мы имеем строку, из прошлых версий нам известно, что там 2 ссылки на _goo.gl через запятую, значит разделим эту строку на 2 части которые сразу заметно:
dxx|6##kcc"k`#];cfa:
dxx|6##kcc"k`#H;JOI=
По этим данным мы можем сделать вывод, что используется посимвольное нахождение исходного текста путём математических вычислений, и уже имея это на руках легко подобрать алгоритм! Попробуем представить буквы ASCII кодами:
ASCII(d) = 100; надо получить h (104)
ASCII(x) = 120; надо получить t (116)
Как можно заметить - цифры отличаются и в большую и в меньшую сторону, значит тут замешан XOR! Можно подобрать XOR-байт и это будет самое простое решение, но я пойду другим путём...
С шифрованием разобрались, теперь давайте локализуем место расшифровки ссылок, делается это при помощи сниффера и отладчика, т.е. отлаживаем и смотрим на каком этапе отправляется запрос. У меня запрос рефки отправился тут:
Топаем в эту функцию и сразу же бросается в глаза:
А тут вот что:
Судя по всему выделенная на скриншоте выше функция отвечает за расшифровку, проверим так ли это:
А вот и функция, которая как и предполагалось отвечает за расшифровку ссылок! Тут мы можем пойти двумя путями:
1. Глазами отреверсить этот "мэгоалгоритмтрудешифрования"
2. Выпилить его отсюда что бы не огорчал криптоаналитиков.
Я пойду по второму пути и сделаю так, что бы алгоритм расшифровки пропускался:
Так как программа расшифровывает ссылку в туже переменную - мы просто делаем прыжок в конец цикла расшифровки и текст остаётся неизменным, в результате функция вернёт тот же самый текст который приняла.
Ну а дальше пропишем ссылку в программу по адресу 51FE4C и получим:
Проснифаем что получилось - всё работает!
К сожалению статья писалась давно и исследуемой программы у меня не осталось, но надеюсь всё было понятно и вы без труда сможете воспользоваться этим приёмом на другом софте. Как всегда если что то не понятно - задавайте вопросы в комментариях, постараюсь ответить на все.
Наш подопытный на сегодня - это бот для одного из тысячи сайтов по обмену лайками, он бесплатный, автор молодец и наверное на этом можно было бы закончить статью если бы не одно но! Бот сливает % лайков разработчику, многие негодуют по этому поводу и пишут мне с просьбой вписать рефку, ну и приходиться вписывать, тем более 500р за 5-10 минут совсем не плохо.
Начнём с поиска зашифрованной строки, далеко ходить не надо - в FormCreate находим:
Минутка криптоанализа:
Мы имеем строку, из прошлых версий нам известно, что там 2 ссылки на _goo.gl через запятую, значит разделим эту строку на 2 части которые сразу заметно:
dxx|6##kcc"k`#];cfa:
dxx|6##kcc"k`#H;JOI=
По этим данным мы можем сделать вывод, что используется посимвольное нахождение исходного текста путём математических вычислений, и уже имея это на руках легко подобрать алгоритм! Попробуем представить буквы ASCII кодами:
ASCII(d) = 100; надо получить h (104)
ASCII(x) = 120; надо получить t (116)
Как можно заметить - цифры отличаются и в большую и в меньшую сторону, значит тут замешан XOR! Можно подобрать XOR-байт и это будет самое простое решение, но я пойду другим путём...
С шифрованием разобрались, теперь давайте локализуем место расшифровки ссылок, делается это при помощи сниффера и отладчика, т.е. отлаживаем и смотрим на каком этапе отправляется запрос. У меня запрос рефки отправился тут:
Топаем в эту функцию и сразу же бросается в глаза:
А тут вот что:
Судя по всему выделенная на скриншоте выше функция отвечает за расшифровку, проверим так ли это:
А вот и функция, которая как и предполагалось отвечает за расшифровку ссылок! Тут мы можем пойти двумя путями:
1. Глазами отреверсить этот "мэгоалгоритмтрудешифрования"
2. Выпилить его отсюда что бы не огорчал криптоаналитиков.
Я пойду по второму пути и сделаю так, что бы алгоритм расшифровки пропускался:
Так как программа расшифровывает ссылку в туже переменную - мы просто делаем прыжок в конец цикла расшифровки и текст остаётся неизменным, в результате функция вернёт тот же самый текст который приняла.
Ну а дальше пропишем ссылку в программу по адресу 51FE4C и получим:
Проснифаем что получилось - всё работает!
К сожалению статья писалась давно и исследуемой программы у меня не осталось, но надеюсь всё было понятно и вы без труда сможете воспользоваться этим приёмом на другом софте. Как всегда если что то не понятно - задавайте вопросы в комментариях, постараюсь ответить на все.
Было бы интересно почитать про меры защиты от таких выпиливаний функций из программы.
ОтветитьУдалитьПросто защита программы должна быть частью программы без которой она работать не будет.
Удалить