下一个python代码行是做什么的?它的结果是什么?

2skhul33  于 2022-11-26  发布在  Python
关注(0)|答案(2)|浏览(125)
_ = lambda __ : __import__('base64').b64decode(__[::-1]);exec((_)(b'=kSKnoFWoxWW5d2bYl3avlVajlTYx4ETi1WOHZlM5QjVxMWMaRkSpd1V3pXWYp1cW1mRxJmRSpVZYRGdVJDcwImVkplWHhXahp3a3Z1akNkYtpkcRtmUhNWRaRXVrB3dXZEZ2cFVGpWVwoURZpmRTZVMKJ3YGRmWXZkSIZFbvhnUyYVVNdFdOR1aaVkVuJ1VWZkUzNWRklWTFlFeUVlT3ZlVWVzVWZlaW5GaIl1VotkUxolehRkRXRmVvhXVWp0ShxWTyMlaGhWYzIFWX5mRhJFbkFmWFpVYjRlRWl1ak9UZsZVeOVlVVFWMwJnVww2dSxmTzQFboVVZUJlVUZlVTJmRSdHVthnTNVUS6ZlVWtUTGp0TlVEZp5kasZlVtR3ciZFZ2UVVkR1VqZESZZVU4FGMxAlUtBnWSxmS0VlM0FmVWNWMaZkWpNmeWhlVuxmdNdkTXN2RxU1YUZlVWpmRWNlRap0TWR2ThZlWzZFRO9kYGpFUlZEZaZ1MCdlWGB3SSZEc2M1V450U6xGWW5WRxEmMGJnWFpFbTVFN4ZlaGJUYsZVNOVkVqlVVaFnVIJ0SiZlSLNmRohlTs9GeWdEbwIlMVl3TEJ0VlZUR3dVVaRjUxoEaaVkVs1ERCZUWuR2aNFjW5VVbxQVYrVTRZZFbrJFbaR0TXRnWkhUQ3plRJFjUyo0bUpmSoNVMZpnVWh2bl1mUYJlbwlWTxo0RZ1WO0YVMwh3Vsp1TXtWNxZleOdnUrFDUX5GcVZFbKRXVwUzVNdUSyI2R4lWYthWdW5GbWFmMK1EVqZEaPdlTwd1V5IXZWhmdaNDbaJ2Rol1VpNGcLFVP9ciYokyXogyYlhXZ'))
ddrv8njm

ddrv8njm1#

如果您执行:

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")

从表面上看,它似乎并不特别恶意,但我会把任何这种毫无意义的混淆代码视为可疑,直到证明不是这样(我没有办法知道这些软件包中的任何一个在某些情况下是否可能做恶意的事情或创建其他恶意东西可以利用的漏洞)。

shyt4zoc

shyt4zoc2#

模糊处理非常简单,但也很有趣。特别注意;,它将此分为两个单独的语句:

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

它创建了一个lambda函数_,它本身有一个参数__。lambda函数然后导入base64并调用它的方法b64decode。它传递什么?__[::-1]-参数__被反转一次,然后返回调用的结果。这就完成了lambda定义。
然后它调用exec,结果是用原始的sort-of-base64字符串调用lambda。第一次lambda调用的结果是另一个代码片段,看起来像exec((_)(b'=kS...hXZ')),只是里面有另一个sort-of-base64字符串。因为你把这个字符串传递给exec,它会运行一个execexec又会运行一个execexec又会运行一个exec......这个嵌套会持续5?直到您最终得到执行某些潜在恶意os.system调用的python代码。

相关问题