// Win32Project2.cpp : 定义 DLL 应用程序的导出函数。
//
///////////////////////////////////////////////////////////////////////////////////////////////////////
/* DLL名称劫持注入法 当游戏运行加载一个重要的的DLL模块时,我们让他来加载我们需要注入的DLL和原来那个必须加载的游戏DLL模块。 比如说一些游戏加载游戏本身DLL“client.dll”。
游戏DLL“client.dll”重命名为“client- original.dll”。
把我们需要注入的DLL重命名成“client.dll”,并把2个DLL放在一起。
把下面源码的client.exe更换成你需要注入的游戏的进程名。 原理:
游戏运行时先加载我们伪造的DLL“client.dll”,但由于关键函数还在原来的client.dll中。
所以先将自身复制为临时文件“client - temp.dll”
加载后然后卸载本身。替换原来的“client.dll”并加载。
然后,它运行一个bat脚本,将等待游戏退出,一旦游戏退出。
bat脚本将复制临时文件“client - temp.dll”到“client.dll”,
这样它就会在下次游戏启动时继续加载。 */
#include "stdafx.h"
#include "fstream"
using namespace std; void 替换(char* szBuffer, size_t bufferSize, char* from, char* to)
{
char* szpTemp,
*szpTempBuffer,
*szpCurrentBuffer; szpCurrentBuffer = szBuffer;
szpTempBuffer = new char[bufferSize]; while (true)
{
szpTemp = strstr(szpCurrentBuffer, from); if (szpTemp != NULL)
{
if (strlen(szBuffer) - strlen(from) + strlen(to) < bufferSize)
{
strcpy(szpTempBuffer, szpTemp + strlen(from)); *szpTemp = '\0';
strcat(szpTemp, to);
szpCurrentBuffer = szpTemp + strlen(to);
strcat(szpTemp, szpTempBuffer);
}
else
break;
}
else
break;
} delete[] szpTempBuffer;
} DWORD WINAPI ThreadMain(LPVOID lpvParam)
{
MessageBox(, "劫持注入成功", "hello", ); return ;
} BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpvReserved)
{
BYTE* pCave; ifstream in; ofstream out; BOOL bLoad; FARPROC targetFunction; HMODULE hTargetModule; char* szpName; char szFileName[MAX_PATH],
szBuffer[MAX_PATH],
szTempBuffer[MAX_PATH]; char* szpTargetModule; STARTUPINFO si = { sizeof(STARTUPINFO) }; PROCESS_INFORMATION pi; char szCmdLine[MAX_PATH]; bLoad = FALSE; if (dwReason == DLL_PROCESS_ATTACH)
{
GetModuleFileName(hModule, szFileName, sizeof(szFileName));
strcpy(szBuffer, szFileName); // 判断自身是否为临时文件,如果不是临时文件将创建并加载
if (strstr(szFileName, " - temp.dll") == NULL)
{
替换(szBuffer, sizeof(szBuffer), ".dll", " - temp.dll"); if (CopyFile(szFileName, szBuffer, FALSE) != NULL)
{
szpTargetModule = (char*)VirtualAlloc(NULL, , MEM_COMMIT, PAGE_EXECUTE_READWRITE); strcpy(szpTargetModule, szBuffer); hTargetModule = GetModuleHandle("Kernel32.dll");
targetFunction = GetProcAddress(hTargetModule, "LoadLibraryA"); pCave = (BYTE*)VirtualAlloc(NULL, 0x10, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
*pCave++ = 0x68;
*(DWORD*)pCave = (DWORD)szpTargetModule;
pCave += ;
*pCave++ = 0xe8;
*(DWORD*)pCave = (DWORD)((DWORD)targetFunction - (DWORD)pCave - );
pCave += ;
*pCave++ = 0xc2;
*pCave++ = 0x04;
*pCave++ = 0x00;
pCave -= ; CreateThread(, , (LPTHREAD_START_ROUTINE)pCave, , , );
}
}
else
{
// 如果是临时的DLL
替换(szBuffer, sizeof(szBuffer), " - temp.dll", ".dll"); // 等待遊戲主進程是否佔用此DLL 等待寫入權限
do
{
in.open(szBuffer, ios::out); if (in.is_open() == true)
{
in.close();
break;
} Sleep();
} while (true); // 写一个bat脚本,一旦游戏退出,恢复自身文件名,下次可以继续加载
//// 把下面的client.exe改成你需要注入的游戏进程名
out.open("bat.bat", ios::out); if (out.is_open() == true)
{
out << ":WAITLOOP" << endl;
out << "tasklist /FI \"IMAGENAME eq Client.exe\" 2>NUL | find /I /N \"Client.exe\">NUL" << endl;
out << "if \"%ERRORLEVEL%\"==\"0\" goto RUNNING" << endl;
out << "goto NOTRUNNING" << endl; out << ":RUNNING" << endl;
out << "timeout /t 2" << endl;
out << "goto WAITLOOP" << endl; out << ":NOTRUNNING" << endl;
out << "copy \"" << szFileName << "\" \"" << szBuffer << "\"" << endl;
out.close(); strcpy(szTempBuffer, szFileName);
*strrchr(szTempBuffer, '\\') = '\0'; sprintf(szCmdLine, "cmd.exe /C \"%s\\bat.bat\"", szTempBuffer); CreateProcess(NULL, szCmdLine, , , FALSE, CREATE_UNICODE_ENVIRONMENT, NULL, , &si, &pi);
} 替换(szFileName, sizeof(szFileName), " - temp.dll", " - original.dll");
CopyFile(szFileName, szBuffer, FALSE); LoadLibrary(szBuffer); CreateThread(, , ThreadMain, , , );
bLoad = TRUE;
}
} return bLoad;
}

DLL另類劫持注入法的更多相关文章

  1. 注入技术--LSP劫持注入

    1.原理 简单来说,LSP就是一个dll程序. 应用程序通过winsock2进行网络通信时,会调用ws2_32.dll的导出函数,如connect,accept等. 而后端通过LSP实现这些函数的底层 ...

  2. 安全之路 —— 借助DLL进行远程线程注入实现穿墙与隐藏进程

    简介        大多数后门或病毒要想初步实现隐藏进程,即不被像任务管理器这样典型的RING3级进程管理器找到过于明显的不明进程,其中比较著名的方法就是通过远程线程注入的方法注入将恶意进程的DLL文 ...

  3. Sqli labs系列-less-5&6 报错注入法(下)

    我先输入 ' 让其出错. 然后知道语句是单引号闭合. 然后直接 and 1=1 测试. 返回正常,再 and 1=2 . 返回错误,开始猜表段数. 恩,3位.让其报错,然后注入... 擦,不错出,再加 ...

  4. Sqli labs系列-less-5&6 报错注入法(上)

    在我一系列常规的测试后发现,第五关和第六关,是属于报错注入的关卡,两关的区别是一个是单引号一个是双引号...当然我是看了源码的.... 基于报错注入的方法,我早就忘的差不多了,,,我记的我最后一次基于 ...

  5. DLL注入技术之劫持进程创建注入

    劫持进程创建注入原理是利用Windows系统中CreateProcess()这个API创建一个进程,并将第6个参数设为CREATE_SUSPENDED,进而创建一个挂起状态的进程,利用这个进程状态进行 ...

  6. 老树开新花:DLL劫持漏洞新玩法

    本文原创作者:丝绸之路 <img src="http://image.3001.net/images/20150921/14428044502635.jpg!small" t ...

  7. 36.浅谈DLL劫持

    最近在搞内网,需要实现免杀后门,大佬推荐了dll劫持,DLL劫持后,能干很多事情,比如杀软对某些厂商的软件是实行白名单的,你干些敏感操作都是不拦截,不提示的.还有留后门,提权等等.本文主要介绍如何检测 ...

  8. Dll劫持漏洞详解

      一.dll的定义 DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分 ...

  9. 关于dll劫持我的奇思妙想(一)

    0x00  前言 前段时间在研究着windows底层的一些东西,发现这个dll劫持一直没有做过,根据倾旋师傅的视频和文章做了一系列的研究,然后就突发来了兴致研究一些dll劫持提权. 0x01   了解 ...

随机推荐

  1. PHP mysqli_fetch_object() 函数实例讲解

    定义和用法 mysqli_fetch_object() 函数从结果集中取得当前行,并作为对象返回. 注释:该函数返回的字段名是区分大小写的. 语法 mysqli_fetch_object(result ...

  2. php使用ffmpeg向视频中添加文字字幕

    这篇文章主要介绍了PHP使用ffmpeg给视频增加字幕显示的方法,实例分析了php操作ffmpeg给视频增加字母的技巧,具有一定参考借鉴价值,需要的朋友可以参考下. 本文实例讲述了PHP使用ffmpe ...

  3. c++官方文档-按值传递和按引用传递

    #include<stdio.h> #include<iostream> #include<queue> #include<map> #include& ...

  4. FDMemTable 数据集

    c++builder FDMemTable 内存表 内存数据表:现在应该首选 TFDMemTable 了(之前是 TClientDataSet) FDMemTable->CloneCursor( ...

  5. 批量得到/修改word超链接

    Alt+F9或者勾选下面 此时的超链接地址全部转换为文本形式进行显示; 然后可以用全局替换搜索来处理

  6. bootstrap 移动自适应界面

    移动设备优先 在 Bootstrap 2 中,我们对框架中的某些关键部分增加了对移动设备友好的样式.而在 Bootstrap 3 中,我们重写了整个框架,使其一开始就是对移动设备友好的.这次不是简单的 ...

  7. UI5-文档-4.7-JSON Model

    现在我们已经设置了视图和控制器,现在是时候考虑MVC中的M了. 我们将在app中添加一个输入字段,将它的值绑定到模型上,并将相同的值绑定到输入字段的描述上.描述将根据用户类型直接更新. Preview ...

  8. Json字符串转Dictionary

    /// <summary> /// json字符串转Dictionary /// </summary> /// <param name="json"& ...

  9. 下载gradle缓慢的解决方法

    用AndroidStudio或者Qt编译apk,下载gradle缓慢时,可以用迅雷等下载工具在https://services.gradle.org/distributions/下载对应的版本. 中断 ...

  10. SpringBoot 监控管理模块actuator没有权限的问题

    SpringBoot 1.5.9 版本加入actuator依赖后, 访问/beans 等敏感的信息时候报错,如下 Tue Mar 07 21:18:57 GMT+08:00 2017 There wa ...