文档章节

R0注入DLL到R3进程

iopfnx
 iopfnx
发布于 2014/01/02 13:07
字数 232
阅读 1167
收藏 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 );
}

 

© 著作权归作者所有

共有 人打赏支持
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

没有更多内容

加载失败,请刷新页面

加载更多

React 服务器渲染原理解析与实践

网盘下载地址 React 服务器渲染原理解析与实践 本套课程,讲解了React中SSR技术的整个搭建思路及流程,完整的从原理上讲清楚了SSR的概念,重点在于讲解编写SSR框架遇到的各种知识点,以及细节...

qq__2304636824
48分钟前
1
0
Jenkins使用

clean install -Dmaven.test.skip=true

1713716445
57分钟前
0
0
多线程

1. 多线程概念。并发和并行的概念。 多线程指的是一段时间内cpu同时执行多个线程。一个程序至少运行>=1个进程,进程就是运行中的程序,而一个进程至少运行>=1个线程,线程是操作系统能调度的...

鱼想吃肉
今天
2
0
HBase 表修复在线方式和离线方式

一、在线修复 1.1 使用检查命令 $ ./bin/hbase hbck 该命令可完整修复 HBase 元数据信息;存在有错误信息会进行输出; 也可以通过如下命令查看详细信息: $ ./bin/hbase hbck -details 1.2 ...

Ryan-瑞恩
今天
3
0
redis 系列二 -- 常用命令

1.基础命令 info ping quit save dbsize select flushdb flushall 2.键命令 2.1 set 直接赋值 set a a 2.2 get 取值 get a 2.3 exists 是否存在 exists a 2.4 expire 设置剩余时间 秒 expire......

imbiao
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部