问题描述
我对任何编程语言都不太熟悉或没有经验,所以我有点被困在这里,想知道是否可以做任何事情。基本要点是,我在 GitHub 上浏览了一个用 python 编写的 selfbot,用于一个名为 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
解决方法
首先,我应该警告您:您正在处理的代码可能是恶意的,不要相信链中的任何链接 - 不是混淆网站,甚至我也不相信。自己验证一切。
看起来您可以简单地将最后一行中的 eval(compile())
替换为 print()
以获取反混淆的代码,但是有混淆的 eval
在前一行中,这可能是恶意的。
手动操作
我将使用一些真正简单的示例代码:
print('foobar')
如我们所料,将其上传到站点会产生 8 行混淆的 Python 代码。为安全起见,我不会将其全部发布在这里,一次只发布一篇。
首先,有些字符串包含 \x
转义符而不是字符本身。让我们提取它们,看看它们包含什么:
>>> joy = '\x72\x6f\x74\x31\x33'
>>> joy
'rot13'
>>>
>>> '\x6d\x61\x67\x69\x63'
'magic'
>>> '\x63\x6f\x64\x65\x63\x73\x2e\x64\x65\x63\x6f\x64\x65'\
... '\x28\x6c\x6f\x76\x65\x2c\x20\x6a\x6f\x79\x29'
'codecs.decode(love,joy)'
>>> '\x67\x6f\x64'
'god'
>>> '\x63\x6f\x64\x65\x63\x73\x2e\x64\x65\x63\x6f\x64\x65'\
... '\x28\x64\x65\x73\x74\x69\x6e\x79\x2c\x20\x6a\x6f\x79\x29'
'codecs.decode(destiny,joy)'
>>>
>>> '\x74\x72\x75\x73\x74'
'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"
所以我们的原始代码又回来了,然后在最后一行编译和评估。