线程-关于Win32核心编程中DLL注入后无反应的解决办法

问题描述

关于Win32核心编程中DLL注入后无反应的解决办法

#include
#include
HINSTANCE hProcess;
PWSTR pszLibFileRemote;
HINSTANCE hThread;
void StartInject(int ProcessID, char * DllName);
void OverInject(char * DllName);
void EnableDebugPrivilege(HANDLE processHandle);
int main(int argc, char* argv[])
{
int processid = 0;
char DllName[50] = "Win32DLL.dll";
while (1)
{
//ZeroMemory(DllName, sizeof(DllName));
printf("please input the process id:n");
scanf("%d", &processid);

    EnableDebugPrivilege(GetCurrentThread());
    StartInject(processid, DllName);
    OverInject(DllName);
}
return 0;

}
void StartInject(int ProcessID, char * DllName)
{

//打开进程,申请访问;
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, ProcessID);

if (hProcess == NULL)
{
    printf("进程不允许访问!");
    getchar();
    exit(0);
}
int cch = 1 + lstrlenW(DllName);
int cb = cch * sizeof(WCHAR);

pszLibFileRemote = (PWSTR)VirtualAllocEx(hProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE);//为DllName在远程线程空间分配内存;
if (pszLibFileRemote == NULL)
{
    printf("在远程线程空间为DllName分配内存失败!");
    getchar();
    exit(0);
}
if (!WriteProcessMemory(hProcess, pszLibFileRemote, (PVOID)DllName, cb, NULL))
{
    printf("在拷贝DllName到远程线程内存地址空间时失败!");
    getchar();
    exit(0);
}
/*得到LoadLibraryW在内核(kernel32.dll中的地址)*/
PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)
    GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW");
if (pfnThreadRtn == NULL)
{
    printf("在得到函数地址时出现错误:n函数名:LoadLibraryW(加载动态链接库)");
    getchar();
    exit(0);
}
hThread = CreateRemoteThread(hProcess, NULL, 0,pfnThreadRtn, pszLibFileRemote, 0, NULL);
if (hThread == NULL)
{
    printf("创建远程线程失败,错误代码:%d",GetLastError());
    getchar();
    exit(0);
}

}
void OverInject(char * DllName)
{
if (DllName != NULL)
VirtualFreeEx(hProcess, DllName, 0, MEM_RELEASE);

if (hThread != NULL)
    CloseHandle(hThread);

if (hProcess != NULL)
    CloseHandle(hProcess);

}

void EnableDebugPrivilege(HANDLE processHandle)
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;

if (!OpenProcessToken(processHandle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
    printf("OpenProcessToken");
    return;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue))
{
    printf("LookupPrivilegeValue");
    CloseHandle(hToken);
    return;
}

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL))
{
    printf("AdjustTokenPrivileges");
    CloseHandle(hToken);
}

}

然后DLL中是这样的:
#include
#include

int WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{

switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
//The DLL is being mapped into the process's address space.
MessageBoxW(NULL, "这是一个确定 取消的消息框!", "标题", MB_OKCANCEL);
break;

case DLL_THREAD_ATTACH:
//A thread is being created.
break;

case DLL_THREAD_DETACH:
//A thread is exiting cleanly.
break;

case DLL_PROCESS_DETACH:
//The DLL is being unmapped from the process's address space.
break;
}
/*MessageBoxW(NULL, "这是一个确定 取消的消息框!", "标题", MB_OKCANCEL);*/
return(TRUE);  // Used only for DLL_PROCESS_ATTACH

}

解决方案

用processexplore等工具查看一下目标进程,dll是否加载进去。是不是有杀毒软件拦截注入

时间: 2025-01-20 21:37:37

线程-关于Win32核心编程中DLL注入后无反应的解决办法的相关文章

Winxp中无法安装新字体的终极解决办法

Winxp中无法安装新字体的终极解决办法 在windows 7越来越火的今天,相信还有很多朋友对XP系统情有独钟吧?北极鱼也算是一个了,主要是由于自己都很少使用安装版软件,电脑上基本上都是一些绿色软件.并且自己制作很多绿色软件都是在xp系统下测试绿化的,结果就导致部分绿色软件在windows 7下无法使用,再加上在运行速度已经习惯问题上感觉还是XP来的顺手,所以一直还在延续着XP的使用,(双系统,平时使用在XP下,玩玩就用windows 7), 一直来用的XP好好的,不过早些天,北极鱼也算是终于

getview()-android getView中 position=0多次出现的解决办法

问题描述 android getView中 position=0多次出现的解决办法 适配器中的getview @Override public View getView(int position, View convertView, ViewGroup parent) { View view = View.inflate(context,R.layout.home_item,null); TextView tv = (TextView) view.findViewById(R.id.homeIt

iOS9与XCode7中不能使用http连接的快速解决办法_IOS

在Xcode7.0及以上版本中编译iOS APP时,默认会使用iOS9的一项新特性,使得所有http连接被禁用,项目里使用的API没有https支持,就悲剧了.差了官方文档,有这么一段话 App Transport Security App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accident

有关easyui-layout中的收缩层无法显示标题的解决办法_jquery

easyui-layout中的收缩层无法显示标题的问题原因分析: 在easyui-layout中设置面板初始化为可以折叠,然后就发现标题还有图标都木有了 嗯,就是结果列表上面.一片空白,出现了问题就要去解决它,在网上查了资料之后呢,决定修改jquery.easyui.min.js 版本为:jQuery EasyUI 1.4.1 在5105行有_39d方法,在其中设置两个变量_Cstitle,_CsIcon添加代码如下: var _Cstitle; var _closedTitle = p.pan

sublime text2中ctrl+b后无结果显示

问题描述 sublime text2中ctrl+b后无结果显示 还有我的配置是正确的,cmd可以编译得出来. 请问一下,为什么按完ctrl+b后没有结果显示. 解决方案 要在一个文件用压缩包打开,,修改一下 解决方案二: 你ctrl b没有绑定到命令配置吧. 解决方案三: 你ctrl b没有绑定到命令配置吧.需要配置sublime 的编译命令 解决方案四: 安装不了, 无言啊

使用asp.net MVC4中的Bundle遇到的问题及解决办法分享_实用技巧

背景    之前有过使用MVC3的经验,也建过MVC4的基本样例看过,知道有bundle这么一个方法.   近日想建个网站使用MVC4,但是我觉得在基本样例上改不好,有太多无用的东西,所以就建了一个空白的MVC的程序,然后自己写需要的东西,   将程序的目标框架从4.5降到了4.0(我使用的是VS2013),问题就来了. 问题及解决办法 1.降了目标框架之后,vs报一个警告:NuGet程序包是使用不同于当前目标框架的目标框架安装的,需要更新System.Web.Http,之前有用过NuGet,

DllMain加载其他DLL造成的死锁问题及其解决办法

  使用VS 2008新建一个MFC ActiveX工程,因为在工程里要用到GDI+.我习惯把初始化GDI+库的代码放在应用程序类的InitInstance函数,对应的销毁代码放在ExitInstance函数.具体如下: 先在应用程序类里定义一个数据成员:         [cpp] view plaincopy ULONG_PTR   m_gdiplusToken;       然后添加初始化GDI+库的代码和对应的销毁代码:        [cpp] view plaincopy BOOL 

Javamail中的常见中文乱码问题与解决办法(综合)

解决|问题|中文|中文乱码 在使用javamail api开发邮件服务系统时,我们常常会碰到很多中文乱码问题,下面就分别介绍如何解决这些问题. 1.发送名称含中文的附件到邮件服务器,用别的邮件接收程序接收到的附件名显示为乱码 解决办法:在调用MimeBodyPart的setFileName()时使用Base64编码.例如: BASE64Encoder enc = new BASE64Encoder();//该类位于jre/lib/rt.jar中 //fds为FileDataSource实例 mb

在ASP中常见的错误80004005信息和解决办法

作者:BatMan错误信息(错误信息我不用翻译成中文了吧,呵呵,大家谅解)Microsoft OLE DB Provider for ODBC Drivers error '80004005'[Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet databaseengine cannot open the file '(unknown)'. It is already opened exclusivelyby another