首页 > 其他分享 >键盘监听木马实验

键盘监听木马实验

时间:2024-10-31 10:00:01浏览次数:1  
标签:hKeyboardHook int 钩子 public 键盘 木马 监听

成绩

《实验4:键盘监听木马实验》报告

目录

《实验4:键盘监听木马实验》报告 1

一、实验目标 3

二、实验工具 3

三、实验内容 3

1. 编写一个键盘监听木马 3

1. C#全局键盘监听(Hook)的使用 3

2. 键盘记录木马源代码 3

3. 键盘记录木马制作 (易语言版) 3

四、 实验结果 4

五、 实验代码 5

// 安装钩子函数原型 5

① 钩子回调处理函数 5

② 安装钩子函数 6

③ 卸载钩子 6

六、 实验心得 9

一、实验目标

理解木马原理,学会实现方法,特别是挂钩函数的使用

二、实验工具

编程工具VS2022系列等

三、实验内容

1. 编写一个键盘监听木马

消息截获顺序:钩子是按加入到钩子链表的顺序决定消息截获顺序。就是说最后加入到链表的钩子最先得到消息。截获范围:钩子分为线程钩子和全局钩子,线程钩子只能截获本线程的消息,全局钩子可以截获整个系统消息。

除了第五部分的关键代码,也可以参考如下代码:

1. C#全局键盘监听(Hook)的使用

https://www.cnblogs.com/zhaoyuncai/p/7684958.html

2. 键盘记录木马源代码

https://download.csdn.net/download/jieyanping2708/10596398

3. 键盘记录木马制作 (易语言版)

https://download.csdn.net/download/xsam95/3654596

实验结果

钩子就是想钩住一些东西,在程序里可以利用钩子提前处理些Windows消息。本实验内容:有一个Form,Form里添加一个TextBox,用户在TextBox里输入的时候,不管敲键盘的哪个键,TextBox里显示的始终为“钩子已经改写了输入内容!”并给出提示信息“您输入的内容已经被改写,小心病毒哦!”;这时就可以利用钩子监听键盘消息,先往Windows的钩子链表中加入一个自己写的钩子监听键盘消息,只要一按下键盘就会产生一个键盘消息,我们的钩子在这个消息传到TextBox之前先截获它,让TextBox显示“钩子已经改写了输入内容!”并弹出提示信息,之后结束这个消息,这样TextBox得到的总是“钩子已经改写了输入内容!”。

实验代码

  • 关键代码

// 安装钩子函数原型

int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);

// 卸载钩子函数原型

public static extern bool UnhookWindowsHookEx(int idHook);

// 继续下一个钩子函数原型

public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);

// 取得当前线程编号函数原型

static extern int GetCurrentThreadId();

  1. 钩子回调处理函数

private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)

{

if (nCode >= 0)

{

textBox1.Text = "钩子已经改写了输入内容!";

MessageBox.Show("您输入的内容已经被改写,小心病毒哦!");

return 1;

}

return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);

}

  1. 安装钩子函数

public void HookStart()

{

if (hKeyboardHook == 0)

{

// 创建HookProc实例

KeyboardHookProcedure = new HookProc(KeyboardHookProc);

// 设置线程钩子

hKeyboardHook = SetWindowsHookEx(2, KeyboardHookProcedure, IntPtr.Zero, GetCurrentThreadId());

// 如果设置钩子失败

if (hKeyboardHook == 0)

{

HookStop();

throw new Exception("SetWindowsHookEx failed.");

}

}

}

  1. 卸载钩子

public void HookStop()

{

bool retKeyboard = true;

if (hKeyboardHook != 0)

{

retKeyboard = UnhookWindowsHookEx(hKeyboardHook);

hKeyboardHook = 0;

}

if (!(retKeyboard))

throw new Exception("UnhookWindowsHookEx failed.");

}

完整代码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Runtime.InteropServices;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace WindowsFormsApp1

{

    public partial class Form1 : Form

    {

        public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);

        static int hKeyboardHook = 0;

        HookProc KeyboardHookProcedure;

        // 安装钩子

        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention =

        CallingConvention.StdCall)]

        public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr

        hInstance, int threadId);

        // 卸载钩子

        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention =

        CallingConvention.StdCall)]

        public static extern bool UnhookWindowsHookEx(int idHook);

        // 继续下一个钩子

        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention =

        CallingConvention.StdCall)]

        public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr

        lParam);

        // 取得当前线程编号

        [DllImport("kernel32.dll")]

        static extern int GetCurrentThreadId();

        public Form1()

        {

            InitializeComponent();

        }

        private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)

        {

            if (nCode >= 0)

            {

                textBox1.Text = "钩子已改写了输入内容!";

                MessageBox.Show("您的输入内容已被改写,小心病毒!");

                return 1;

            }

            return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);

        }

        public void HookStart()

        {

            if (hKeyboardHook == 0)

            {

                // 创建 HookProc 实例

                KeyboardHookProcedure = new HookProc(KeyboardHookProc);

                // 设置线程钩子

                hKeyboardHook = SetWindowsHookEx(2, KeyboardHookProcedure,

                IntPtr.Zero, GetCurrentThreadId());

                // 如果设置钩子失败

                if (hKeyboardHook == 0)

                {

                    HookStop();

                    throw new Exception("SetWindowsHookEx failed.");

                }

            }

        }

        // 卸载钩子

        public void HookStop()

        {

            bool retKeyboard = true;

            if (hKeyboardHook != 0)

            {

                retKeyboard = UnhookWindowsHookEx(hKeyboardHook);

                hKeyboardHook = 0;

            }

            if (!(retKeyboard)) throw new Exception("UnhookWindowsHookEx failed.");

        }

        private void Form1_Load(object sender, EventArgs e)

        {

        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)

        {

        }

        private void textBox1_TextChanged_1(object sender, EventArgs e)

        {

            HookStart();

        }

    }

}

实验心得

本次软件安全实验中,我了解了键盘键盘监听木马的原理,对钩子函数有了

一定的认识,并能将钩子函数与 C#相结合使用,在指导书的帮助下,成功编写

代码并实现相应功能,顺利完成实验。

标签:hKeyboardHook,int,钩子,public,键盘,木马,监听
From: https://www.cnblogs.com/maqun/p/18517083

相关文章

  • 低权 Linux 键盘记录方案
    前言日了几台机器,虽说部分机器有ROOT,可以直接用之前的 一般路过PAM后门/SSH密码记录 39,来替换PAM,用于记录密码。然而问题是,这货上了LDAP,还自己改了改他们的PAM,所以直接替换PAM的方案行不通了。而且有一个跳板机,我们没有低权限,但是当前用户却会用这台机器连接其他目标,使用的......
  • ios input 键盘收起页面底部有间隙没有自动还原
    1.ios  input键盘收起页面底部有间隙没有自动还原解决办法:最外层元素增加fixed布局即可2.ios input输入页面会放大,收起时页面不自动还原解决办法input字体设置最小为16px即可3.网页标签切换获取切换状态document.addEventListener("visibilitychange",visibleChange......
  • C10-09-XSS之获取键盘记录、盲打获取cookie及克隆网站和文件上传绕过练习
    免责声明本文仅是个人对XSS和文件上传绕过及相关工具的学习测试过程记录,不具有恶意引导意向。一使用pikachu平台练习XSS键盘记录以dvwa-Low靶场为目标网站,通过dvwa的存储型XSS上传JS,验证pikachu工具对dvwa靶场页面键盘操作的记录1.1调试pikachu环境①调整Pikac......
  • vue3监听和不能使用this问题,uniapp封装请求
    http.js//格式化日期函数exportfunctionrequest(method,url,data){consturls="http://183.6.96.231:29101"; constusername=uni.getStorageSync('username'); consttoken=uni.getStorageSync('token'); uni.showLoading({......
  • springboot监听器的使用(ApplicationListener、SmartApplicationListener、@EventListe
    Springboot监听器的使用(ApplicationListener、SmartApplicationListener、@EventListener)https://blog.csdn.net/m0_54355172/article/details/128592476    目录前言1.ApplicationListener1.简单的全局监听2.定时任务3.监听自定义事件2.SmartApplicatio......
  • 雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的
    如果域名处填写的分别为IP与域名,那么当使用进行IP请求时,则将会命中第一个配置的站点以上图为例,如果用户使用IP访问,命中example.com。如果域名处填写的分别为域名与泛域名,除非准确命中域名,否则会命中泛域名,不论泛域名第几个配置。以上图为例,如果用户使用a.examp......
  • 3.Java 运算符(算术运算符、赋值运算符、逻辑运算符、关系运算符、三元运算符、标识符
    一、算术运算符1、基本介绍运算符说明+正号-负号运算符说明+加-减*乘/除%取模(取余)运算符说明示例结果++自增(前),先运算后取值a=2;b=++a;a=3;b=3;++自增(后),先取值后运算a=2;b=a++;a=3;b=2;–自减(前),先运算后取值a=2;b=--a;a=1;b=1;–自减(后),先......
  • js练习:实现用键盘打架子鼓
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>JSDrumKit</title><linkrel="stylesheet"href="style.css"><linkrel="icon"href......
  • kali一句话木马实验——远程控制(保姆级教程,新手小白也可以操作)
    1.打开apache;在终端中使用管理员权限输入serviceapache2start注:这个是为了打开80端口;打开之后可以使用nmapIP扫描查看80端口是否开放输入虚拟机IP地址,可以在物理机或者虚拟机浏览器打开apache;2.输入ifconfig查看虚拟机IP;3.在桌面找到home,在里面FileSystem目录下找......
  • jQuery监听文档加载
    ◼jQuery监听document的DOMContentLoaded事件的四种方案$(document).ready(handler):deprecated$("document").ready(handler):deprecated$().ready(handler):deprecated$(handler):推荐用这种写法,其它可以使用但是不推荐//监听文档加载//方......