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

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

 // 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. 问题 |无法找到Python路径,需手动配置环境变量

    问题: 在命令行cmd输入Python,如果出现以下无法识别命令行的报错,说明在系统环境变量中无法找到对应之前安装的Python的路径,则需手动配置一下 怎么配置? 1.打开我的电脑——右键——属性— ...

  2. YIi2中checkboxOptions前选框的用法

    这是checkboxOptions前选框的用法 use yii\grid\GridView; $this->registerJs(" $('#selection_all').click ...

  3. A*寻路算法C++简单实现

    搜索区域    如图所示简易地图, 其中绿色方块的是起点 (用 A 表示), 中间蓝色的是障碍物, 红色的方块 (用 B 表示) 是目的地. 为了可以用一个二维数组来表示地图, 我们将地图划分成一个个 ...

  4. BZOJ 4319: cerc2008 Suffix reconstruction(后缀数组)

    题面 Description 话说练习后缀数组时,小C 刷遍 poj 后缀数组题, 各类字符串题闻之丧胆.就在准备对敌方武将发出连环杀时,对方一记无中生有,又一招顺 手牵羊,小C 程序中的原字符数组就 ...

  5. django-filters,rangefilter的用法,不在某个范围内

    找了好久在网上都没找到完整的示例代码,东拼西凑,连蒙带猜出来一句. not_in=django_filters.NumericRangeFilter(field_name="pid" ...

  6. 【转】java使用java.lang.management监视和管理 Java 虚拟机

    原文地址:https://blog.csdn.net/zhongweijian/article/details/7619383 软件包 java.lang.management 提供管理接口,用于监视 ...

  7. (转) C#中使用throw和throw ex抛出异常的区别

    通常,我们使用try/catch/finally语句块来捕获异常,就像在这里说的.在抛出异常的时候,使用throw和throw ex有什么区别呢? 假设,按如下的方式调用几个方法: →在Main方法中 ...

  8. C#比较两个日期的大小

    DateTime dt1 = DateTime.Parse("2006-04-01"); DateTime dt2 = DateTime.Parse("2006-05-0 ...

  9. There was an unexpected error (type=Method Not Allowed, status=405). Request method 'POST' not supported

    背景:点击提交按钮ajax请求接口时,报出错误[ Whitelabel Error Page This application has no explicit mapping for /error, ...

  10. Java类初始化顺序,大神3个示例带你躺坑。。

    最近发现微信群里面有些群友在讨论类的初始化顺序,如类的静态变量.成员变量.静态代码块.非静态代码块.构造器,及继承父类时,它们的初始化顺序都是怎样的,下面我通过例子来说明这个情况,以免被人误导. 示例 ...