文档章节

R0注入DLL到R3进程

iopfnx
 iopfnx
发布于 2014/01/02 13:07
字数 232
阅读 1169
收藏 6

R0注入DLL到R3,貌似没有必要,也的确没有必要。以下代码只是为了验证R0调用NtQueueApcThread来注入DLL到R3进程中,没有什么神秘的东西,博大家一笑。

#include <ntddk.h>

PVOID pfn_BaseDispatchApc = NULL;
PVOID pfn_LoadLibraryA = NULL;
PVOID pszText_Kernel32 = NULL;

NTSTATUS (NTAPI* pfn_NtQueueApcThread)(
    __in HANDLE     ThreadHandle,
    __in PVOID      ApcRoutine,
    __in_opt PVOID  ApcArgument1,
    __in_opt PVOID  ApcArgument2,
    __in_opt PVOID  ApcArgument3
    );
    
VOID LoadImageNotifyRoutine (
    IN PUNICODE_STRING  FullImageName,
    IN HANDLE  ProcessId, // where image is mapped
    IN PIMAGE_INFO  ImageInfo
    )
{    
    PWSTR ptr = FullImageName->Buffer + FullImageName->Length/sizeof(WCHAR)-4;
    
    if( ptr > FullImageName->Buffer && _wcsicmp( ptr, L".exe" ) == 0 )
    {
        ptr -= 8;            
        if( ptr > FullImageName->Buffer && _wcsicmp( ptr, L"\\notepad.exe" ) == 0 );
        {
            pfn_NtQueueApcThread( ZwCurrentThread(),
                pfn_BaseDispatchApc,
                pfn_LoadLibraryA,
                pszText_Kernel32,
                NULL );
        }
    }        
}

VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
	PsRemoveLoadImageNotifyRoutine( LoadImageNotifyRoutine );
}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
    //just for winxp
	KdBreakPoint();
    
    //填写kernel32!BaseDispatchApc//win7上是ntdll!RtlDispatchAPC
    (PVOID)pfn_BaseDispatchApc = (PVOID)0x7c82c0f6;
    
    //填写kernel32!LoadLibraryA
    (PVOID)pfn_LoadLibraryA = (PVOID)0x7c801d7b;
    
    //保证待Load的DLL的名称为text.dll,可以放到system目录下
    //填写kernel32的头部text字符的位置
    (PVOID)pszText_Kernel32 = (PVOID)0x7c8001e9;
    
    //填写nt!NtQueueApcThread    
    (PVOID)pfn_NtQueueApcThread = (PVOID)0x805d3756;
    
    DriverObject->DriverUnload = DriverUnload;
    
	return PsSetLoadImageNotifyRoutine( LoadImageNotifyRoutine );
}

 

© 著作权归作者所有

共有 人打赏支持
上一篇: 穿越wow64到native64
下一篇: 找KiServiceTable
iopfnx
粉丝 9
博文 28
码字总数 14829
作品 0
朝阳
程序员
私信 提问
N种内核注入DLL的思路及实现

内核注入,技术古老但很实用。现在部分RK趋向无进程,玩的是SYS+DLL,有的无文件,全部存在于内存中。可能有部分人会说:“都进内核了.什么不能干?”。是啊,要是内核中可以做包括R3上所有能...

simpower
2017/11/03
0
0
S3C2410下WinCE6.0的启动过程详解

通过前两篇文章的介绍,我们已经知道NBOOT用来引导EBOOT,继而EBOOT加载并引导WinCE操作系统(NK)。那么,WinCE6.0的启动过程又是怎样的呢?本文基于S3C2410的平台做一个详细的分析。需要说明...

helpful
2008/10/12
0
0
ARM架构过程调用标准AAPCS

AAPCS是ARM架构的处理器规定的一些标准 1、参数和返回值传递,对于简单的情况,输入参数由R0-R3分别用来记录第1到第4个参数。当传递的参数超过4个时,就需要借助栈来保存参数。函数的返回值通...

u012142460
04/24
0
0
Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)

研究内核源码和内核运行原理的时候,很总要的一点是要了解内核的初始情况,也就是要了解内核启动过程。我在研究内核的内存管理的时候,想知道内核启动后的页表的放置,页表的初始化等信息,这...

nothingfinal
2012/04/20
0
0
NA-NP-IE系列实验56:多区域OSPF 手工汇总

实验56:多区域OSPF 手工汇总 1.实验目的 通过本实验可以掌握: (1)路由汇总的目的 (2)区域间路由汇总 (3)外部自治系统路由汇总 2.实验拓扑 本实验的拓扑结构如图所示。 3.实验步骤 (1...

日久不生情
2017/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

码云项目100,水一发

简单回顾一下: 早期构想最多的,是希望能将PHP一些类和编码分区做得更细,所以很多尝试。但不得不说,PHP的功能过于单一,是的,也许写C/C++扩展,可以解决问题,那我为什么不用C#或者Golan...

曾建凯
28分钟前
1
0
Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
4
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
3
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
4
0
小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部