精华内容
下载资源
问答
  • DLL注入

    2021-01-03 16:48:54
    DLL注入 什么是DLL注入 DLL注入指的是向运行中的其他进程插入我们指定的DLL文件,它是渗透其他进程的最简单有效的方法,借助DLL注入技术,可以钩取API,改进程序,修复BUG等 DLL注入基本原理 DLL注入的核心就是使...

    DLL注入

    什么是DLL注入

    DLL注入指的是向运行中的其他进程插入我们指定的DLL文件,它是渗透其他进程的最简单有效的方法,借助DLL注入技术,可以钩取API,改进程序,修复BUG等

    DLL注入基本原理

    DLL注入的核心就是使目标程序调用LoadLibrary()API,来加载我们的DLL,从而自动执行DLLMain入口函数内的代码

    DLL注入实现的常见方法

    1.创建远程线程(利用CreateRemoteThread()API)

    2.注册表注入(AppInit_DLLs值)

    3.Windows消息钩取(SetWindowsHookEx()API)

    开始实现DLL注入

    编写DLL文件

    在这里插入图片描述
    这里在DLLMain中用了一个创建线程的方式调用线程过程函数,
    线程过程就是我们DLL中具体要实施的内容

    编写注入工具

    在这里插入图片描述
    可以看到创建线程和创建远程线程的区别就是一个进程句柄,其他参数相同

    注入DLL

    在这里插入图片描述

    可以看到注入成功

    确认是否真的注入

    在这里插入图片描述

    展开全文
  • Dll注入

    2020-10-14 09:37:49
    一、DLL注入概述 1.简介 DLL注入指的是向运行中的其他进程强制插入特定的DLL文件。从技术细节上来讲,DLL注入命令区别于其他进程自行调用LoadLibary()API加载用户指定的DLL文件。DLL注入与一般DLL加载的区别在于,...

    一、DLL注入概述

    1.简介

    DLL注入指的是向运行中的其他进程强制插入特定的DLL文件。从技术细节上来讲,DLL注入命令区别于其他进程自行调用LoadLibary()API加载用户指定的DLL文件。DLL注入与一般DLL加载的区别在于,加载的目标进程在自身还是在其他进程,正经的程序谁会去操作其他的进程空间呢?

    2. 原理

    DLL注入的工作原理是强制目标程序调用LoadLibary()函数加载dll文件,因此会强制执行DLLMain函数,同时,被注入的DLL拥有目标进程的内存访问权限从而实现一些有用的功能。

    例如:

    1. 改善功能与修复BUg
    2. 消息钩取
    3. API钩取
    4. 恶意代码

    二、DLL注入实现

    各个方式都分为注入程序和DLL程序两部分,其中DLL都是一样的,我们的目标是把我们自己的DLL注入程序中,不同的方式使用不同的注入程序,从而实现DLL注入。

    1.远程线程注入

    所用主要API

    1. LoadLibrary():用来加载DLL文件,
    2. CreateRemoteThread() :在其他程序中启动远程线程,使程序自动启用LoadLibrary()函数,从而加载DLL文件
    3. WriteProcessMemory():在其他进程中写入数据

    程序代码

    BOOL InjectProgram(DWORD dwPID, LPCTSTR path)
    {
    	HANDLE hProcess = NULL, hThread = NULL;
    	HMODULE hMod = NULL;
    	LPVOID pRemoteBuf = NULL;
    	DWORD dwBufSize = (DWORD)(_tcslen(path) + 1) * sizeof(TCHAR);
    	LPTHREAD_START_ROUTINE pThreadProc;
    	//用获取的PID找到注入进程的句柄
    	hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
    	if (!hProcess)
    	{
    		MessageBox(NULL, L"句柄失败", L"Error",MB_OK);
    		_tprintf(L"Inject fail PID=%d,error is %d", dwPID, GetLastError);
    		return 0;
    	}
    	//在目标进程的内存中分配空间
    	pRemoteBuf = (LPVOID)VirtualAllocEx(hProcess, NULL, dwBufSize, MEM_COMMIT, PAGE_READWRITE);
    	//在分配好的空间中写入dll文件名
    	WriteProcessMemory(hProcess, pRemoteBuf, (LPVOID)path, dwBufSize, NULL);
    	//获取LoadLibrary API的地址
    	hMod = GetModuleHandle(L"kernel32.dll");
    	pThreadProc = (LPTHREAD_START_ROUTINE)GetProcAddress(hMod, "LoadLibraryW");
    	hThread = CreateRemoteThread(
    		hProcess,
    		NULL,
    		0,
    		pThreadProc,
    		pRemoteBuf,
    		0,
    		NULL
    	);
    	if (!hThread)
    	{
    		return 0;
    	}
    	WaitForSingleObject(hThread, INFINITE);
    	CloseHandle(hThread);
    	CloseHandle(hProcess);
    	return TRUE;
    }
    int _tmain(int argc,TCHAR* argv[])  //主函数名为_tmain(),否则无法接受参数
    {
    	if (argc != 3)
    	{
    		MessageBox(NULL, L"Error", L"参数错误", MB_OK);
    		OutputDebugString(L"参数数量不对");
    	}
    	else
    	{
    		BOOL flag;
    		_tprintf(L"%d,Inject PID=%d", argc,(DWORD)_tstol(argv[1]));
    		flag=InjectProgram((DWORD)_tstol(argv[1]), argv[2]);
    		if (flag)
    		{
    			MessageBox(NULL, L"YES", L"成功", MB_OK);
    		}
    		else
    		{
    			MessageBox(NULL, (LPCWSTR)&argv[1], L"错误", MB_OK);
    		}
    	}
    
        
    }
    
    

    2.修改注册表注入

    手动改注册表

    运行regedit.exe,可以打开注册表编辑器,

    找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\windows NT\windows,我们需要该其中的两项

    需要改AppInit_DLLs,以及LoadAppInt_DLLs。

    AppInit_DLLs的值会让程序在加载user32.dll时同时加载,就像你在食堂打一碗饭,食堂大妈顺手给了你一碗汤。

    LoadAppInt_DLLs的值改为1,让程序加载上一项中修改的DLL地址。

    重启之后生效。

    注入程序:

    
    #define DSTKEY L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows"
    
    BOOL RegInject(WCHAR* path);
    int main()
    {
    	WCHAR Dllpath[MAX_PATH] = L"C:\\Users\\Y\\Desktop\\myhack.dll";
    	BOOL flag = RegInject(Dllpath);
    	if (flag)
    	{
    		_tprintf(L"SUCCESS");
    	}
    	else
    	{
    		printf("erro\n");
    	}
    
        
    }
    BOOL RegInject(WCHAR* path)
    {
    	HKEY key = NULL;
    	BYTE Dllpath[MAX_PATH] = { 0 };
    	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, DSTKEY, 0, KEY_ALL_ACCESS, &key) != ERROR_SUCCESS)
    	{
    		printf("Inject faile\n");
    		return false;
    	}
    	memcpy((void*)Dllpath, path,_tcslen(path)*2+1);
    	if (RegSetValueEx(key, L"AppInit_DLLs", 0, REG_SZ, Dllpath, (_tcslen(path) + 1)*sizeof(TCHAR))!=ERROR_SUCCESS)
    	{
    		printf("set error\n");
    		return false;
    	}
    	DWORD dwValue = 1;
    	if (RegSetValueEx(key, L"LoadAppInit_DLLs", 0, REG_DWORD,(BYTE*)&dwValue, sizeof(dwValue)) != ERROR_SUCCESS)
    	{
    		printf("set2 error\n");
    		return false;
    	}
    	return true;
    
    
    }
    
    

    3.消息钩取

    利用windows提供的setWindowsHook()API,我们可以实现DLL注入,该函数会注册一个钩子,当程序触发相应事件时,会将DLL注入到相应的进程,从而实现一系列的目标。

    键盘钩子见另一篇博客

    参考资料:《逆向工程核心原理》

    大佬博客

    展开全文
  • dll注入dll注入

    2010-08-02 17:20:08
    dll注入.rar dll注入.rar dll注入.rar
  • dll注入

    千次阅读 2019-04-02 22:39:57
    打开dllinject,选择需要注入的宿主程序,选择注入dll,选择要执行的函数。 例子:植物大战僵尸修改阳光值 准备软件 植物大战僵尸 dllinject Cheat Engine 注入流程(以修改植物大战僵尸阳关值...

    注入工具

    dllinject

    注入流程

    1. 编写可注入动态库dll
    __declspec(dllexport)
    int go()
    {
        //需要注入的程序代码
    }
    
    1. 打开dllinject,选择需要注入的宿主程序,选择注入的dll,选择要执行的函数。

    例子:植物大战僵尸修改阳光值

    准备软件

    • 植物大战僵尸
    • dllinject
    • Cheat Engine

    注入流程(以修改植物大战僵尸阳关值为例)

    1. 打开植物大战僵尸游戏
    2. 打开Cheat Engine软件,选择植物大战僵尸进程
      dll注入1
    3. 搜索内存中的值,这个值和阳光中的值相对应,点击首次扫描
      dll注入2
    4. 进入游戏,当阳关值改变的时候,再次扫描,点击Next Scan
      dll注入3
    5. 当再次扫描时候,出现唯一的数值,也就是唯一的内存地址,这个内存地址就是存储阳光值的内存地址
      dll注入4
    6. 编写注入程序(此处我将阳光值改为9000),生成dll动态库
    __declspec(dllexport)
    void go()
    {
    	//需要注入的程序代码
    	int *p = (int *)0x2AED1BF0;
    	*p = 9000;
    }
    
    1. 打开dllinject,选择植物大战僵尸,找到生成的dll动态库,点击注入
      dll注入5
    2. 然后就可看到阳光值变为9000,注入成功
      dll注入6

    从这个例子得出的启示

    任何程序的要运行,都存在变量,而这个变量可以通过C语言去修改。

    基本上的外挂都是C语言修的,其原理与上述例子相同。这个例子只是临时性的修改变量的值。长久的做法是利用反编译,找到此处的赋值语句,然后在汇编中修改。也就是破解中常说的内存定位,关于破解的知识,有时间的话再做整理。

    变量都是存储在内存区域的,如果想要修改某个变量的值,那么修改其所在位置的值便可。这是C语言的精华所在,可以肆无忌惮的修改内存的值。这也是其他语言办不到的。从此就引出了一个C语言的强大之处:指针。

    展开全文
  • DLL注入

    2012-11-09 16:54:29
    c# 整合c++远程注入 api重写等 记事本应用实例等 是值得一看的小工具
  • dll注入实例注入代码

    2020-11-03 09:16:12
    dll注入实例,实现dll注入,代码详细介绍了整个dll注入的流程,以及生成exe,需要下载微软支持库,是学习dll注入的好东西
  • 远程DLL注入

    2018-04-15 19:15:09
    远程DLL注入远程DLL注入远程DLL注入远程DLL注入远程DLL注入远程DLL注入
  • dll注入源码dll注入源码dll注入源码dll注入源码dll注入源码dll注入源码
  • dll注入工具,将dll文件注入到一个项目中,使其可以改变项目中变量的值
  • exe将dll注入到explorer.exe资源管理器进程_DLL注入示例.zip
  • 这款万能DLL注入器的作用就是将一个DLL放进某个进程的地址空间里,让它成为那个进程的一部分,实现我们自定义的扩展功能。使用方法简单,只需打开目标进程,然

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,409
精华内容 10,963
关键字:

dll注入