下一个Python代码行做什么?结果是什么?

问题描述 投票:0回答:3
_ = lambda __ : __import__('base64').b64decode(__[::-1]);exec((_)(b'=kSKnoFWoxWW5d2bYl3avlVajlTYx4ETi1WOHZlM5QjVxMWMaRkSpd1V3pXWYp1cW1mRxJmRSpVZYRGdVJDcwImVkplWHhXahp3a3Z1akNkYtpkcRtmUhNWRaRXVrB3dXZEZ2cFVGpWVwoURZpmRTZVMKJ3YGRmWXZkSIZFbvhnUyYVVNdFdOR1aaVkVuJ1VWZkUzNWRklWTFlFeUVlT3ZlVWVzVWZlaW5GaIl1VotkUxolehRkRXRmVvhXVWp0ShxWTyMlaGhWYzIFWX5mRhJFbkFmWFpVYjRlRWl1ak9UZsZVeOVlVVFWMwJnVww2dSxmTzQFboVVZUJlVUZlVTJmRSdHVthnTNVUS6ZlVWtUTGp0TlVEZp5kasZlVtR3ciZFZ2UVVkR1VqZESZZVU4FGMxAlUtBnWSxmS0VlM0FmVWNWMaZkWpNmeWhlVuxmdNdkTXN2RxU1YUZlVWpmRWNlRap0TWR2ThZlWzZFRO9kYGpFUlZEZaZ1MCdlWGB3SSZEc2M1V450U6xGWW5WRxEmMGJnWFpFbTVFN4ZlaGJUYsZVNOVkVqlVVaFnVIJ0SiZlSLNmRohlTs9GeWdEbwIlMVl3TEJ0VlZUR3dVVaRjUxoEaaVkVs1ERCZUWuR2aNFjW5VVbxQVYrVTRZZFbrJFbaR0TXRnWkhUQ3plRJFjUyo0bUpmSoNVMZpnVWh2bl1mUYJlbwlWTxo0RZ1WO0YVMwh3Vsp1TXtWNxZleOdnUrFDUX5GcVZFbKRXVwUzVNdUSyI2R4lWYthWdW5GbWFmMK1EVqZEaPdlTwd1V5IXZWhmdaNDbaJ2Rol1VpNGcLFVP9ciYokyXogyYlhXZ'))
python python-3.x decompiler
3个回答
2
投票

如果你跑步:

import base64
 
print(base64.b64decode(b'=kSKnoFWoxWW5d2bYl3avlVajlTYx4ETi1WOHZlM5QjVxMWMaRkSpd1V3pXWYp1cW1mRxJmRSpVZYRGdVJDcwImVkplWHhXahp3a3Z1akNkYtpkcRtmUhNWRaRXVrB3dXZEZ2cFVGpWVwoURZpmRTZVMKJ3YGRmWXZkSIZFbvhnUyYVVNdFdOR1aaVkVuJ1VWZkUzNWRklWTFlFeUVlT3ZlVWVzVWZlaW5GaIl1VotkUxolehRkRXRmVvhXVWp0ShxWTyMlaGhWYzIFWX5mRhJFbkFmWFpVYjRlRWl1ak9UZsZVeOVlVVFWMwJnVww2dSxmTzQFboVVZUJlVUZlVTJmRSdHVthnTNVUS6ZlVWtUTGp0TlVEZp5kasZlVtR3ciZFZ2UVVkR1VqZESZZVU4FGMxAlUtBnWSxmS0VlM0FmVWNWMaZkWpNmeWhlVuxmdNdkTXN2RxU1YUZlVWpmRWNlRap0TWR2ThZlWzZFRO9kYGpFUlZEZaZ1MCdlWGB3SSZEc2M1V450U6xGWW5WRxEmMGJnWFpFbTVFN4ZlaGJUYsZVNOVkVqlVVaFnVIJ0SiZlSLNmRohlTs9GeWdEbwIlMVl3TEJ0VlZUR3dVVaRjUxoEaaVkVs1ERCZUWuR2aNFjW5VVbxQVYrVTRZZFbrJFbaR0TXRnWkhUQ3plRJFjUyo0bUpmSoNVMZpnVWh2bl1mUYJlbwlWTxo0RZ1WO0YVMwh3Vsp1TXtWNxZleOdnUrFDUX5GcVZFbKRXVwUzVNdUSyI2R4lWYthWdW5GbWFmMK1EVqZEaPdlTwd1V5IXZWhmdaNDbaJ2Rol1VpNGcLFVP9ciYokyXogyYlhXZ'[::-1]).decode())

它将从一层转换中转储Python源代码。然后,您可能需要以类似的方式执行进一步的反混淆步骤以获得“真实代码”。

exec
正在运行所说的代码(这是一个糟糕的想法,因为实际行为尚未得到验证),其余部分只是从整个事情中做一行。

运行大约五轮重复的 Base64 解码并将最终结果解码为正确的

str
后,您最终会得到:

import os

os.system("pkg install figlet")
os.system("pkg install ruby")
os.system("gem install lolcat")
os.system("pkg install neofetch")
os.system("pkg install espeak")

从表面上看,它似乎并不是特别恶意,但我会将任何此类毫无意义的混淆代码视为可疑,除非另有证明(我无法知道这些包中的任何一个是否可能在某些情况下执行恶意操作或创建其他恶意事物可以利用的漏洞)。


1
投票

混淆非常简单,但也很有趣。特别注意

;
,它将其分为两个单独的语句:

_ = lambda __ : __import__('base64').b64decode(__[::-1]);
exec((_)(b'=kS...hXZ'))

它创建了一个名为

_
的 lambda 函数,它本身有一个名为
__
的参数。然后 lambda 导入 base64 并调用其方法
b64decode
。它通过什么?
__[::-1]
- 参数
__
反转一次,然后返回该调用的结果。这就完成了 lambda 定义。

然后调用

exec
,并使用原始的 Base64 字符串调用 lambda 的结果。第一个 lambda 调用的结果是另一个类似于
exec((_)(b'=kS...hXZ'))
的代码片段,只是其中包含另一种 base64 字符串。由于您将该字符串传递给
exec
,它将运行一个
exec
,它将运行一个
exec
,它将运行一个
exec
...嵌套会持续 5?级别,直到您最终得到执行一些潜在恶意
os.system
调用的 Python 代码。


0
投票

所有这些都可以通过一次更改来利用。 (底部的简单答案)您可以继续循环它,而不实际解码 Base64,而只是继续打印 exec 函数。因此,每当你用 print it 替换 exec 时,它只是给你另一个 exec 函数,但你正在打印一个字符串。因此,使用字符串文字,您可以执行 string 操作,并将 exec 替换为 print 到运行函数的位置。例如

_ = lambda __ : import('base64').b64decode(__[::-1]);print((_)(b"#yourBase64code#))

这个稍微修改的版本将打印另一个 exec 函数。您可能会打印另一个字符串,并得到如下结果:

“exec(b'#whateverBase64code#')”

现在您可以继续复制结果并更改上面原始行的 #yourBase64code# 部分,并继续执行此操作,直到获得结果,但这需要一段时间。有很多方法可以解决这个问题。

_ = lambda __ : import('base64').b64decode(__[::-1]);print(exec((_)(b"#yourBase64code#)))

^这将运行 Base64 上编码的任何文件。因此,如果我对你的进行精确的更改,它将如下所示: _ = lambda __ : import('base64').b64decode(__[::-1]);print(exec((_)(b'=kSKnoFWoxWW5d2bYl3avlVajlTYx4ETi1WOHZlM5QjVxMWMaRkSpd1V3pXWYp1cW1mRxJmRSpVZYRGdVJDcwImVkplWHhXahp3a3Z1akNkYtpkcRtmUhNWRaRXVrB3dXZEZ2cFVGpWVwoURZpmRTZVMKJ3YGRmWXZkSIZFbvhnUyYVVNdFdOR1aaVkVuJ1VWZkUzNWRklWTFlFeUVlT3ZlVWVzVWZlaW5GaIl1VotkUxolehRkRXRmVvhXVWp0ShxWTyMlaGhWYzIFWX5mRhJFbkFmWFpVYjRlRWl1ak9UZsZVeOVlVVFWMwJnVww2dSxmTzQFboVVZUJlVUZlVTJmRSdHVthnTNVUS6ZlVWtUTGp0TlVEZp5kasZlVtR3ciZFZ2UVVkR1VqZESZZVU4FGMxAlUtBnWSxmS0VlM0FmVWNWMaZkWpNmeWhlVuxmdNdkTXN2RxU1YUZlVWpmRWNlRap0TWR2ThZlWzZFRO9kYGpFUlZEZaZ1MCdlWGB3SSZEc2M1V450U6xGWW5WRxEmMGJnWFpFbTVFN4ZlaGJUYsZVNOVkVqlVVaFnVIJ0SiZlSLNmRohlTs9GeWdEbwIlMVl3TEJ0VlZUR3dVVaRjUxoEaaVkVs1ERCZUWuR2aNFjW5VVbxQVYrVTRZZFbrJFbaR0TXRnWkhUQ3plRJFjUyo0bUpmSoNVMZpnVWh2bl1mUYJlbwlWTxo0RZ1WO0YVMwh3Vsp1TXtWNxZleOdnUrFDUX5GcVZFbKRXVwUzVNdUSyI2R4lWYthWdW5GbWFmMK1EVqZEaPdlTwd1V5IXZWhmdaNDbaJ2Rol1VpNGcLFVP9ciYokyXogyYlhXZ')))

^这将运行任何函数或以 base64 编码的任何内容。希望这对某人有帮助

-AmoDiaLZ

© www.soinside.com 2019 - 2024. All rights reserved.