想将经常用到的功能函数写在一起,花时间精心维护,然后以后就用起来就舒服很多了

目前就写了进程调试权限,远程线程注入,远程线程释放这三个函数.还有很多功能,以后慢慢加

 // last code by gwsbhqt@163.com at 20150708

 #pragma once

 #ifndef ENHANCEFUNC_H
#define ENHANCEFUNC_H #include <cstdio>
#include <windows.h> using namespace std; BOOL EnableDebugPrivileges(); HANDLE RemoteThreadInjection(HANDLE hProcess, LPCSTR lpLibFilePath, LPDWORD lpRemoteThreadId = NULL);
BOOL RemoteThreadFreeing(HANDLE hProcess, LPCSTR lpLibFilePath, DWORD dwMilliseconds = INFINITE); #endif // def ENHANCEFUNC_H

EnhanceFunc.h

 // last code by gwsbhqt@163.com at 20150708

 #include "EnhanceFunc.h"

 BOOL EnableDebugPrivileges()
{
HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
return FALSE; LUID luid = {};
if (!LookupPrivilegeValueA(NULL, "SeDebugPrivilege", &luid))
{
CloseHandle(hToken);
return FALSE;
} TOKEN_PRIVILEGES tp = {};
tp.PrivilegeCount = ;
tp.Privileges[].Luid = luid;
tp.Privileges[].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL))
{
CloseHandle(hToken);
return FALSE;
} CloseHandle(hToken);
return TRUE;
} HANDLE RemoteThreadInjection(HANDLE hProcess, LPCSTR lpLibFilePath, LPDWORD lpRemoteThreadId)
{
int len = strlen(lpLibFilePath) + ; LPVOID lpVir = VirtualAllocEx(hProcess, NULL, len, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (NULL == lpVir)
return ERROR; if (!WriteProcessMemory(hProcess, lpVir, lpLibFilePath, len, NULL))
{
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE);
return ERROR;
} HMODULE hModule = GetModuleHandleA("Kernel32.dll");
if (NULL == hModule)
{
hModule = LoadLibraryA("Kernel32.dll");
if (NULL == hModule)
{
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE);
return ERROR;
}
} FARPROC fpProc = GetProcAddress(hModule, "LoadLibraryA");
if (NULL == fpProc)
{
FreeLibrary(hModule);
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE);
return ERROR;
} DWORD dwRemoteThreadId;
HANDLE hRemoteThread = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)fpProc, lpVir, NULL, &dwRemoteThreadId);
if (NULL == hRemoteThread)
{
FreeLibrary(hModule);
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE);
return ERROR;
} if (NULL != lpRemoteThreadId)
*lpRemoteThreadId = dwRemoteThreadId; FreeLibrary(hModule);
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE);
return hRemoteThread;
} BOOL RemoteThreadFreeing(HANDLE hProcess, LPCSTR lpLibFilePath, DWORD dwMilliseconds)
{
int len = strlen(lpLibFilePath) + ; LPVOID lpVir = VirtualAllocEx(hProcess, NULL, len, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (NULL == lpVir)
return FALSE; if (!WriteProcessMemory(hProcess, lpVir, lpLibFilePath, len, NULL))
{
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE);
return FALSE;
} HMODULE hModule = GetModuleHandleA("Kernel32.dll");
if (NULL == hModule)
{
hModule = LoadLibraryA("Kernel32.dll");
if (NULL == hModule)
{
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE);
return FALSE;
}
} FARPROC fpProc = GetProcAddress(hModule, "GetModuleHandleA");
if (NULL == fpProc)
{
FreeLibrary(hModule);
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE);
return FALSE;
} HANDLE hRemoteThread = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)fpProc, lpVir, NULL, NULL);
if (NULL == hRemoteThread)
{
FreeLibrary(hModule);
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE);
return FALSE;
} if (WAIT_OBJECT_0 != WaitForSingleObject(hRemoteThread, dwMilliseconds))
{
CloseHandle(hRemoteThread);
FreeLibrary(hModule);
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE);
return FALSE;
} DWORD dwExitCode;
if (!GetExitCodeThread(hRemoteThread, &dwExitCode)) // dwExitCode is hRemoteLibModule
{
CloseHandle(hRemoteThread);
FreeLibrary(hModule);
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE);
return FALSE;
} CloseHandle(hRemoteThread);
VirtualFreeEx(hProcess, lpVir, len, MEM_RELEASE); // CreateRemoteThread the second times fpProc = GetProcAddress(hModule, "FreeLibrary");
if (NULL == fpProc)
{
FreeLibrary(hModule);
return FALSE;
} hRemoteThread = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)fpProc, (LPVOID)((HMODULE)dwExitCode), NULL, NULL);
if (NULL == hRemoteThread)
{
FreeLibrary(hModule);
return FALSE;
} if (WAIT_OBJECT_0 != WaitForSingleObject(hRemoteThread, dwMilliseconds))
{
CloseHandle(hRemoteThread);
FreeLibrary(hModule);
return FALSE;
} if (!GetExitCodeThread(hRemoteThread, &dwExitCode)) // dwExitCode is the return value of Remote FreeLibrary
{
CloseHandle(hRemoteThread);
FreeLibrary(hModule);
return FALSE;
} FreeLibrary(hModule);
CloseHandle(hRemoteThread);
return (BOOL)dwExitCode;
}

EnhanceFunc.cpp

 #include <cstdio>
#include <windows.h> #include "EnhanceFunc.h" using namespace std; int main()
{
char cTargetDllPath[MAX_PATH] = "C:\\DLL.dll"; // suppose I have a dll file in this path printf("Enable Debug Privilege %s...\n", EnableDebugPrivileges() ? "Succeed" : "Faild"); system("pause > nul"); STARTUPINFOA si = {};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {};
CreateProcessA(NULL, "C:\\Windows\\System32\\calc.exe", NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi); system("pause > nul"); printf("DLL.dll Inject %s...\n", RemoteThreadInjection(pi.hProcess, cTargetDllPath) ? "Succeed" : "Faild"); system("pause > nul"); printf("DLL.dll Freeing %s...\n", RemoteThreadFreeing(pi.hProcess, cTargetDllPath) ? "Succeed" : "Faild"); system("pause > nul"); TerminateProcess(pi.hProcess, NULL); system("pause > nul && exit");
return ;
}

main.cpp

EnhanceFunc__增强函数集的更多相关文章

  1. C语言通用双向循环链表操作函数集

    说明 相比Linux内核链表宿主结构可有多个链表结构的优点,本函数集侧重封装性和易用性,而灵活性和效率有所降低.     可基于该函数集方便地构造栈或队列集.     本函数集暂未考虑并发保护. 一  ...

  2. Linux字符串函数集

    //Linux字符串函数集: 头文件:string.h 函数名: strstr 函数原型:extern char *strstr(char *str1, char *str2); 功能:找出str2字 ...

  3. 使用Word API打开Word文档 ASP.NET编程中常用到的27个函数集

    使用Word API(非Openxml)打开Word文档简单示例(必须安装Word) 首先需要引入参照Microsoft.Office.Interop.Word 代码示例如下: public void ...

  4. makefile 函数集

    1 if 函数 语法 $(if CONDITION,THEN-PART[,ELSE-PART]) 功能 第一个参数"CONDITION",在函数执行时忽略其前导和结尾空字符,如果包 ...

  5. javascript string 函数集

    JavaScript_String对象说明 string中文为"字符串"的意思,String继承自Object对象,此对象提供字符串的查找操作等函数 JavaScript字符串类型 ...

  6. [转]js中获取时间的函数集

    $(function(){ var mydate = new Date(); var t=mydate.toLocaleString(); $("#time").text(t); ...

  7. PHP 通用检测函数集

    // ※CheckMoney($C_Money) 检查数据是否是99999.99格式 // ※CheckEmailAddr($C_mailaddr) 判断是否为有效邮件地址 // ※CheckWebA ...

  8. php常用函数集

    网络请求: /** * 发起HTTPS请求 */ function curl_post($url,$data=null,$header=null,$post=0) { //初始化curl $ch = ...

  9. JS判断字符串是否为空、过滤空格、查找字符串位置等函数集

    这是一个由网上收集的JS代码段,用于判断指定字符串是否为空,过滤字符串中某字符两边的空格.查找指定字符串开始的位置.使用IsFloat函数判断一 个字符串是否由数字(int or long or fl ...

随机推荐

  1. HTML标签分类总结

    块级元素和行内元素块级元素address - 地址blockquote - 块引用center - 举中对齐块dir - 目录列表div - 常用块级容易,也是css layout的主要标签dl - ...

  2. 使用maven插件反向映射generatorConfig.xml生成代码

    一.配置Maven pom.xml 文件 <!-- 反向映射 --> <plugin> <groupId>org.mybatis.generator</gro ...

  3. css布局方面小结

    1 ####css选择器 1 .left-word.moreinfor{} 这样是找不到选择器的.中间需要一个空格 但是div.moreinfor 是可以的. 2 max-width的作用: p元素只 ...

  4. 如何从ST官网下载STM32标准库

    Frm:https://blog.csdn.net/k1ang/article/details/79645044

  5. (转载) 深入理解ES6箭头函数的this以及各类this面试题总结

    声明:本文转载自 https://blog.csdn.net/yangbingbinga/article/details/61424363 ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取 ...

  6. 前端(七)—— 盒模型之display、overflow、隐藏、border、margin、样式支持,层级结构

    display.overflow.隐藏.border.margin.样式支持,层级结构 一.盒模型之display 1.三种样式 block 块 inline 内联/行内 inline-block 内 ...

  7. Java8向后兼容

    toInstant()方法被添加到可用于将它们转换到新的日期时间的API原始日期和日历对象.使用ofInstant(Insant,ZoneId)方法得到一个LocalDateTime或ZonedDat ...

  8. 卷积神经网络学习笔记(CNN)

    看了很多关于卷积神经网络的论文和资料 可是我发现一个问题,就是pooling会出现一个问题 我能找到的代码里面都是用的均值子采样,如果改成最大或最小,或P范数都会在学习训练的时候遇到不知道怎么处理的问 ...

  9. Ubuntu18.04 一键升级Python所有第三方包

    一.pip是什么 pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 二.升级pip版本 1.默认Ubuntu自带的pip (pip 9.0.1)是基 ...

  10. webpack4 入门配置研究

    1. 全局安装 npm install webpack webpack-cli webpack-dev-server -g 1.1)输密文的密码(电脑开机) 1.2)安装成功 2. 输入命令mkdir ...