
C++功能函数
(-: LYSM :-)
这个作者很懒,什么都没留下…
展开
-
[C++] 异或加密
std::string Encrypt(std::string content, std::string secretKey){ for (int i = 0; i < content.length(); i++) { content[i] ^= secretKey[i % secretKey.length()]; } return content;}std::string Decrypt(std::string data, std::str.原创 2021-07-29 15:13:41 · 555 阅读 · 0 评论 -
[C++功能函数] 判断文件&目录是否存在
代码/* 需要引入头文件 #include <io.h> 存在返回 true ,不存在返回 false*/BOOL isFileOrDirExist(PCHAR name){ return _access(name, 0) == 0 ? TRUE : FALSE;}原创 2021-07-05 14:50:53 · 253 阅读 · 0 评论 -
Sunday算法实现内存快速搜索特征码(支持带问号)
效果图:代码:#include<Windows.h>#include<iostream>#include<vector>#include<time.h> using namespace std; #define BLOCKMAXSIZE 409600//每次读取内存的最大大小BYTE* MemoryData;//每次将读取的内存读入这里short Next[260]; //特征码转字节集WORD GetTzmArray(char*转载 2020-11-09 16:31:38 · 1421 阅读 · 0 评论 -
CreateFileMapping 共享内存
背景共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信。因为是通过内存操作实现通信,因此是一种最高效的数据交换方法。函数 API// 创建一个内存映射文件的内核对象HANDLE CreateFileMapping( HANDLE hFile, // 文件句柄,填写 INVALID_HANDLE_VALUE LPSECURITY_ATTRIBUTES lpFileMappingAtt原创 2020-09-21 20:22:43 · 1171 阅读 · 0 评论 -
使用 SEH 让进程崩溃的更加体面,并记录崩溃信息
代码#include <windows.h>#include <DbgHelp.h>#include<string.h>#include<iostream>#pragma comment( lib, "Dbghelp.lib" )using namespace std;void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS* pException){ //原创 2020-09-06 19:42:49 · 305 阅读 · 0 评论 -
C++ 枚举进程中的线程
CreateToolhelp32SnapshotHANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(hProcessSnap == INVALID_HANDLE_VALUE){ cout << "创建进程快照失败" << endl; return FALSE;}PROCESSENTRY32 process = {sizeof(PROCESSENTRY32)}; for(Proc原创 2020-09-01 14:40:08 · 1144 阅读 · 0 评论 -
C++ 判断系统位数(32/64),判断进程位数(32/64)
BOOL Is64BitOS(){ typedef VOID (WINAPI *LPFN_GetNativeSystemInfo)( __out LPSYSTEM_INFO lpSystemInfo ); LPFN_GetNativeSystemInfo fnGetNativeSystemInfo = (LPFN_GetNativeSystemInfo)GetProcAddress( GetModuleHandleW(L"kernel32"),"GetNativeSystemInfo");转载 2020-09-01 10:13:03 · 846 阅读 · 0 评论 -
ini配置文件的读写
背景在安装一些应用程序的时候,我们经常可以其安装目录下看到有 .ini 格式的配置文件,这种格式配置文件是我们比较常见的。在我们自己电脑的系统上也会有,而且还很多。很多系统自带的程序,都会有一个 .ini 格式的配置文件。为此,Windows还特地提供了相应的WIN32 API函数去对 .ini 格式的配置文件进行读写操作。函数介绍// 将一个字符串复制到INI文件的指定的字段中// 如果函数成功将字符串复制到初始化文件,则返回值不为零。BOOL WINAPI WritePrivateProfi转载 2020-06-30 23:51:32 · 1036 阅读 · 0 评论 -
C++ AdjustTokenPrivileges 提升访问令牌权限
背景在我们编程实现一些系统操作的时候,往往要求我们执行操作的进程拥有足够的权限方可成功操作。比如,我们使用 ExitWindows 函数实现关机或重启操作的时候,就要求我们的进程要有 SE_SHUTDOWN_NAME 的权限,否则,会忽视不执行操作。这时,我们唯一能够做的,就是按照要求,提升我们进程的权限。函数介绍/* 打开与进程关联的访问令牌。 如果函数成功,则返回值不为零。*/ BOOL WINAPI OpenProcessToken( _In_ HANDLE转载 2020-06-30 18:45:47 · 3435 阅读 · 0 评论 -
C++ 修改指定进程 PEB 中路径和命令行信息实现进程伪装
背景所谓的进程伪装,指的修改任意一个指定进程的信息,是它的信息在系统中的显示是另一个进程的信息,这样看来,指定的进程就像是被伪装的进程一样,因为进程信息相同,但实际上,它还是原来的进程,做着原来的进程操作。函数介绍NtQueryInformationProcess NTSTATUS WINAPI NtQueryInformationProcess( _In_ HANDLE ProcessHandle, // 要获取信息的进程的句柄。转载 2020-06-24 16:34:52 · 3051 阅读 · 2 评论 -
c++ 在内存中加载 exe/dll (不使用CreateProcess、LoadLibrary 等 API)
背景在网上搜索了很多病毒木马的分析报告,看了一段时间后,发现还是有很多病毒木马都能够模拟PE加载器,把DLL或者是EXE等PE文件,直接从内存中直接加载到自己的内存中执行,不需要通过API函数去操作,以此躲过一些杀软的检测。程序实现原理首先,在EXE文件中,根据PE结构格式获取其加载映像的大小SizeOfImage,并根据SizeOfImage在自己的程序中申请一块可读、可写、可执行的内存,那么这块内存的首地址就是EXE程序的加载基址然后,根据EXE中的PE结构格式获取其映像对齐大小Section转载 2020-06-24 15:39:46 · 5837 阅读 · 9 评论 -
C++ 提权
BOOL EnableDebugPrivilege() { HANDLE hToken; BOOL fOk = FALSE; if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) { TOKEN_PRIVILEGES tp; tp.PrivilegeCount = 1; LookupPrivilegeValue(NULL, SE_原创 2020-06-03 16:23:46 · 1844 阅读 · 0 评论 -
C++ 遍历托盘图标
大概意思就是获取它们的各种信息 ????代码:// Test_Console_3.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <windows.h>#include <string>#include <commctrl.h>#include <a...原创 2020-03-04 19:02:54 · 1254 阅读 · 0 评论 -
C++ 计算文件指定位置 rof,再计算 vaof
功能代码:int get_PE_feature_rof(string path_r,int codeArr[],int codeCtrl[],int len){ // 打开文件 ifstream in = ifstream(path_r, ios::binary); if (!in.is_open()){ cout << "文件打开失败:" << GetLa...原创 2020-02-24 14:12:08 · 366 阅读 · 0 评论 -
C++ 打开外部程序
1. WinExecint main(){ /* WinExec 1.#include <Windows.h> 2.某些 exe 如果不使用管理员权限运行 VS 则会报 740 错误 */ WinExec("E:\\MyToolBar\\Programming\\取色器.exe", SW_SHOWNORMAL); cout << "取色器 GetLas...原创 2020-01-23 23:52:48 · 2731 阅读 · 1 评论 -
C++ 获取快捷方式目标路径
代码:string getLnkFormPath(wchar_t *lnkPath){ // 初始化 string sRet; wchar_t wRet[MAX_PATH]; // 初始化 COM 库 CoInitialize(NULL); IPersistFile* pPF = NULL; // 创建 COM 对象 HRESULT hr = CoCreateInstan...原创 2020-01-22 17:22:27 · 2120 阅读 · 6 评论 -
C++ 获取系统文件夹路径
比如获取桌面路径: // 需要 #include <Shlobj.h> char path[255]; SHGetSpecialFolderPath( NULL, // 保留 path, // 接受文件路径的字符串指针 CSIDL_DESKTOPDIRECTORY, // CSIDL 宏 FALSE // 如果文件夹不存在,...原创 2020-01-22 14:29:06 · 4032 阅读 · 0 评论 -
C++ 遍历设备
最近需要对一个加密狗进行检测,设备信息如下:看到 HID#Vid_3689&Pid_8762 这一段,觉得可以先遍历所有的设备:然后再筛选出里面所有的 HID 类型的设备:最后判断这个设备的 Pid 和 Vid 是否和黑名单匹配。下面是代码:// Test_Console.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includ...原创 2020-01-20 17:45:28 · 1077 阅读 · 0 评论 -
C++ 读取文件 16 进制数据
#include "stdafx.h"#include <iostream>#include <Windows.h>#include <iomanip>#include <fstream>#include<cstdlib>#include<string>using namespace std;char HE...原创 2019-12-27 11:31:27 · 5876 阅读 · 1 评论 -
C++ 结束递归
今天碰到了一个问题,我打算递归遍历整个 Windows 目录,找 后缀名为 .pf 的文件,如果找到了一个符合要求的文件就返回。下面是我最初的代码:void findAllFile_cs(const char * path,const char * format,string &pfPath){ // 路径末尾追加 '\*.*' char newpath[200]; st...原创 2019-12-21 18:16:16 · 3200 阅读 · 0 评论 -
C++ 获取 PE 文件导出表
// 内存偏移转文件偏移int rva_to_raw(PIMAGE_SECTION_HEADER pSection,int nSectionNum,int nRva){ int nRet = 0; // 遍历节区 for (int i=0;i<nSectionNum;i++){ // 导出表地址在这个节区内 if (pSection[i].VirtualAddress &...原创 2019-12-16 16:01:16 · 1235 阅读 · 0 评论 -
C++ 获取系统版本
float getSysVersion(){ float f_ret; typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*); DWORD dwMajor, dwMinor, dwBuildNumber; NTPROC proc = (NTPROC)GetProcAddress( LoadLibrary("ntdll.dll"...原创 2019-12-16 09:56:03 · 1428 阅读 · 0 评论 -
C++ 获取自身函数内存地址附近的字节码
// 存放字节码的字符串string code;// 获取函数地址开始向后 32 字节大小的字节码for(int i=0;i<32;i++){ code+=to_string((int)*((UCHAR*)你的函数名+i)); code+=",";}// 打印cout << code << endl;...原创 2019-12-05 18:19:39 · 853 阅读 · 0 评论 -
C++ 输出日志到 DbgView
首先感谢木杉老哥对 OutputDebugString 的封装,解决了日志信息不能直接打印变量的问题,代码简单易懂,解决了我的困难。新建一个头文件,log.h:#ifndef _DEBUGPRINTF_H_ #define _DEBUGPRINTF_H_ #include<Windows.h> #include <tchar.h> ...转载 2019-11-20 17:29:13 · 1727 阅读 · 0 评论 -
C++ CreateThread 线程函数传参
HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, // 内核对象的安全属性,一般传入NULL _In_ SIZE_T dwStackSize, // 线程栈空间大小,传入0表示使用默认大小 _I...原创 2019-11-13 17:18:27 · 2936 阅读 · 1 评论 -
C++ 进程遍历(最简单)
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);PROCESSENTRY32 process = {sizeof(PROCESSENTRY32)};while (Process32Next(hProcessSnap,&process)){ cout << process.szExeF...原创 2019-07-30 15:39:20 · 1273 阅读 · 0 评论 -
C++ 递归遍历文件夹内的所有文件
递归遍历文件夹,对比文件 md5首先,需要引用 md5 的相关代码,参考这篇文章防止链接内容被删除,这里再记录一次:md5.h #ifndef MD5_H #define MD5_H #include <string> #include <fstream> /* Type define */ typedef unsi...原创 2019-10-25 10:56:46 · 1564 阅读 · 0 评论 -
C++ 创建、解析快捷方式
#include <iostream>#include <ShObjIdl.h>#include <strsafe.h> using namespace std; #define TARGET TEXT("C:\\WINDOWS\\system32\\shell32.dll") // 快捷方式链接目标#define LNKFILE L"exampl...转载 2019-10-25 09:53:55 · 869 阅读 · 0 评论 -
C++ 获取当前时间
字符串时间: time_t t = time(0); char now[64]; strftime( now, // 接收时间的字符串 sizeof(now)-1, // 被复制到字符串的最大字节数 "%Y-%m-%d %H:%M:%S", // 输出时间的格式(年月日时分秒) localtime(&t) // 指向 tm 结构...原创 2019-10-23 10:04:30 · 793 阅读 · 0 评论 -
C++ 读写注册表
读注册表 // 初始化 HKEY hKey_return = NULL; // 打开注册表失败 if(ERROR_SUCCESS != RegOpenKeyEx( HKEY_LOCAL_MACHINE, // 注册表根键句柄(也可以是 HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_USERS、HKEY_CURRENT_CONFIG) 去...原创 2019-10-21 15:46:30 · 647 阅读 · 1 评论 -
C++ FILE 读写文件
FILE 类结构:struct _iobuf { char *_ptr; // 文件输入的下一个位置 int _cnt; // 当前缓冲区位置 char *_base; // 文件起始位置 int _flag; // 文件标志 int _file; // 文件有效性验证 ...原创 2019-10-16 19:35:29 · 6048 阅读 · 0 评论 -
C++ 获取某进程中某模块的入口地址(也是 PE文件头 地址)
HMODULE GetProcessModuleHandle(DWORD pid, CONST TCHAR* moduleName){ // 根据 PID 、模块名(需要写后缀,如:".dll"),获取模块入口地址。 MODULEENTRY32 moduleEntry; HANDLE handle = NULL; handle = ::CreateToolhelp32Sna...原创 2019-08-02 09:07:16 · 5561 阅读 · 0 评论 -
C++ Hook 键盘记录器
之前写外挂做过指定进程的 Hook,但是没有尝试过全局 Hook,所以今天就来试试。全局 Hook 的用途我第一个就想到了键盘记录器(貌似我也就想到了这个 哈哈),那就写一个吧。 步伐逐渐鬼畜…先上效果图(没图没真相,我看别人的博客都喜欢上来先看图,木哈哈 ~) U•ェ•*U然后就是代码,我代码有点多,但是都有注释(注释就是艺术!)其实也不多,就是 switch case 占了很大的比例...原创 2019-08-08 10:16:46 · 6480 阅读 · 7 评论 -
C++ 获取 PE 文件的各种信息
首先感谢 cyxvc 老哥,他的代码可读性超高,精简有用以理解,我找这方面的资料好久了,这篇文章对我帮助很大。参考代码:#include "stdafx.h"#include <Windows.h> extern void DirectoryString(DWORD dwIndex); int _tmain(int argc, _TCHAR* argv[]){ //获...转载 2019-08-05 16:28:52 · 2507 阅读 · 1 评论 -
C++ 遍历驱动列表(应用层下)
上代码咯 ~#include "stdafx.h" #include <stdio.h>#include <windows.h>#include <Psapi.h>#include <shlwapi.h> //PathFileExists#pragma comment(lib, "psapi.lib")#pragma comme...原创 2019-07-23 15:44:34 · 1083 阅读 · 0 评论 -
C++ 获取进程所在目录(全路径)
定位某个进程(比如 QQMusic.exe)所在的全路径,下面是代码:string GetProcessInfo(HANDLE hProcess,char* processName){ PROCESSENTRY32* pinfo = new PROCESSENTRY32; //进程信息 (pinfo->dwSize = sizeof(PROCESSENTRY32);) MODULEE...原创 2019-08-05 09:07:16 · 5784 阅读 · 1 评论 -
C++ 定位文件 .text 区段地址
首先声明,.text 区段的起始地址是需要计算的,无论是哪个结构体里都不会直接提供某个区段的直接地址(虚拟内存地址),我就是因为想偷懒所以翻了好久的结构体成员列表,结果头都翻炸了还是没找到, !!!∑(゚Д゚ノ)ノ计算过程:1.先看 IMAGE_DOS_HEADER STRUCT 这个结构体,它有一个成员 e_lfanew 指向了 NT 头。(e_lfanew = 0x100,固定不变)2...原创 2019-08-04 20:48:13 · 1046 阅读 · 0 评论 -
C++ HOOK 全局 API (MessageBox 为例)
全局 Hook 不一定需要用到 Dll ,比如全局的鼠标钩子、键盘钩子都是不需要 Dll 的,但是要钩住 API,就需要 Dll 的协助了,下面直接放上 Dll 的代码:(注意这里使用的是 MFC DLL)// Test_Dll(mfc).cpp : 定义 DLL 的初始化例程。//#include "stdafx.h"#include "Test_Dll(mfc).h"#ifdef...原创 2019-08-10 18:21:43 · 2990 阅读 · 0 评论 -
C++ IAT HOOK(MessageBoxW 为例)
最近在研究各种姿势的 HOOK,虽然 HOOK 这个东西已经是很久之前就有的技术了,但好在目前应用仍然很广泛,所以老老实实肯大佬们 10 年前啃过的骨头 …下面是庄重的代码献祭时刻 ——首先 IAT HOOK 需要使用 DLL , 这里有两个项目工程,一个是 MFC窗体应用(用来测试),一个是我们的 DLL (主要功能)。DLL 代码:注释很全,尔等不可能看不懂// dllmain.c...原创 2019-08-15 12:54:23 · 1073 阅读 · 2 评论 -
C++ 获取线程入口地址、所在模块
大多数恶意代码为了隐藏自己的行踪都会附加到某个进程中,在这个进程内申请一块内存区域来存放它的代码,毕竟隐藏的再好,代码也要有的,不然你让 CPU 运行什么 …今天检测的特征是向 YY语音 里插入了一段自己的代码(创建了新的线程),而这个新的线程不在原有的模块内,所以思路就是遍历 YY.exe 这个进程中的所有线程,如果这个线程没有对应的模块,那么就说明这个线程是可疑的。准备工作:#prag...原创 2019-08-20 14:57:14 · 4381 阅读 · 7 评论