09_简单的hook

1.收集鼠标点击位置

import { ref, onMounted, onBeforeUnmount } from "vue";

export default function () {

const x = ref(-1)

const y = ref(-1)

const clickHandler = (event:MouseEvent) => {

x.value = event.pageX

y.value = event.pageY

}

//页面加载完毕点击

onMounted(() => {

window.addEventListener('click', clickHandler)

})

//页面卸载之前的生命周期组合API

onBeforeUnmount(() => {

window.removeEventListener('click', clickHandler)

})

return {

x,

y

};

}

2.获取地址

import { ref } from "vue"

import axios from 'axios'

export default function (url: string) {

    //加载的状态

    const loading = ref(true)

    //数据请求

    const data = ref(null)

    //错误信息

    const errorMsg = ref('')

    axios.get(url).then(response => {

        //改变加载状态

        loading.value = false

        data.value = response.data

    }).catch(error => {

        //改变加载状态

        loading.value = false

        errorMsg.value = error.message || '未知错误'

    })

    return {

        loading,

        data,

        errorMsg

    }

}

[PTE_HOOK] Driver loaded [PTE_HOOK] NtCreateFile found at 0xFFFFF8057B1FF090 [PTE_HOOK] Initializing PTE hook engine [PTE_HOOK] PTE base: 0xFFFFE271389C4000, Trampoline: 0xFFFFBD0464FE5000 [PTE_HOOK] Hooking function: original=0xFFFFF8057B1FF090, target=0xFFFFF805802B1850 [PTE_HOOK] Current CR3: 0x1ad000 [PTE_HOOK] Aligned isolation address: 0xFFFFF8057B1FF000 [PTE_HOOK] Large page detected, splitting... [PTE_HOOK] Split large page: PFN=0x2800 -> new PT at 0xFFFFCF812F9FF000 [PTE_HOOK] CR0 WP disabled (0x80040033) [PTE_HOOK] Isolating page table for address: 0xFFFFF8057B1FF000 [PTE_HOOK] CR3 value: 0x1ad000 [PTE_HOOK] PML4 physical address: 0x1ad000 [PTE_HOOK] Using split large page PT: 0xFFFFCF812F9FF000 (PFN: 0x239de6) [PTE_HOOK] Mapped PML4: physical=0x1ad000, virtual=0xFFFFE271389C4000 [PTE_HOOK] Page table isolation completed for 0xFFFFF8057B1FF000 [PTE_HOOK] CR0 WP restored (0x80050033) [PTE_HOOK] Instruction at 0xFFFFF8057B1FF090: length=1, total=1 [PTE_HOOK] Instruction at 0xFFFFF8057B1FF091: length=1, total=2 [PTE_HOOK] Instruction at 0xFFFFF8057B1FF092: length=1, total=3 [PTE_HOOK] Instruction at 0xFFFFF8057B1FF093: length=1, total=4 [PTE_HOOK] Instruction at 0xFFFFF8057B1FF094: length=1, total=5 [PTE_HOOK] Instruction at 0xFFFFF8057B1FF095: length=1, total=6 [PTE_HOOK] Instruction at 0xFFFFF8057B1FF096: length=1, total=7 [PTE_HOOK] Instruction at 0xFFFFF8057B1FF097: length=1, total=8 [PTE_HOOK] Instruction at 0xFFFFF8057B1FF098: length=1, total=9 [PTE_HOOK] Instruction at 0xFFFFF8057B1FF099: length=3, total=12 [PTE_HOOK] Instruction at 0xFFFFF8057B1FF09C: length=1, total=13 [PTE_HOOK] Instruction at 0xFFFFF8057B1FF09D: length=1, total=14 [PTE_HOOK] Hook recorded at index 0 [PTE_HOOK] Hook installed: trampoline at 0xFFFFBD0464FE5000, used=34 bytes [PTE_HOOK] Hook successful: original function at 0xFFFFBD0464FE5000 [PTE_HOOK] NtCreateFile called Access violation - code c0000005 (!!! second chance !!!) 00000000`00000000 ?? ??? kd> u FFFFBD0464FE5000 ffffbd04`64fe5000 4881ec88000000 sub rsp,88h ffffbd04`64fe5007 33c0 xor eax,eax ffffbd04`64fe5009 4889442478 mov qword ptr [rsp+78h],rax ffffbd04`64fe500e 6a00 push 0 ffffbd04`64fe5010 3ec7042400000000 mov dword ptr ds:[rsp],0 ffffbd04`64fe5018 3ec744240400000000 mov dword ptr ds:[rsp+4],0 ffffbd04`64fe5021 c3 ret ffffbd04`64fe5022 0000 add byte ptr [rax],al
07-17
#include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/netfilter.h> #include <linux/netfilter_ipv4.h> #include <linux/ip.h> #include <linux/icmp.h> #include <linux/proc_fs.h> #include <linux/seq_file.h> #include <linux/spinlock.h> #include <linux/ktime.h> #define PROCFS_NAME "icmp_stat" MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("ICMP packet size statistics module"); static int n_param = 100; module_param(n_param, int, S_IRUGO); MODULE_PARM_DESC(n_param, "Size of ICMP data to match (100-1000)"); static struct nf_hook_ops nfho; static struct list_head icmp_list; static DEFINE_SPINLOCK(icmp_lock); static int packet_count = 0; struct icmp_packet_info { struct list_head list; ktime_t timestamp; __be32 src_ip; unsigned int id; }; static unsigned int icmp_hook(void *priv, struct sk_buff *skb, const struct nf_hook_state *state) { struct iphdr *ip_header; struct icmphdr *icmp_header; unsigned int data_len; if (!skb) { return NF_ACCEPT; } ip_header = ip_hdr(skb); if (ip_header->protocol != IPPROTO_ICMP) { return NF_ACCEPT; } if (skb->len < sizeof(struct iphdr) + sizeof(struct icmphdr)) { return NF_ACCEPT; } icmp_header = (struct icmphdr *)(skb->data + (ip_header->ihl * 4)); if (icmp_header->type != ICMP_ECHO && icmp_header->type != ICMP_ECHOREPLY) { return NF_ACCEPT; } /* 计算数据部分长度 */ data_len = ntohs(ip_header->tot_len) - (ip_header->ihl * 4) - sizeof(struct icmphdr); if (data_len == n_param) { struct icmp_packet_info *info = kmalloc(sizeof(*info), GFP_ATOMIC); if (!info) { return NF_ACCEPT; } info->timestamp = ktime_get_real(); info->src_ip = ip_header->saddr; info->id = ntohs(icmp_header->un.echo.id); spin_lock(&icmp_lock); list_add(&info->list, &icmp_list); packet_count++; spin_unlock(&icmp_lock); } return NF_ACCEPT; } static void *icmp_seq_start(struct seq_file *s, loff_t *pos) { spin_lock(&icmp_lock); return seq_list_start(&icmp_list, *pos); } static void *icmp_seq_next(struct seq_file *s, void *v, loff_t *pos) { return seq_list_next(v, &icmp_list, pos); } static void icmp_seq_stop(struct seq_file *s, void *v) { spin_unlock(&icmp_lock); } static int icmp_seq_show(struct seq_file *s, void *v) { struct icmp_packet_info *info = list_entry(v, struct icmp_packet_info, list); struct timespec64 ts = ktime_to_timespec64(info->timestamp); seq_printf(s, "Time: %lld.%09ld | Source: %pI4 | ID: %u\n", (s64)ts.tv_sec, ts.tv_nsec, &info->src_ip, info->id); return 0; } static const struct seq_operations icmp_seq_ops = { .start = icmp_seq_start, .next = icmp_seq_next, .stop = icmp_seq_stop, .show = icmp_seq_show}; static int icmp_proc_open(struct inode *inode, struct file *file) { return seq_open(file, &icmp_seq_ops); } static const struct proc_ops icmp_proc_ops = { .proc_open = icmp_proc_open, .proc_read = seq_read, .proc_lseek = seq_lseek, .proc_release = seq_release, }; static int __init icmp_stat_init(void) { if (n_param < 100 || n_param > 1000) { printk(KERN_ERR "Invalid n_param value: %d. Must be between 100 and 1000\n", n_param); return -EINVAL; } INIT_LIST_HEAD(&icmp_list); nfho.hook = icmp_hook; nfho.hooknum = NF_INET_PRE_ROUTING; nfho.pf = PF_INET; nfho.priority = NF_IP_PRI_FIRST; nf_register_net_hook(&init_net, &nfho); proc_create(PROCFS_NAME, 0, NULL, &icmp_proc_ops); printk(KERN_INFO "ICMP stat module loaded. Tracking data size: %d bytes\n", n_param); return 0; } static void __exit icmp_stat_exit(void) { struct icmp_packet_info *info, *tmp; nf_unregister_net_hook(&init_net, &nfho); remove_proc_entry(PROCFS_NAME, NULL); spin_lock(&icmp_lock); list_for_each_entry_safe(info, tmp, &icmp_list, list) { list_del(&info->list); kfree(info); } spin_unlock(&icmp_lock); printk(KERN_INFO "ICMP stat module unloaded. Total packets tracked: %d\n", packet_count); } module_init(icmp_stat_init); module_exit(icmp_stat_exit); 修改代码使得 /proc/icmp_stat 的数据中多记录一条数据,数据内容是报文的总数
08-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值