DLL劫持技术例子: HijackDll
控制台程序:DllLoader
Dll加载器,用于动态加载目标Dll,并动态调用目标函数
#include <cstdio>
#include <windows.h> typedef int (*pAdd) (int a, int b); int main()
{
HMODULE hModule = GetModuleHandleA("Dll.dll") != NULL ? GetModuleHandleA("Dll.dll") : LoadLibraryA("Dll.dll");
pAdd Add = (pAdd)GetProcAddress(hModule, "Add");
if (NULL == Add)
printf("Failed\n");
else
printf("Succeed\n1 + 1 = %d\n", Add(, )); system("pause > nul");
return ;
}
main.cpp
原Dll:Dll
很简单的一个Dll,只有一个隐式函数Add.仅仅是一个简单的加法..
#include <cstdio>
#include <windows.h> #define EXTERNC extern "C"
#define EXPORT __declspec(dllexport)
#define ECEP EXTERNC EXPORT BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
MessageBoxA(NULL, "Attach", "", MB_ICONINFORMATION);
break;
case DLL_PROCESS_DETACH:
MessageBoxA(NULL, "Detach", "", MB_ICONINFORMATION);
break;
default:
break;
} return TRUE;
} ECEP int Add(int a, int b)
{
return a + b;
}
main.cpp
劫持Dll:HijackDll
用于劫持原Dll,并转发原程序的动态调用
//last code by gwsbhqt at 20150727 #include <cstdio>
#include <windows.h> #define EXTERNC extern "C"
#define NAKED __declspec(naked)
#define EXPORT __declspec(dllexport)
#define ECEP EXTERNC EXPORT
#define ENCDECL EXTERNC NAKED void __cdecl
#define EENSTD EXTERNC EXPORT NAKED void __stdcall
#define EENFAST EXTERNC EXPORT NAKED void __fastcall
#define ENDEF ENCDECL #define JMPFARPROC(lpModuleName, hProcName) \
HMODULE hModule; \
hModule = GetModuleHandleA((lpModuleName)); \
if (NULL == hModule) hModule = LoadLibraryA((lpModuleName)); \
if (NULL != GetProcAddress(hModule, (hProcName))) __asm JMP EAX; #pragma comment (linker, "/EXPORT:Add=_Add,@1") ENDEF Add()
{
JMPFARPROC("Dll.tmp", "Add");
} BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
MessageBoxA(NULL, "Hijack Dll Attach", "", MB_ICONINFORMATION);
break;
case DLL_PROCESS_DETACH:
MessageBoxA(NULL, "Hijack Dll Detach", "", MB_ICONINFORMATION);
break;
default:
break;
} return TRUE;
}
main.cpp
此处的宏JMPFARPROC看起来似乎每次转发函数都会加载一次hModule,其实不会,先GetModuleHandle获得的hModule是不会增加引用计数的.
所以即使是大量的转发,也应该不会出现内存泄漏的问题.
都是些很简单的代码,仔细认真看看就好了
测试是只需要新建一个工程,工程下新建三个项目,分别是一个控制台程序和两个动态链接库,
在每个项目新建main.cpp文件,将代码贴入,生成工程之后.在Debug/Release文件夹下,将Dll.dll更名为Dll.tmp,将HijackDll.dll更名为Dll.dll...
即可完成Dll劫持...
DLL劫持技术例子: HijackDll的更多相关文章
- dll劫持技术
DLL劫持技术当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中. DLL劫持原理 ...
- dll劫持破坏360
0x01 前言 说起DLL劫持技术,相信大家都不会陌生,因为这种技术的应用比较广泛,比如木马后门的启动.破解程序的内存补丁.外挂插件的注入以及加密狗的模拟等.之所以DLL劫持技术深受黑客们的喜爱,主要 ...
- 老树开新花:DLL劫持漏洞新玩法
本文原创作者:丝绸之路 <img src="http://image.3001.net/images/20150921/14428044502635.jpg!small" t ...
- [转载]DLL劫持生成器 源码开放(纯WINDOWS SDK)+ 实例分析
本菜最近学习了什么DLL注入啊,hook啊(r3)的相关技术,觉得很好玩,于是深入发现还有DLL劫持这种东西觉得挺好玩的,加上最近看到各种木马分析报告中都还有发现有利用白加黑的现象.于是自己想找几个来 ...
- DLL搜索路径和DLL劫持
DLL搜索路径和DLL劫持 环境:XP SP3 VS2005 作者:magictong 为什么要把DLL搜索路径(DLL ORDER)和DLL劫持(DLL Hajack)拿到一起讲呢?呵呵,其实没啥深 ...
- Linux 动态链接库 - dll劫持
如何使用动态链接库 Linux下打开使用动态链接库需要三步(实际上和windows下基本一样):1.加载动态链接库,通过调用库函数dlopen()获得链接库的句柄,对应于windows下的 AfxLo ...
- 原创QQ影音DLL劫持漏洞+动画实战教程
1.什么是DLL DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成 ...
- Dll劫持漏洞详解
一.dll的定义 DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分 ...
- 36.浅谈DLL劫持
最近在搞内网,需要实现免杀后门,大佬推荐了dll劫持,DLL劫持后,能干很多事情,比如杀软对某些厂商的软件是实行白名单的,你干些敏感操作都是不拦截,不提示的.还有留后门,提权等等.本文主要介绍如何检测 ...
随机推荐
- 【Codeforces Round #429 (Div. 2) C】Leha and Function
[Link]:http://codeforces.com/contest/841/problem/C [Description] [Solution] 看到最大的和最小的对应,第二大的和第二小的对应. ...
- Android onActivityResult()运行时刻的问题
今天在开发过程中遇到一个很是怪异的问题,就是方法onActivityResult的执行问题,问题是当我从当前的Activity跳转的时候,尚未做任何动作,onActivityResult()就已经执行 ...
- Spring 容器初始化方法
Resource resource = new ClassPathResource("/bean.xml"); resource = new FileSystemR ...
- MySql在建立索引优化时需要注意的问题
MySql在建立索引优化时需要注意的问题 设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率.设计MySql索引的时候有一下几点注意: 1,创建索引 对于查询占主要的应用来说,索引显得 ...
- Windows的安全模型
1. 安全身份 Windows的安全模型是以用户为线索的,用户的身份是在登录系统时验证的. 除了用户外,还可以有一些特殊实体需要拥有安全的身份,以便进行验证,比如groups, domain等等. W ...
- 改变IntelliJ IDEA 中的system和config/plugins的默认C盘的路径
1,问题,在为idea在线安装插件时,如JProfiler,会默认安装到C盘,而本人则是希望安装到软件所在的D盘目录下,那么如何修改呢: C:\Users\xxx\.IntelliJIdea\conf ...
- 【react】---Hooks的基本使用---【巷子】
一.react-hooks概念 React中一切皆为组件,React中组件分为类组件和函数组件,在React中如果需要记录一个组件的状态的时候,那么这个组件必须是类组件.那么能否让函数组件拥有类组件的 ...
- centos7下搭建nfs服务
现在有3台服务器 s1(主),s2(从), s3(从)需要实现文件实时同步,我们可以安装Nfs服务端和客户端来实现! 一.安装 NFS 服务器所需的软件包: yum install -y nfs-ut ...
- 并发编程之Android中AsyncTask使用详解(四)
更多Android高级架构进阶视频免费学习请点击:[https://space.bilibili.com/474380680] 在Android中我们可以通过Thread+Handler实现多线程通信 ...
- 2019基于python的网络爬虫系列,爬取糗事百科
**因为糗事百科的URL改变,正则表达式也发生了改变,导致了网上许多的代码不能使用,所以写下了这一篇博客,希望对大家有所帮助,谢谢!** 废话不多说,直接上代码. 为了方便提取数据,我用的是beaut ...