文档库 最新最全的文档下载
当前位置:文档库 › 【原创】N种内核注入DLL的思路及实现

【原创】N种内核注入DLL的思路及实现

【原创】N种内核注入DLL的思路及实现
【原创】N种内核注入DLL的思路及实现

标题:【原创】N种内核注入DLL的思路及实现

作者:sudami

时间: 2008-11-02,16:53:59

链接: https://www.wendangku.net/doc/919561721.html,/showthread.php?t=75887

《N种内核注入DLL的思路及实现》

Author : sudami [sudami@https://www.wendangku.net/doc/919561721.html,]

Time : 01-11-2008

内核注入,技术古老但很实用。现在部分RK趋向无进程,玩的是SYS+DLL,有的无文件,全部存在于内存中。可能有部分人会说:“都进内核了.什么不能干?”。是啊,要是内核中可以做包括R3上所有能做的事,软件开发商们也没必要做应用程序了。有时,我们确实需要R3程序去干驱动做起来很困难或者没必要驱动中去做的事,进程 / DLL是不错的选择,但进程目标太大,所以更多的同学趋向于注DLL。

若要开发安全软件、小型工具,可借鉴其思路,Anti Rootkits时,在某些极端情况下,可使用同样的技术发现、清除RK,保证用户电脑的正常使用。在此,我将探讨几种内核注入DLL的思路及实现原理。

给一个Alertbale的用户态线程插APC,让其执行其中的ShellCode,来执行我们的代码。这个方法简单易行,但是不够稳定,兼容性不好。测试中发现经常出现Explorer.exe等插崩溃的情况,而且有杀软在的情况下,插入有时会被拦截,起不到应有的效果。(可参考我以前逆过的一个驱动:逆向fuck.sys--编译通过--源码)

\\KnownDLLs是系统加载时对象管理器加载最新磁盘DLL到内存的,当其他进程想调用某个DLL时,就不用重复从磁盘加载了,而会从这里映射一份到自己的进程空间中去。这样给我们做全局Patch提供了一个很好的机会:

ZwOpenSection打开\\KnownDlls\\kernel32.dll,调用ZwMapViewOfSection映射一份到自己进程空间,然后寻找kernel32.dll在内存中代码节的空隙,选择这里作为我们fake函数的存储Buffer。修改CreateThread函数的开头5字节跳转到这个间隙,当系统任何一个线程创建时,会走到CreateThread函数,然后执行空隙中的ShellCode,其负责调用LoadLibrary加载我们的DLL。DLL一经加载,会发IOCTL通知本驱动,让驱动卸载HOOK。这样就完成了内核注DLL的过程。测试时发现Svchost.exe进程调用CreateThread函数很频繁,所以触发也会很快,基本1秒不到就能将DLL加载进去,而我们的HOOK也卸掉了。所以稳定性提高不少。示意图如下:

(3) 内核 HOOK ZwMapViewOfSection

有部分模块加载时会调用ZwMapViewOfSection,比如进程创建时映射N份DLL到自己的虚拟空间中去.我们替换SSDT中的这个函数,过滤出是加载Kernel32.dll的情况,从参数中取得其基址,Inline Hook其EAT中的CreateThread函数,跳转到在这个进程虚拟地址空间中申请的Buffer,在其中完成DLL的加载过程.

关键API:

ZwAllocateVirtualMemory ---- 在此进程空间中分配内存,存放Shellcode ZwProtectVirtualMemory ---- 使当前内存块具有可读可写属性

IoAllocateMdl ---- 创建MDL

关键Code如下:

同方法2相比,原理类似。但修改时机不同,效果差不多,只是注入DLL的时间会慢一些。至于Shellcode的编写,就大同小异了.萝卜白菜各有所爱,主要看个人发挥。要是闲写shellcode 麻烦,请到看雪学院去查资料,模板很多,在这里就不YY了。

【看雪读书月】学习ShellCode编写

[note]一个简单的Shellcode

shellcode之小小琢磨

Add_Section

(4) 内核 HOOK NtCreateThread

跟踪进程创建的流程,会很明晰的发现有多点可以patch来实现DLL的注入。

进程创建完时是一个空水壶,里面没有沸腾的热水(threads),于是系统调用NtCreateThread 创建其主线程(给空水壶注水–凉水),在这个暂停的线程里面折腾了一阵后完事了也厌倦了,于是系统跳了出来,回到进程空间中,调用Kernel32.dll去通知CSRSS.EXE,对它说:“这里有一个新进程出生了,你在你的表里标记一下”。然后就开始加载DLL啦,把系统KnownDLLs中的自己需要的DLL都Map一份到这个大水壶中。接着KiThreadStartup加热水壶中的凉水,于是水就开始沸腾了,此时主线程开始工作。。。

拦截NtCreateThread,取得当前线程上下文,保存它要返回的地址(会回到空水壶中去),劫持为我们自己分配的地址,在其中填充ShellCode来加载目的DLL。至于选择Buffer,思路很多。这里可简单的Attach到当前进程,在充足的虚拟2GB进程地址空间中分配属于你自己的一块小内存,够放ShellCode足矣。示意图如下:

(5) 内核感染常用模块,让感染模块帮我们Load DLL

这个方法就有点绕远了,开始了最本质最原始的感染,可增加新节,可插空隙,总之,让别人的模块Load 进内存时顺路的帮我们加载下DLL,DLL一旦加载就可以恢复感染,清除痕迹。至于感染代码,网上一堆。只要不是驱动感染驱动(多了个校验和),其他性质都一样,看自己发挥啦。

(6) 拦截NtCreateUserProcess、NtCreateSymbolicLinkObject

前者在Vista下才有. 拦截后通过PsLookupProcessThreadByCid得到ETHREAD / EPROCESS,判断是否是CSRSS.EXE引起的,若是则在此进程空间内分配一块内存,调用NtGetContextThread得到当前的线程上下文,调用ZwWriteVirtualMemory填充Shellcode区域,取得LdrUnloadDll、LdrGetDllHandle等函数地址,通过他们加载DLL。然后调用NtSetContextThread恢复原始的Context。关于这种方法,可参考

DriverDevelop上某人发的BIN。

顺便提下R3上DLL的注入:

1.CreateRemoteThread (or NtCreateThreadEx (Used in Vista))

2.SetThreadContext (change the EIP)

3.NtQueueAPCThread

4.RtlCreateUserThread

5. SetWindowHookEx

纵观进程启动的全过程,可patch的地方很多,只要保证进程、线程上下文不被破坏,注入的手法可多种多样。只要保证我们的DLL注入时间足够短,稳定性足够高即可。当我们迫不得已要从内核注入DLL到用户进程去时,系统已经中毒很深,此时运用类似上面提到的技术来加载DLL,让DLL做我们驱动无法完成的任务,是可以接受的。

上面提到的思路是我暂时想到并且已经实现了的,详细过程可参见代码。欢迎积极探讨更好更稳定而且不邪恶的方法。

-----------------------------------------------------------------------------------

参考资料:

计算机防病毒知识题

病毒复习: 一、选择题(本题共30分) 1、恶意代码是( )。 (A)被损坏的程序 (B)硬件故障 (C)一段特制的程序或代码片段 (D)芯片霉变 2、恶意代码的危害主要造成( ) (A)磁盘损坏 (B)计算机用户的伤害 (C)CPU的损坏 (D)程序和数据的破坏 3、新买回来的未格式化的软盘( ) (A)可能会有恶意代码 (B)与带恶意代码的软盘放在一起会被感染 (C) 一定没有恶意代码 (D) 一定有恶意代码 4、僵尸网络的最大危害是,黑客可以利用该网络发起()。 (A)入侵攻击 (B)DDOS攻击 (C)网络监听 (D)心理攻击 5、个人防火墙与边际防火墙的最根本区别是()。 (A) 个人防火墙可以控制端口 (B) 个人防火墙可以控制协议 (C) 个人防火墙可以控制应用程序访问策略 (D) 个人防火墙是软件产品,而边际防火墙是硬件产品 6、能够感染EXE,COM文件的病毒属于( )。 (A) 网络型病毒 (B) 蠕虫型病毒 (C) 文件型病毒 (D) 系统引导型病毒 7、下列恶意代码那个传统计算机病毒不是蠕虫( )。 (A) 冲击波 (B) 振荡波 (C) CIH (D) 尼姆达 8、Socket服务器端正确的操作顺序为( )。 (A) bind, accept, listen (B) bind, listen, accept (C) listen, accept (D) listen, read, accept 9、著名特洛伊木马“网络神偷”采用的是( )隐藏技术。 (A) 反弹式木马技术(B) 远程线程插入技术 (C) ICMP协议技术 (D) 远程代码插入技术 10、下列( )不是常用程序的默认端口。 (A) 8 0 (B) 8 0 8 0 (C) 2 3 (D) 2 1 11、第一个真正意义的宏病毒起源于( )应用程序。 (A) Word (B) Lotus 1-2-3 (C) Excel (D) PowerPoint 12、第一个跨Windows和Linux平台的恶意代码是( )。 (A) Lion (B) W32.Winux (C) Bliss (D)Staog 13、 Linux系统下的欺骗库函数病毒使用了Linux系统下的环境变量,该环境变量是( )。

远程线程注入时遇到的问题

远程线程注入时遇到的问题 这是我在研究程序自我删除(关于程序自我删除相关的技术我会在之后的文章中详细介绍)技术中碰到的问题, 暂时没有找到原因及解决办法. 暂且记录下来方便日后查阅、分析. CreateRemoteThread经常在木马病毒中使用, 最常见的做法就是把LoadLibrary当作线程函数在目标进程中动态加载自己的Dll, 这种方法比通过HOOK加载Dll的优点在于不需要目标进程依赖于User32.dll. 但是在实际使用过程中确会遇到不少问题. 除了使用LoadLibrary作为线程函数我们可以使用自定义的线程函数, 当然前提是这个线程函数的二进制代码已经正确无误地插入到目标进程. 具体方法这里不便展开. AdjustTokenPrivileges: 首先碰到的问题是关于进程权限问题, 确切的来说也不是问题, 只是在开发过程中遇到的比较奇怪的现象, 仅仅记录下来方便日后研究. 在此之前一直没有搞清楚提高进程权限是什么意思, 难道是提高系统级? 当然不可能, 微软不傻. 经过一些测试我有了一些发现. 代码如下: [c-sharp]view plaincopy

1.BOOL EnableDebugPrivilege() 2.{ 3. HANDLE hToken; 4.if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToke n) != TRUE) 5. { 6.return FALSE; 7. } 8. 9. LUID Luid; 10.if(LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid) != TRUE) 11. { 12.return FALSE; 13. } 14. 15. TOKEN_PRIVILEGES tp; 16. tp.PrivilegeCount = 1; 17. tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 18. tp.Privileges[0].Luid = Luid; 19. 20.if(AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), N ULL, NULL) != TRUE) 21. { 22.return FALSE; 23. } 24. 25.return TRUE; 26.} 测试结果如下: 1. 使用该函数->枚举进程. 结果显示枚举到进程67个, 但是任务管理器显示当前进程73个. 未解. 2. 不使用该函数->OpenProcess打开系统进程失败. 这里有两个例外:

Windows文件读写监控系统

Windows文件读写监控系统 摘要:21世纪,人类进入了一个全新的时代,一个以计算机技术为代表的信息时代。人们的生活节奏随着信息技术的快捷方便而变快。在这次信息革命中谁拥有便捷的信息,谁就掌握了时代的命脉,占据技术的颠峰。在PC领域,称霸桌面的Windows系统的垄断和不公开源代码,对我们研究更是带来很大困难。本程序的全称为Windows下的文件监视程序,是一个工具软件。通过本程序的分析和设计,为创建更大的软件工程提供了一定的帮助。在逆向工程中,可以利用本程序,分析进程的文件读写情况,对工程的开发提供了一定的帮助。本程序采用VC开发环境,利用DLL挂接,拦截API等技术实现了对目标进程的文件读写监视 关键词:文件监视程序工具软件DLL挂接拦截API 1.引言 1.1课题背景 以计算机为代表的信息技术在近几年在全世界得到了飞速的发展,在企事业单位计算机已经成为主要的工作平台,在个人的日常生活中,计算机已经非常普及,就像普通家电那样。计算机技术的运用可以帮助人们减轻负担,提高工作效率。然而我们国家计算机研究起步相对较晚,特别在PC领域,微软的windows 平台垄断了我们国家的绝大部分,再加上它的源代码的不公开,以及众多版本,给我国的平台研究更是带来了很大的困难。 现在我们国家已经有一些公司和集体在研究操作系统。本程序是一个工具软件,它可以做为很多软件项目的工具,可以在项目开发前期进行简单的构造。在设计本程序的时候,运用了很多热门技术,比如DLL 挂接和远线程注射等,在很多杀毒软件和防火墙软件中都有它们的身影。 1.2系统开发的目的和意义 本程序作为一个工具软件,之所以设计它,主要一方面出于学习研究一些热门技术,以及利用这些技术能到达一个什么效果。它用到的技术,比如DLL挂接,API拦截,这些技术在很多杀毒软件等中运用的很多。比如卡巴斯基,它在进程读写时进行拦截,获得读写文件的数据,再利用其杀毒引擎进行查杀病毒。上面提到的拦截实际上是对文件读写API(比如ReadFile,WriteFile等)。很多游戏外挂利用远线程注射,将木马DLL插入游戏进程空间内,一旦插入成功,它就能破坏进程的正常运行,甚至有的对游戏进程的数据区进行搜索内帐号密码等信息,达到窃取帐号等目的。类似这些技术用处很大,几乎所有的市面上知名的软件都有用到。 另一方面是其实用性。本小程序能拦截目标进程对文件的操作,并向用户报告,并且可以设置对目标进程对文件只读,对一些重要数据可以起到一定的仿删除作用。比如一些病毒就专门破坏移动存储设备内的文件,通过对对其设置只读就可以防止这类事情的发生。

C#进程注入

C#进程注入 使用CreateRemoteThread和LoadLibrary技术的步骤如下: 1.得到远程进程的HANDLE(使用OpenProcess)。 2.在远程进程中为DLL文件名分配内存(VirtualAllocEx)。 3.把DLL的文件名(全路径)写到分配的内存中(WriteProcessMemory) 4.使用CreateRemoteThread和LoadLibrary把你的DLL映射近远程进程。 5.等待远程线程结束(WaitForSingleObject),即等待LoadLibrary返回。也就是说当我们的DllMain(是以DLL_PROCESS_ATTACH为参数调用的)返回时远程线程也就立即结束了。 6.取回远程线程的结束码(GetExitCodeThtread),即LoadLibrary的返回值――我们DLL 加载后的基地址(HMODULE)。 7.释放第2步分配的内存(VirtualFreeEx)。 8.用CreateRemoteThread和FreeLibrary把DLL从远程进程中卸载。调用时传递第6步取得的HMODULE给FreeLibrary(通过CreateRemoteThread的lpParameter参数)。 9.等待线程的结束(WaitSingleObject)。 10.采用C++/CLI编写: // InjectDll.h #pragma once #include using namespace System; namespace InjectDll { public ref class InjectDllManager { public: // szLibPath - 要加载的Dll,hProcess - 被加载的远程进程,iLibPathSize-要加载的Dll的名称的长度 void InjectLib2Process(char szLibPath[],HANDLE hProcess,int iLibPathSize) { HANDLE hThread; void* pLibRemote; DWORD hLibModule;//已加载的DLL的基地址(HMODULE); HMODULE hKernel32 = GetModuleHandle(L"Kernel32"); //初始化szLibPath //

高级内存代码注入技术

高级内存代码注入技术 1、概述 1.1 PE注入 我们知道进程注入的方法分类主要有以下几种: DLL注入利用注册表注入利用Windows Hooks注入利用远程线程注入利用特洛伊DLL注入不带DLL的注入直接将代码写入目标进程,并启动远程线程 本文中的技术不同于以往的DLL注入和shellcode注入。通过此方法可将一个进程的完整镜像完全注入到另外一个进程的内存空间中,从而在一个进程空间中包含了两套不同的代码。与DLL注入相比,PE注入的主要优势是不需要很多文件,只需要MAIN.EXE注入到其他进程并唤起自身代码即可。 1.2 影响 利用该方法可以达到一下多个效果: 创建Socket及网络访问访问文件系统创建线程访问系统库访问普通运行时库远控 键盘记录 2、技术原理 2.1 进程代码注入 将代码写入进程的方法较简单,Windows提供了进程内存读取和写入的系统API。首先需要获取某个进程的PID号,然后打开该进程,可以利用Kernel32链接库中的OpenProcess函数实现。

注:远程打开进程是受限的,从Vista起,就存在了类似UAC之类的防护措施。其中主要的进程内存保护机制是Mandatory Integrity Control(MIC)。MIC是基于“完整性级别”的对象访问控制保护方法。完整性级别包括如下四个级别: 低级别:被限制访问大部分系统资源(如IE);中级别:开启UAC时非特权用户和管理员组用户启动的进程;高级别:以管理员权限启动的进程系统级别:SYSTEM用户启动的进程,如系统服务。 根据以上完整性级别要求,我们的进程注入将只允许注入低级别或同等级别的进程。 本文将利用explorer.exe来举例,远程打开进程后利用VirtualAllocEx函数申请一段可保存本进程镜像的内存段,为了计算需要的内存大小我们可以通过读取PE头信息来获取。 ? 1 2 3 4 5 6 7 8 9 10 11 /*获取进程模块镜像*/ module = GetModuleHandle(NULL); /*获取PE头信息*/ PIMAGE_NT_HEADERS headers = (PIMAGE_NT_HEADERS)((LPBYTE)module +((PIMAGE_DOS_HEA /*获取代码长度*/ DWORD moduleSize = headers->OptionalHeader.SizeOfImage; 2.2 获取二进制地址 代码注入中遇到的一个常见问题是模块的基地址会不断变化的问题。通常情况下,当进程启动时,MAIN函数的基地址是0X00400000。当我们将代码注入到其他进程中时,新的基地址将产生在虚拟地址中不可预测的位置。

常用SQL注入代码

常用SQL注入代码 文章分类:数据库 //看看是什么权限的 and 1=(Select IS_MEMBER('db_owner')) And char(124)%2BCast(IS_MEMBER('db_owner') as varchar(1))%2Bchar(124)=1 ;-- //检测是否有读取某数据库的权限 and 1= (Select HAS_DBACCESS('master')) And char(124)%2BCast(HAS_DBACCESS('master') as varchar(1))%2Bchar(124)=1 -- 数字类型 and char(124)%2Buser%2Bchar(124)=0 字符类型 ' and char(124)%2Buser%2Bchar(124)=0 and ''=' 搜索类型 ' and char(124)%2Buser%2Bchar(124)=0 and '%'=' 爆用户名 and user>0 ' and user>0 and ''=' 检测是否为SA权限 and 1=(select IS_SRVROLEMEMBER('sysadmin'));-- And char(124)%2BCast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) as varchar(1))%2Bchar(124)=1 -- 检测是不是MSSQL数据库 and exists (select * from sysobjects);-- 检测是否支持多行 ;declare @d int;-- 恢复 xp_cmdshell ;exec master..dbo.sp_addextendedproc 'xp_cmdshell','xplog70.dll';--

DLL的11种注入方法资料

闲着没事整理了一下DLL的N种注入方法,对学习外挂的朋友,应该有用! 第一种方法: 利用CreateRemoteThread 远程建立线程的方式注入DLL. 首先,我们要提升自己的权限,因为远程注入必不可免的要访问到目 标进程的内存空间,如果没有足够的系统权限,将无法作任何事.下 面是这个函数是用来提升我们想要的权限用的. function EnableDebugPriv : Boolean; var hToken : THANDLE; tp : TTokenPrivileges; rl : Cardinal; begin result := false; //打开进程令牌环 OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken); //获得进程本地唯一ID if LookupPrivilegeValue(nil, 'SeDebugPrivilege', tp.Privileges[0].Luid) then begin tp.PrivilegeCount := 1; tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; //调整权限 result := AdjustTokenPrivileges(hToken, False, tp, sizeof(tp), nil, rl); end; end; 关于OpenProcessToken() 和AdjustTokenPrivileges() 两个API 的简单介绍: OpenProcessToken():获得进程访问令牌的句柄.

SQL Server 返回最后插入记录的自动编号ID

SQL Server 返回最后插入记录的自动编号ID 最近在开发项目的过程中遇到这么一个问题,就是在插入一条记录的后立即获取其在数据库中自增的ID,以便处理相关联的数据,怎么做?在sql server 2000中可以这样做,有几种方式。详细请看下面的讲解与对比。 一、要获取此ID,最简单的方法就是:(以下举一简单实用的例子) --创建数据库和表 create database MyDataBase use MyDataBase create table mytable ( id int identity(1,1), name varchar(20) ) --执行这个SQL,就能查出来刚插入记录对应的自增列的值 insert into mytable values('李四') select @@identity 二、三种方式的比较 SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和@@IDENTITY,它们都返回插入到IDENTITY 列中的值。IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。 @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。 SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值SCOPE_IDENTITY 和@@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。 例如,有两个表T1 和T2,在T1 上定义了一个INSERT 触发器。当将某行插入T1 时,触发器被激发,并在T2 中插入一行。此例说明了两个作用域:一个是在T1 上的插入,另一个是作为触发器的结果在T2 上的插入。 假设T1 和T2 都有IDENTITY 列,@@IDENTITY 和SCOPE_IDENTITY 将在T1 上的INSERT 语句的最后返回不同的值。 @@IDENTITY 返回插入到当前会话中任何作用域内的最后一个IDENTITY 列值,该值是插入T2 中的值。

C#仿CE注入实例

C#仿CE注入实例 CE第7关作业 在其它程序注入汇编代码 用到分配打开进程空间,读写内存等windows API函数 Tutorial-i386.exe第7关作业,我这里把减1变成加11 //API调用需要的类 public class Win32 { public struct MEMORY_BASIC_INFORMATION { public int BaseAddress; public int AllocationBase; public int AllocationProtect; public int RegionSize; public int State; public int Protect; public int lType; } public const int MEM_COMMIT = 0x1000; //已物理分配 public const int MEM_PRIVATE = 0x20000; public const int PAGE_READWRITE = 0x04; //可读写内存 [DllImport("kernel32.dll")] //声明API函数 public static extern int VirtualAllocEx(IntPtr hwnd, int lpaddress, int size, int type, int tect); [DllImport("kernel32.dll")] //查询内存块信息 public static extern int VirtualQueryEx( IntPtr hProcess, IntPtr lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, int dwLength); [DllImport("kernel32.dll")] public static extern bool ReadProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, int size, out int numBytesRead); [DllImport("kernel32.dll")] public static extern bool WriteProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, int size, out int numBytesWrite); [DllImport("kernel32.dll")] public static extern bool WriteProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, int[] lpBuffer, int size, out int numBytesWrite); //以下是注册全局热键要用到Windows的API方法RegisterHotKey和

计算机三级信息安全技术第四套

TCSEC标准是计算机系统安全评估的第一个正式标准,具有划时代的意义。该准则于1970年由美国国防科学委员会提出,并于1985年12月由美国国防部公布。TCSEC最初只是军用标准,后来延至民用领域。TCSEC将计算机系统的安全划分为4个等级、7个级别。 TACACS使用固定的密码进行认证,而TACACS+允许用户使用动态密码,这样可以提供更强大的保护。 Diffie-Hellman:一种确保共享KEY安全穿越不安全网络的方法,这个密钥交换协议/算法只能用于密钥的交换,而不能进行消息的加密和解密。ElGamal算法,是一种较为常见的加密算法,它是基于1984年提出的公钥密码体制和椭圆曲线加密体系。ECC是"Error Checking and Correcting"的简写,中文名称是"错误检查和纠正"。ECC是一种能够实现"错误检查和纠正"的技术。 如果密钥丢失或其它原因在密钥未过期之前,需要将它从正常运行使用的集合中除去,称为密钥的()。A) 销毁 B) 撤销C) 过期D) 更新 密钥的替换与更新:当密钥已泄露、被破坏或将要过期时,就要产生新的密钥来替换或更新旧的密钥。 密钥撤销:如果密钥丢失或因其他原因在密钥未过期之前,需要将它从正常运行使用的集合中除去。 密钥销毁:不用的就密钥就必须销毁。 下列关于消息认证的说法中,错误的是()。 A) 对称密码既可提供保密性又可提供认证 B) 公钥密码既可提供认证又可提供签名 C) 消息认证码是一种认证技术,它利用密钥来生成一个固定长度的数据块,并将该数据块附加在消息之后 D) 消息认证码既可提供认证又可提供保密性 消息认证码是一种认证技术,它利用密钥来生成一个固定长度的数据块,并将该数据块附加在消息之后。消息认证码只提供认证。 消息加密分为对称加密和非对称加密。传统密码既可以提供认证又可提供保密性。利用公钥进行加密可提供认证和签名。 MAC中消息是以明文形式发送所以不提供保密性,但是可以在使用过MAC算法之后对报文加密或在使用MAC之前对消息加密来获取保密性,由于收发双方共享密钥,因此MAC不能提供数字签名功能。 防范计算机系统和资源被未授权访问,采取的第一道防线是()。 A) 访问控制B) 授权C) 审计D) 加密 对网络用户的用户名和口令进行验证是防止非法访问的第一道防线。用户注册时首先输入用户名和口令,服务器将验证所输入的用户名是否合法。如果验证合法,才继续验证用户输入的口令,否则,用户将被拒之网络之外。下列选项中,进行简单的用户名/密码认证,且用户只需要一个接受或拒绝即可进行访问(如在互联网服务提供商ISP 中)的是()。 A) RADIUS B) TACACS C) Diameter D) RBAC RADIUS是一种C/S结构的协议,它的客户端最初就是NAS 服务器,任何运行RADIUS客户端软件的计算机都可以成为RADIUS的客户端。RADIUS协议认证机制灵活,可以采用PAP 、CHAP 或者Unix登录认证等多种方式。由于RADIUS协议简单明确,可扩充,因此得到了广泛应用,包括普通电话上网、ADSL 上网、小区宽带上网、IP电话、VPDN (Virtual Private Dialup Networks,基于拨号用户 的虚拟专用拨号网业务)、移动电话预付费等业务。故选择A选项。 进程是资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块PCB中。以表示该进程拥有这些资源或正在使用它们。与进程相对应,线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。 下列关于保护环的说法中,错误的是(A)。 A) 3环中的主体不能直接访问1环中的客体,1环中的主体同样不能直接访问3环中的客体 B) 保护环对工作在环内的进程能够访问什么、能够执行什么命令提出了严格的界线和定义 C) 保护环在主体和客体之间提供了一个中间层,当一个主体试图访问一个客体时,可以用它来进行访问控制 D) 在内环中执行的进程往往处于内核模式,在外环中工作的进程则处于用户模式 保护环对工作在环内的进程能够访问什么、能够执行什么命令提出了严格的界线和定义。保护环在主体和客体

SQL手工注入大全

SQL手工注入大全 ------------------------------------------------------------------ 比方说在查询id是50的数据时,如果用户传近来的参数是50 and 1=1,如果没有设置过滤的话,可以直接查出来,SQL 注入一般在ASP程序中遇到最多, 看看下面的 1.判断是否有注入 ;and 1=1 ;and 1=2 2.初步判断是否是mssql ;and user>0 3.判断数据库系统 ;and (select count(*) from sysobjects)>0 mssql ;and (select count(*) from msysobjects)>0 access 4.注入参数是字符 'and [查询条件] and ''=' 5.搜索时没过滤参数的 'and [查询条件] and '%25'=' 6.猜数据库 ;and (select Count(*) from [数据库名])>0 7.猜字段 ;and (select Count(字段名) from 数据库名)>0 8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0 9.(1)猜字段的ascii值(access) ;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0 (2)猜字段的ascii值(mssql) ;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0 10.测试权限结构(mssql)

数据安全(DLP)的实现

随着越来越多的“艳照门”、美国的“照片门”事件的发生,我开始关注起加密软件来。虽然我不是这些事件里的主角,但电脑上面还是有很多私人的重要资料不想被别人看到。小编上网找了很多资料,也试用了许多不同的加密软件,开始对现今流行的几种加密软件有一定的了解。 目前在关于加密软件这一块存在不少问题,有很多人不知道也不了解加密软件。针对这些问题的解决方案,小编概括为以下几种情况:,希望可以对你有所帮助。 一、企业重要资料流散在各电脑内 风险分析:这种情况造成资料泄密机会多,管理不方便。 泄密途径:员工带走自己电脑和其他员工共享文件里面的东西。 解决方案:采用普通文件加密模型即可 二、企业核心资料存在服务器 风险分析:这种情况造成资料泄密的机会少,但由于资料的集中,泄密危害更大。 泄密途径:有机会接触服务器、或有资格调用整个服务器文件的人。 解决方案:可以采用智能加密模型,员工正常调用核心资料,一旦非法传出企业,文件无法打开。优势在于既保护核心资料,又不增加人力成本。 三、部门复杂的企业 风险分析:在部门结构复杂的企业里面,因为部门间文件交流的复杂性,增加了造成泄密的机会。 泄密途径:部门中间需要传阅的重要文件无法控制其流向,增加了流失机会。 解决方案:利用文档报表修改加密的加密模型配合基于PKI体系的权限控制,可以设置部门间的只读、打印等权限控制,解决文件在部门间流失的威胁。 针对以上问题,现在大部分公司的控制举例如下: 分别在财务部、技术部安装客户端,彼此的文件互不相通。对于上级主管,比如老板,则可以同时打开双方的文件。销售部加密Office文件,技术部则仅图纸加密设计文件。但经常需要将财务部的Office文件发送给技术部查看。技术部设计的产品需要经常和车间及销售部的人员交流,但不希望三个部门之间互通,同时在图纸加密交于其他部门的时候,能够精通到某一个人,并且限制他不能修改打印文件。 四、需要与管理流程结合的企业 安全方面的管理软件,为了工作的便利性可以与企业的管理系统做相应的结合。结合方案具体请与相关技术人员沟通。 根据笔者多年的文件加密实施经验,针对目前最优秀的文件加密必备的技术,总结出以下结论:

注入受驱动保护的游戏 比如DNF CF 龙之谷 传奇3

注入受驱动保护的游戏比如DNF CF龙之谷传奇3 学习各种高级外挂制作技术,马上去百度搜索"魔鬼作坊",点击第一个站进入,快速成为做挂达人。 目前自己用的有2种方法:1:替换游戏要加载的DLL来达到注入自己DLL,有些游戏有MD5校验文件无法替换游戏目录的DLL,只能替换系统目录的文件 2:输入法注入,他游戏再怎么保护不可能不让打字吧!自己写个输入法的IME文件安装完给游戏发送个输入发消息(WM_INPUTLANGCHANGEREQUEST),让他切换到你自己安装的输入法! 3:替换SPI文件也是第一种方法,网络流传叫啥网络注入的

P OldOsThunkDdReleaseDC:Pointer; POldOsThunkDdRenderMoComp:Pointer; POldOsThunkDdResetVisrgn:Pointer; POldOsThunkDdSetColorKey:Pointer; POldOsThunkDdSetExclusiveMode:Pointer; POldOsThunkDdSetGammaRamp:Pointer; POldOsThunkDdSetOverlayPosition:Pointer;

POldOsThunkDdUnattachSurface:Pointer; POldOsThunkDdUnlock:Pointer; POldOsThunkDdUnlockD3D:Pointer; POldOsThunkDdUpdateOverlay:Pointer; POldOsThunkDdWaitForVerticalBlank:Pointer; procedure OsThunkD3dContextCreate;asm jmp POldOsThunkD3dContextCreate end; procedure OsThunkD3dContextDestroy;asm jmp POldOsThunkD3dContextDestroy end; procedure OsThunkD3dContextDestroyAll;asm jmp POldOsThunkD3dContextDestroyAll end; procedure OsThunkD3dDrawPrimitives2;asm jmp POldOsThunkD3dDrawPrimitives2end; procedure OsThunkD3dValidateTextureStageState;asm jmp POldOsThunkD3dValidateTextureStageState end; procedure OsThunkDdAddAttachedSurface;asm jmp POldOsThunkDdAddAttachedSurface end; procedure OsThunkDdAlphaBlt;asm jmp POldOsThunkDdAlphaBlt end; procedure OsThunkDdAttachSurface;asm jmp POldOsThunkDdAttachSurface end; procedure OsThunkDdBeginMoCompFrame;asm jmp POldOsThunkDdBeginMoCompFrame end; procedure OsThunkDdBlt;asm jmp POldOsThunkDdBlt end; procedure OsThunkDdCanCreateD3DBuffer;asm jmp POldOsThunkDdCanCreateD3DBuffer end; procedure OsThunkDdCanCreateSurface;asm jmp POldOsThunkDdCanCreateSurface end; procedure OsThunkDdColorControl;asm jmp POldOsThunkDdColorControl end; procedure OsThunkDdCreateD3DBuffer;asm jmp POldOsThunkDdCreateD3DBuffer end; procedure OsThunkDdCreateDirectDrawObject;asm jmp POldOsThunkDdCreateDirectDrawObject end; procedure OsThunkDdCreateMoComp;asm jmp POldOsThunkDdCreateMoComp end; procedure OsThunkDdCreateSurface;asm jmp POldOsThunkDdCreateSurface end; procedure OsThunkDdCreateSurfaceEx;asm jmp POldOsThunkDdCreateSurfaceEx end; procedure OsThunkDdCreateSurfaceObject;asm jmp POldOsThunkDdCreateSurfaceObject end; procedure OsThunkDdDeleteDirectDrawObject;asm jmp POldOsThunkDdDeleteDirectDrawObject end; procedure OsThunkDdDeleteSurfaceObject;asm jmp POldOsThunkDdDeleteSurfaceObject end; procedure OsThunkDdDestroyD3DBuffer;asm jmp POldOsThunkDdDestroyD3DBuffer end; procedure OsThunkDdDestroyMoComp;asm jmp POldOsThunkDdDestroyMoComp end; procedure OsThunkDdDestroySurface;asm jmp POldOsThunkDdDestroySurface end; procedure OsThunkDdEndMoCompFrame;asm jmp POldOsThunkDdEndMoCompFrame end; procedure OsThunkDdFlip;asm jmp POldOsThunkDdFlip end; procedure OsThunkDdFlipToGDISurface;asm jmp POldOsThunkDdFlipToGDISurface end; procedure OsThunkDdGetAvailDriverMemory;asm jmp POldOsThunkDdGetAvailDriverMemory end; procedure OsThunkDdGetBltStatus;asm jmp POldOsThunkDdGetBltStatus end; procedure OsThunkDdGetDC;asm jmp POldOsThunkDdGetDC end; procedure OsThunkDdGetDriverInfo;asm jmp POldOsThunkDdGetDriverInfo end; procedure OsThunkDdGetDriverState;asm jmp POldOsThunkDdGetDriverState end; procedure OsThunkDdGetDxHandle;asm jmp POldOsThunkDdGetDxHandle end;

木马的隐藏方式

木马是一种基于远程控制的病毒程序,该程序具有很强的隐蔽性和危害性,它可以在人不知鬼不觉的状态下控制你或者监视你。有人说,既然木马这么厉害,那我离它远一点不就可以了!然而这个木马实在是“淘气”,它可不管你是否欢迎,只要它高兴,它就会想法设法地闯到你“家”中来的!哎呀,那还了得,赶快看看自己的电脑中有没有木马,说不定正在“家”中兴风作浪呢!那我怎么知道木马在哪里呢,相信不熟悉木马的菜鸟们肯定想知道这样的问题。下面就是木马潜伏的诡招,看了以后不要忘记采取绝招来对付这些损招哟! 1、集成到程序中木马的工作原理,木马查杀。-电脑维修知识网 其实木马也是一个服务器-客户端程序,它为了不让用户能轻易地把它删除,就常常集成到程序里,一旦用户激活木马程序,那么木马文件和某一应用程序捆绑在一起,然后上传到服务端覆盖原文件,这样即使木马被删除了,只要运行捆绑了木马的应用程序,木马又会被安装上去了。绑定到某一应用程序中,如绑定到系统文件,那么每一次Windows启动均会启动木马。电+脑*维+修-知.识_网 (w_ww*dnw_xzs*co_m) 2、隐藏在配置文件中木马的工作原理,木马查杀。-电脑维修知识网 木马实在是太狡猾,知道菜鸟们平时使用的是图形化界面的操作系统,对于那些已经不太重要的配置文件大多数是不闻不问了,这正好给木马提供了一个藏身之处。而且利用配置文件的特殊作用,木马很容易就能在大家的计算机中运行、发作,从而偷窥或者监视大家。不过,现在这种方式不是很隐蔽,容易被发现,所以在 Autoexec.bat和Config.sys中加载木马程序的并不多见,但也不能因此而掉以轻心哦。电+脑*维+修-知.识_网(w_ww*dnw_xzs*co_m) 3、潜伏在Win.ini中木马的工作原理,木马查杀。-电脑维修知识网 木马要想达到控制或者监视计算机的目的,必须要运行,然而没有人会傻到自己在自己的计算机中运行这个该死的木马。当然,木马也早有心理准备,知道人类是高智商的动物,不会帮助它工作的,因此它必须找一个既安全又能在系统启动时自动运行的地方,于是潜伏在Win.ini中是木马感觉比较惬意的地方。大家不妨打开Win.ini来看看,在它的[windows]字段中有启动命令“load=”和“run=”,在一般情况下“=”后面是空白的,如果有后跟程序,比方说是这个样子:run=c:\windows\file.exe load=c:\windows\file.exe 这时你就要小心了,这个file.exe很可能是木马哦。电+脑*维+修-知.识_网 (w_ww*dnw_xzs*co_m) 4、伪装在普通文件中木马的工作原理,木马查杀。-电脑维修知识网 这个方法出现的比较晚,不过现在很流行,对于不熟练的windows操作者,很容易上当。具体方法是把可执行文件伪装成图片或文本----在程序中把图标改成Windows的默认图片图标, 再把文件名改为*.jpg.exe, 由于Win98默认设置是"不显示已知的文件后缀名",文件将会显示为 *.jpg, 不注意的人一点这个图

向其他进程注入代码的三种方法

向其他进程注入代码的三种方法 向其他进程注入代码的三种方法 本文章翻译自Robet Kuster的Three Ways to Inject Your Code into Another Process 一文,原版地址见下面。本文章版权归原作者所有。 原版地址:https://www.wendangku.net/doc/919561721.html,/threa ... 152&msg=1025152 下载整个压缩包 下载WinSpy 作者:Robert Kuster 翻译:袁晓辉(https://www.wendangku.net/doc/919561721.html, hyzs@https://www.wendangku.net/doc/919561721.html,) 摘要:如何向其他线程的地址空间中注入代码并在这个线程的上下文中执行之。 目录: ●导言 ●Windows 钩子(Hooks) ●CreateRemoteThread 和LoadLibrary 技术 ○进程间通讯 ●CreateRemoteThread 和WriteProcessmemory 技术 ○如何使用该技术子类(SubClass)其他进程中的控件 ○什么情况下适合使用该技术 ●写在最后的话 ●附录 ●参考

●文章历史 导言: 我们在Code project(https://www.wendangku.net/doc/919561721.html,)上可以找到许多密码间谍程序(译者注:那些可以看到别的程序中密码框内容的软件),他们都依赖于Windows钩子技术。要实现这个还有其他的方法吗?有!但是,首先,让我们简单回顾一下我们要实现的目标,以便你能弄清楚我在说什么。 要读取一个控件的内容,不管它是否属于你自己的程序,一般来说需要发送 WM_GETTEXT 消息到那个控件。这对edit控件也有效,但是有一种情况例外。如果这个edit控件属于其他进程并且具有ES_PASSWORD 风格的话,这种方法就不会成功。只有“拥有(OWNS)”这个密码控件的进程才可以用WM_GETTEXT 取得它的内容。所以,我们的问题就是:如何让下面这句代码在其他进程的地址空间中运行起来:::SendMessage( hPwdEdit, WM_GETTEXT, nMaxChars, psBuffer ); 一般来说,这个问题有三种可能的解决方案: 1. 把你的代码放到一个DLL中;然后用windows 钩子把它映射到远程进程。 2. 把你的代码放到一个DLL中;然后用CreateRemoteThread 和LoadLibrary 把它映射到远程进程。 3. 不用DLL,直接复制你的代码到远程进程(使用WriteProcessMemory)并且用CreateRemoteThread执行之。在这里有详细的说明: Ⅰ. Windows 钩子 示例程序:HookSpy 和HookInjEx Windows钩子的主要作用就是监视某个线程的消息流动。一般可分为: 1.局部钩子,只监视你自己进程中某个线程的消息流动。 2.远程钩子,又可以分为:

相关文档