#python #deobfuscation
Вопрос:
Я не слишком хорошо знаком или знаком с какими-либо языками программирования, поэтому я как бы застрял здесь и задаюсь вопросом, можно ли что-нибудь сделать. Основная суть в том, что я просматривал GitHub в поисках самобота, написанного на python для приложения под названием discord. Мне хотелось на что-нибудь посмотреть, чтобы понять, могу ли я понять, что происходит. В итоге я совершил большую ошибку и забыл проверить сценарий, прежде чем запустить его. Я посмотрел на него немного позже и обнаружил, что он был запутан. Через несколько часов все 3 мои учетные записи discord были зарегистрированы с помощью токена моей учетной записи, который обходит 2fa и проверку входа в систему, и все 3 учетные записи были быстро заблокированы discord. Ни один из других сценариев python, которые я запускал, не был запутан, поэтому я решил, что это наиболее вероятный сценарий. Мне интересно, есть ли простой способ деобфускации кода, чтобы выяснить, является ли это виновником, и удалить его с GitHub.
Вот веб-сайт, с которым он был запутан.
https://development-tools.net/python-obfuscator/
Пришлось опубликовать код здесь, потому что он превысил лимит символов для StackOverflow.
https://zerobin.net/?806880066f5b7356#wyixWYKBCtGhAThmhM4XSwGqVkeXqTaG744nENY/LpA=
Вот репозиторий github
Комментарии:
1. Я думаю, что это может быть больше вопросом для github, если вы отметите что-то как потенциальный вирус, им, вероятно, придется изучить это.
2. К сожалению, вы на собственном горьком опыте узнали о том, как запускать код, который вы не понимаете, и мне жаль, что это случилось с вами.
3. Если только это не заявка на участие в конкурсе на запутывание, закодированные значения и
eval
S-это явный признак того, что это не то, что вы хотите запускать, не анализируя, что это будет делать. Переменныеmagic
,love
,god
иdestiny
почти наверняка являются значениями в кодировке base64. Вы можете расшифровать значения, чтобы получить представление о том, что они представляют.4. Проверьте это: pastebin.com/MMuC1C8B
5. Другая часть: pastebin.com/tkURTe2K
Ответ №1:
Во — первых, я должен предупредить вас: там, где код, с которым вы имеете дело, вероятно, вредоносный, не доверяйте ни одному звену в цепочке-ни сайту запутывания, ни даже мне. Проверьте все сами.
Похоже, что вы можете просто заменить eval(compile())
в последней строке на print()
, чтобы вернуть деобфускированный код, но в предыдущей строке есть запутанные буквы eval
s, которые потенциально могут быть вредоносными.
Делаем это вручную
Я буду использовать какой-нибудь очень простой пример кода:
print('foobar')
Загрузка его на сайт дает 8 строк запутанного кода Python, как и следовало ожидать. На всякий случай я не собираюсь публиковать его здесь полностью, только по одной части за раз.
Во-первых, есть некоторые строки, которые содержат x
экранирование вместо самих символов. Давайте извлекем их и посмотрим, что в них содержится:
>>> joy = 'x72x6fx74x31x33'
>>> joy
'rot13'
>>>
>>> 'x6dx61x67x69x63'
'magic'
>>> 'x63x6fx64x65x63x73x2ex64x65x63x6fx64x65'
... 'x28x6cx6fx76x65x2cx20x6ax6fx79x29'
'codecs.decode(love, joy)'
>>> 'x67x6fx64'
'god'
>>> 'x63x6fx64x65x63x73x2ex64x65x63x6fx64x65'
... 'x28x64x65x73x74x69x6ex79x2cx20x6ax6fx79x29'
'codecs.decode(destiny, joy)'
>>>
>>> 'x74x72x75x73x74'
'trust'
(Я разбил две длинные строки, чтобы не скрывать точки с запятой с правого поля.)
ROT13-это базовый шифр с подстановкой букв. Давайте продолжим и расшифруем:
>>> love = 'DbW2Mi'
>>> destiny = 'pcPt=='
>>> import codecs
>>> codecs.decode(love, joy)
'QoJ2Zv'
>>> codecs.decode(destiny, joy)
'cpCg=='
Теперь мы можем собрать все это вместе и расшифровать:
>>> magic = 'cHJpbn'
>>> god = 'b2Jhci'
>>> trust = magic 'QoJ2Zv' god 'cpCg=='
>>> import base64
>>> base64.b64decode(trust)
b"print('foobar')n"
Итак, снова наш исходный код, который затем компилируется и оценивается в последней строке.
Комментарии:
1. Скрипт разделен на 2 части, первая часть получает информацию с ПК и отправляет информацию на ` canary.discord.com/api/webhooks/853348950941630525/… ` Вторую часть я проверять не буду, но если кто-то захочет проверить: pastebin.com/B2TmVcTZ Рекомендуется выполнять только статический анализ и начинать со строки 502 по 506.
2. Спасибо за помощь и разъяснения. Именно то, что я искал. Я действительно ценю это. Теперь, когда у меня есть веб-крючок, я могу сообщить идентификатор сервера в discord.