DLL注入
刚刚整理的代码注入(远程线程注入)现在整理这个DLL注入,DLL注入比较常用,相比远程代码注入DLL注入没有什么太多的限制,而且实现起来比较简单,当然远程线程需要注意的问题DLL很多情况都需要注意,这里不做重复,只说代码注入里面没有说过的部分。DLL注入的方式不唯一,比如你如果完全看懂了代码注入,那么你直接LoadLibrary地址和一个dll路径传进去然后在里面load一下就行了,也就是之前的代码注入完全可以实现dll注入,今天就说下一通常dll的注入方式吧,通常dll的注入比我刚刚说的那个方法还要简单,流程和代码注入差不多但是简单了很多,思路是这样,LoadLibrary这个函数所有的进程都是地址一样,我们直接获取LoadLibrary的地址,然后在CreateRemoteThread里面直接把这个地址作为线程地址传过去,然后参数就是我们已经拷贝到对方内存里的那个字符串,这样直接就跑起来了,非常简单,在DLL里想干什么就干什么,可以和本地写代码一样,然后还有一个问题,就是注意一下,dll在入口的switch里面的第一个分支直接调用你想干的事就行了,那个分支的意思就是说当dll被第一次载入的时候就自动执行了,OK就这么简单,如果你觉得没听懂,那么需要看我之前说的那个代码注入,这个里面只说了新的东西,还有就是dll注入应该注意的几个地方:
1.dll的入口记得就调用自己的函数,别走正当的流程,如果你非蛋疼的想调用某个指定函数,当然可以用代码注入结合dll注入的方式,但是 然并卵。
2.注意系统问题,32exe+32dll注入32位程序,64exe+64dll注入64位程序。
刚刚整理的代码注入(远程线程注入)现在整理这个DLL注入,DLL注入比较常用,相比远程代码注入DLL注入没有什么太多的限制,而且实现起来比较简单,当然远程线程需要注意的问题DLL很多情况都需要注意,这里不做重复,只说代码注入里面没有说过的部分。DLL注入的方式不唯一,比如你如果完全看懂了代码注入,那么你直接LoadLibrary地址和一个dll路径传进去然后在里面load一下就行了,也就是之前的代码注入完全可以实现dll注入,今天就说下一通常dll的注入方式吧,通常dll的注入比我刚刚说的那个方法还要简单,流程和代码注入差不多但是简单了很多,思路是这样,LoadLibrary这个函数所有的进程都是地址一样,我们直接获取LoadLibrary的地址,然后在CreateRemoteThread里面直接把这个地址作为线程地址传过去,然后参数就是我们已经拷贝到对方内存里的那个字符串,这样直接就跑起来了,非常简单,在DLL里想干什么就干什么,可以和本地写代码一样,然后还有一个问题,就是注意一下,dll在入口的switch里面的第一个分支直接调用你想干的事就行了,那个分支的意思就是说当dll被第一次载入的时候就自动执行了,OK就这么简单,如果你觉得没听懂,那么需要看我之前说的那个代码注入,这个里面只说了新的东西,还有就是dll注入应该注意的几个地方:
1.dll的入口记得就调用自己的函数,别走正当的流程,如果你非蛋疼的想调用某个指定函数,当然可以用代码注入结合dll注入的方式,但是 然并卵。
2.注意系统问题,32exe+32dll注入32位程序,64exe+64dll注入64位程序。
3.加入你注入了QQ,发现第一次注入成功了,但是第二次注入代码没报错,但是么执行自己想要的,什么情况?,原因在于同一个dll被加同一个程序加载两次的时候,第二次不会加载,给优化掉了,把QQ关了重开就行,或者自己找到某个地方free掉自己的dll。OK一共就这些,接下来是我封装好的一个DLL调用库,没有写的很细,如果是使用建议简单修改整理(我写了测试例子,在这里http://download.youkuaiyun.com/detail/u013761036/9603051)。
.H
#pragma once
#include <Windows.h>
#include <stdlib.h>
#include <tlhelp32.h>
#include <Psapi.h>
#include <string>
using std::string;
using std::wstring;
#pragma comment (lib,"Psapi.lib")
#pragma warning(disable:4996)
class CInstDll
{
private:
bool AdjustProcessTokenPrivilege();
bool Camp2str(wstring wsStrA ,wstring wsStrB