Запутанный код python на github, который, как я подозреваю, является вредоносным кодом

#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

https://github.com/zVilao/Luxuria-SelfBot-Nuker-Discord

Комментарии:

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.