EnhanceFunc__增强函数集
想将经常用到的功能函数写在一起,花时间精心维护,然后以后就用起来就舒服很多了
目前就写了进程调试权限,远程线程注入,远程线程释放这三个函数.还有很多功能,以后慢慢加
// 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__增强函数集的更多相关文章
- C语言通用双向循环链表操作函数集
说明 相比Linux内核链表宿主结构可有多个链表结构的优点,本函数集侧重封装性和易用性,而灵活性和效率有所降低. 可基于该函数集方便地构造栈或队列集. 本函数集暂未考虑并发保护. 一 ...
- Linux字符串函数集
//Linux字符串函数集: 头文件:string.h 函数名: strstr 函数原型:extern char *strstr(char *str1, char *str2); 功能:找出str2字 ...
- 使用Word API打开Word文档 ASP.NET编程中常用到的27个函数集
使用Word API(非Openxml)打开Word文档简单示例(必须安装Word) 首先需要引入参照Microsoft.Office.Interop.Word 代码示例如下: public void ...
- makefile 函数集
1 if 函数 语法 $(if CONDITION,THEN-PART[,ELSE-PART]) 功能 第一个参数"CONDITION",在函数执行时忽略其前导和结尾空字符,如果包 ...
- javascript string 函数集
JavaScript_String对象说明 string中文为"字符串"的意思,String继承自Object对象,此对象提供字符串的查找操作等函数 JavaScript字符串类型 ...
- [转]js中获取时间的函数集
$(function(){ var mydate = new Date(); var t=mydate.toLocaleString(); $("#time").text(t); ...
- PHP 通用检测函数集
// ※CheckMoney($C_Money) 检查数据是否是99999.99格式 // ※CheckEmailAddr($C_mailaddr) 判断是否为有效邮件地址 // ※CheckWebA ...
- php常用函数集
网络请求: /** * 发起HTTPS请求 */ function curl_post($url,$data=null,$header=null,$post=0) { //初始化curl $ch = ...
- JS判断字符串是否为空、过滤空格、查找字符串位置等函数集
这是一个由网上收集的JS代码段,用于判断指定字符串是否为空,过滤字符串中某字符两边的空格.查找指定字符串开始的位置.使用IsFloat函数判断一 个字符串是否由数字(int or long or fl ...
随机推荐
- SQL 在表中插入
SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录. SQL ...
- 【基础】Pipeline
1. 参考的优秀文章 Request/Response protocols and RTT 2. 来源 原来,系统中一个树结构的数据来源是Redis,由于数据增多.业务复杂,查询速度并不快.究其原因, ...
- 重新开始学习C++
从2002年,大二的那个夏天开始,就接触了C++这门语言,大学那会就是在老师不停教育下,背诵C++的各种特征,完全不知道C++干嘛用的,当然自然也是不知道汇编语言,C语言是干嘛用的,老师让学就学吧.那 ...
- C++ STL(一)介绍及string
STL: C++标准模板库的简称,它是C++的一部份.标准C++库的所有的标识符都是在一个名为std的命名空间中定义的 在使用STL中相关模板时,需要包含相关头文件,然后using namespace ...
- Jquery轻量级插件--操作URL
调用: > "?action=view§ion=info&id=123&debug&testy[]=true&testy[]=false ...
- HDU-4825 Xor Sum(字典树求异或最大值)
题目链接:点此 我的github地址:点此 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整 ...
- linux浏览器,邮件客户端,输入法,双屏设置,应用软件,gnome-screenshot/scrot -s截图,office
搜狗输入法linux版:http://pinyin.sogou.com/linux/help.php win/linux同时支持比较好用的浏览器:maxthon,firefox,maxthon,ope ...
- JAVA中HashMap相关知识的总结(一)
Java中HashMap在jdk1.7和jdk1.8中的区别点: 在jdk1.7中是用数组+链表形式存储,1.8采用数组+链表/红黑树形式 Jdk1.8中由链表转为红黑树是长度大于8,由红黑树转为链表 ...
- SPSS聚类分析:K均值聚类分析
SPSS聚类分析:K均值聚类分析 一.概念:(分析-分类-K均值聚类) 1.此过程使用可以处理大量个案的算法,根据选定的特征尝试对相对均一的个案组进行标识.不过,该算法要求您指定聚类的个数.如果知道, ...
- 利用爬虫爬取指定用户的CSDN博客文章转为md格式,目的是完成博客迁移博文到Hexo等静态博客
文章目录 功能 爬取的方式: 设置生成的md文件命名规则: 设置md文件的头部信息 是否显示csdn中的锚点"文章目录"字样,以及下面具体的锚点 默认false(因为csdn中是集 ...