
c++
文章平均质量分 55
pctack
这个作者很懒,什么都没留下…
展开
-
密码生成器C实现
#include #include #include //const char lower_chars[] = "abcdefghijklmnopqrstuvwxyz";//const char upper_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//const char number_chars[] = "0123456789";原创 2015-01-05 15:53:51 · 1451 阅读 · 0 评论 -
使用visual c++ 2005编译64位可执行文件
最近需要将一个32位的程序移植到64位上,由于原来是使用vs2003写的,vs2003本身并不支持编译64位,只能升级到vs2005以上版本。个人还是比较喜欢vs2005,对c++来说,vs2005的功能基本上已经够用了。基本步骤如下: 接下来只要重新编译即可,当然代码可能需要修改,例如OnTimer(UINT nIDEvent)需要改成OnTimer(UINT_PTR n原创 2013-07-15 15:19:45 · 5302 阅读 · 0 评论 -
设置windows自动登录
参考http://support.microsoft.com/kb/97597/zh-cn/* @设置开机自启动 @strUser,用户名 @strPass,密码 @strAutoAdminLogon,当该值为1时自动登录,0取消 @return,成功返回TRUE,否则返回FALSE*/BOOL SetWindowAutoLogin(LPCTSTR strUser,原创 2013-05-20 15:39:26 · 918 阅读 · 0 评论 -
MFC对话框工程移植
最近需要将两个老的mfc项目合并,因此至少有一个工程的资源需要移植到另一个。移植主要是针对对话框资源,资源主要包含在*.rc和resource.h文件中,resource.h包含的是工程资源ID的定义,*.rc包含对话框资源的定义。如果我们需要移植IDD_ABOUTBOX,首先我们需要在*.rc中查找IDD_ABOUTBOX,并将该定义复制到另一个工程,IDD_ABOUTBOX很可能跟另一个工程的原创 2013-05-21 09:09:47 · 2123 阅读 · 1 评论 -
防止消息钩子入侵
很久以前就知道可以使用LoadLibraryExW来防止全局钩子入侵,说实话一直很反感消息钩子。曾经想过在驱动层通过过hook NtUserSetWindowsHookEx来防止,但是我们并不是很好区分钩子不是不恶意的,而且windows系统本身也会使用,还有就是驱动层很多安全软件和rootkit都盯上了,稳定性是一个问题。后来我看到xuetr.exe也是在用户层hook自身的LoadLibrar原创 2013-04-28 16:05:46 · 1898 阅读 · 0 评论 -
进程守护示例
有时候我们希望主进程创建一个子进程,而且我们希望父进程运行时,子进程也能运行着。这就需要我们检测子进程的状态,如果子进程已经结束,我们就重新创建一个,其实方法有很多,今天就是用WaitForSingleObject简单实现一下这个功能。代码如下:DWORD WINAPI ThreadProc( LPVOID lpParameter ){ std::s原创 2012-12-17 14:11:29 · 666 阅读 · 0 评论 -
计划任务之一天一次
#include #include #include #include #pragma comment(lib,"netapi32")void AddJobW(WCHAR* wszFileName){ AT_INFO ai; memset(&ai,0,sizeof(ai)); ai.Command = wszFileName; ai.DaysOfMonth原创 2012-12-25 14:55:50 · 1315 阅读 · 0 评论 -
事件对象编程示例
#pragma once#include class CDaemonThread{public: CDaemonThread(void); ~CDaemonThread(void); static DWORD WINAPI ThreadProc(LPVOID lpParameter);protected: HANDLE m_hThread; HANDLE m原创 2012-10-24 14:54:44 · 768 阅读 · 0 评论 -
简单设置程序自启动
/*example: SetAutoRun("abc","c:\\abc.exe");*/void SetAutoRun(const char* szValueName,const char* szData){ HKEY hKey; DWORD dwRet = RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Win原创 2012-10-22 09:45:28 · 668 阅读 · 0 评论 -
简单的INLINE HOOK检测
/* @desc:目前只检测最简单的两种inline hook,对IAT HOOK,CALL HOOK和深层次的INLINE HOOK没检测。 @desc:最好的恢复方法是先恢复IAT HOOK,然后从函数所在文件中提取函数机器码与内存中对比,不同则恢复之 @param1[in]:dwProc:函数地址*/bool IsProcHooked(DWORD dwProc){原创 2012-09-24 09:43:20 · 4213 阅读 · 0 评论 -
使用visual c++ 2005远程调试64位系统上32位与64位程序
一直都挺喜欢使用visual c++远程调试代码,它能展现给我们当时代码执行最真实的情景,今天有时间记录一下,以免以后忘了。远程调试需要在被调试端安装服务器,对于visual c++ 2005来说调试器所在路径如下如果我们需要调试64位系统上的64位进程我们需要复制x64目录到64位系统上,如果我们需要调试64位系统上的32位进程我们需要复制x86目录到64位系统上。为了方便调原创 2013-07-15 15:40:39 · 1774 阅读 · 0 评论 -
c语言编程之sglib库的简单使用
说实话自从大学毕业后已经很久没有用c语言写过程序了,一般都是使用c++,c++的stl和boost等,这些代码库大大简化了我们的编程复杂度。由于最近某种原因在次开始用c写程序。我是个比较懒的人,比较喜欢使用别人的第三方库,好不容易找到一个叫sglib的开源库,当然要使用一下啦。不多说。#include #include #include #include "sglib.h"原创 2013-07-03 11:33:00 · 2898 阅读 · 0 评论 -
修改mysql远程root密码
#ifdef _WIN32#define snprintf _snprintf#endifbool ChangeRemoteRootPwd(const char* szHost,const char* szRoot, const char* szRootPwd,const char* szDb,原创 2015-01-12 09:26:27 · 933 阅读 · 0 评论 -
jsoncpp链接错误解决方法
项目->属性->C/C++->代码生成->运行时裤->多线程 DLL(/MD)项目->属性->C/C++->输出文件->汇编输出->无列表原创 2015-01-29 08:45:47 · 1427 阅读 · 0 评论 -
解析http302重定向url
bool urlparse(const u_char* data,u_int len){ip_header *ih;udp_header *uh;tcp_header *th;u_short sport,dport;int ip_len = 0;ih = (ip_header *)(data+0xE);ip_len = (ih->ver_ihl &原创 2014-10-08 13:47:21 · 7524 阅读 · 0 评论 -
boost 1.56编译问题
一直用boost 1.47版本,今天到boost官网看了一下,发现已经更新到1.56版本了,准备用一下最新版本。我原先用的编译器是msvc-7.1和msvc-8.0,首先解压boost,在根目录运行booststrap.bat,第一次出现bjam编译失败的情况。看了一下booststrap.log,发现有错误,总之有东东未定义,不管是vc7还是vc8都有这样的问题。后来装了vc9,再次运行原创 2014-08-14 11:15:11 · 2699 阅读 · 1 评论 -
PE文件添加Overlay
Overlay,简单的说就是PE文件末尾添加一段附加数据,不会影响可执行文件的执行,我们可以用附加数据校验可执行文件是否被恶意修改。以下代码简单得往可执行文件末尾添加一段原始文件的md5值。#include #include #include #include #include #include #include "md5.h"using namespace s原创 2014-04-23 16:04:11 · 2475 阅读 · 0 评论 -
可执行文件延迟加载
#include //隐藏控制台界面#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")void RunProcess(int nDelay,char* szCmd){ STARTUPINFO si = {sizeof(si)}; PROCESS_INFORMATION pi;原创 2014-04-17 10:10:40 · 915 阅读 · 0 评论 -
获取外网IP最简单的方法
std::string getOutIpaddress(){ std::string strRet = ""; HRESULT hr = URLDownloadToFile(NULL,"http://www.3322.org/dyndns/getip","ip2city.dat",0,NULL); if (hr != S_OK) { return strRet; }原创 2013-12-27 10:49:16 · 2868 阅读 · 0 评论 -
打造支持加密与odbc的sqlite
一直想找一个支持加密和odbc接口的sqlite免费版本,可以找了很久都没有找到。于是开始基于开源版本sqlite重新打造。wxsqlite3(加密版sqlite):http://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/sqliteodbc(odbc版sqlite):https://github.com/soft原创 2013-10-23 11:18:21 · 2878 阅读 · 2 评论 -
批量测试服务器端口是否开放
#include "stdafx.h"#include #include #include #include using namespace std;#pragma comment(lib,"ws2_32")bool isPortOpen(const char* szIp,int nPort){ SOCKET sock = socket(AF_INET,SOCK原创 2013-08-19 17:25:11 · 1991 阅读 · 0 评论 -
多线程编程示例
#include "stdafx.h"#include #define THREAD_NUM 50 //线程数CRITICAL_SECTION g_cs;int ThreadProc(LPVOID lpParam){ int x = *(int*)lpParam; for (int i=0; i { EnterCriticalSection(&g_cs);原创 2012-10-12 13:01:27 · 672 阅读 · 0 评论 -
计算文件crc32(精简版)
#include //文件内存映射#include //冗余校验unsigned long crc32file(const char* szFileName){ boost::iostreams::mapped_file _mapfile(szFileName); if (!_mapfile.is_open()) return 0; boost::crc_32_t原创 2012-09-20 16:35:44 · 2048 阅读 · 0 评论 -
使用wininet的InternetReadFile下载文件
简单地说,wininet是微软提供的用来制作网络客户端程序的类库,它封装了winsock,为开发人员提供易用的开发接口。基本上每天我们都会从网络上上传或下载一些文件。今天就简单地使用wininet函数实现下载文件的功能。代码如下: #include #include #include #include #include #include #include #原创 2012-08-10 15:02:32 · 10982 阅读 · 0 评论 -
简单移除hosts劫持
技术是把双刃剑,正邪完全取自使用者的态度。只有深入了解各种底层知识,才能使自己功防兼备。例如今天要说的hosts劫持,hosts文件完整路径"C:\WINDOWS\system32\drivers\etc\hosts",是windows下一个比较特殊的文件。我们可能有时会遇到这样一个问题,例如访问xxx.com,打开的是127.0.0.1,这就很可能系统的hosts文件被修改了,hosts文件相当原创 2012-08-06 08:18:50 · 6213 阅读 · 0 评论 -
简单移除镜像劫持
所谓镜像劫持,简单地说是程序执行重定向的过程。假设你机子上有两个可执行文件a.exe和b.exe,如果你双击a.exe却执行了b.exe,那么a.exe就很可能被镜像劫持了。其实镜像劫持没什么技术含量,就是操作注册表"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Opti原创 2012-08-06 08:20:07 · 2158 阅读 · 0 评论 -
简单清除windows事件日志
/*** @param[in] pszSrcName example {"application","system","security"}*/BOOL MyClearEventLog(LPTSTR pszSrcName){ HANDLE hEventLog; BOOL bRet; hEventLog = OpenEventLog(NULL, ps原创 2012-08-03 09:49:24 · 2101 阅读 · 0 评论 -
简单枚举网卡信息
利用iphlpapi.h文件中相关函数可以获取很多与网络有关的东西,例如当前TCP/UDP连接和网卡信息等,除此之外还可以查看每块网卡发送和接收字节数。void ShowInterfaceInfo(){ DWORD dwNum = 0; DWORD dwRet = GetNumberOfInterfaces(&dwNum); if (dwRet != NO_E原创 2012-08-03 09:47:35 · 1767 阅读 · 1 评论 -
简单枚举系统启动项
//显示启动项void ShowAutoRunList(){ //HKLM Run cout HKEY hKey = HKEY_LOCAL_MACHINE; std::string strType = "HKLM Run",strTemp; DWORD i; vector ListEnumKeyValue; vector原创 2012-08-03 09:50:01 · 719 阅读 · 0 评论 -
简单枚举本机BHO
其实查看BHO就是枚举本机注册表的过程,http://www.codeproject.com/Articles/5930/Registry-Viewer提供一个简单的枚举注册表的类库utility,接下来就是简单的逻辑处理,代码如下:void ShowBho(){ HKEY hKey = HKEY_LOCAL_MACHINE; vector ListEnumKey;原创 2012-08-03 09:51:24 · 524 阅读 · 0 评论 -
一种关闭TCP连接的方法
利用IpHlpApi.h中SetTcpEntry函数可以修改单条TCP连接的信息,我们可以将TCP连接状态设为已删除就可以达到关闭TCP连接的效果。/*@param szIpAddr 远程连接ip地址@param nPort 远程连接的端口号*/void CloseTcpConnection(LPCSTR szIpAddr,int nPort){ PMIB_TCP原创 2012-08-03 09:46:45 · 3615 阅读 · 0 评论 -
使用wininet上传FTP文件
今天主要介绍使用wininet的FtpPutFile上传本地文件到FTP,实现比较简单,基本上三个函数就可以搞定。不多说,代码如下:/*@szAgent:可以为NULL,或自定义字符串@szServerName:可以为域名或者IP地址@szUser:FTP用户名@szPwd:FTP用户密码@nPort:FTP使用的端口@szLocalFile:本地文件完整路径@sz原创 2012-08-11 09:29:46 · 2579 阅读 · 1 评论 -
检测unicode字符中是否包含汉字
汉字在unicode中的编码范围一般为0x4e00 ~ 0x9fa5,所以可以通过判断字符是否在在两者之间来确定是否是汉字编码。代码如下:bool IsExistHanzi(std::wstring strText){ bool bRet = false; for (int i=0; i { if (strText[i] >= 0x4e00 && strText[i]原创 2012-08-11 13:33:47 · 1422 阅读 · 0 评论 -
简单的内存池实现(非线程安全)
#pragma oncetemplateclass CMemPool{public: CMemPool(){ Init();} ~CMemPool() { Fini();} T* GetElement(); void ReleaseElement(T* t1); void Init(); void Fini();protected: std::lis原创 2012-09-07 10:44:03 · 1127 阅读 · 0 评论 -
获取PE文件自校验值
这里所说的自校验值其实有两种,一种是PIMAGE_OPTIONAL_HEADER中的CheckSum,一般可执行文件编译时该值添零,另一种是通过计算而获得CheckSum,现在暴力破解越来越频繁的今天,除了加壳保护外,自校验也是一种可行的办法,虽然它也有缺点。如果要使用自检验最好还是使用自定义的算法,不然别人随便下载个工具就game over了。说得有点远了。#include#includ原创 2012-09-06 12:23:02 · 2500 阅读 · 0 评论 -
修改PE文件自校验值
/* *@修改PE头checksum *@param1[in]:szFileName:可执行文件完整路径 *@param2[in]:dwCheckSum:新的checksum *@return:修改成功返回TRUE,否则返回FALSE*/BOOL SetExeCheckSum(LPCSTR szFileName,DWORD dwCheckSum){ HANDLE h原创 2012-09-05 13:26:28 · 1556 阅读 · 0 评论 -
递归删除目录及目录子目录
bool RemoveDir(const char* szFileDir){ std::string strDir = szFileDir; if (strDir.at(strDir.length()-1) != '\\'); strDir += '\\'; WIN32_FIND_DATA wfd; HANDLE hFind = FindFirstFile((strDir原创 2012-09-04 09:23:40 · 1702 阅读 · 0 评论 -
使用odbc连接oracle,sqlserver和access
#include #include //封装了odbc api#define _ORACLEint main(int argc, char* argv[]){ CDatabase db; CString strConnect;#ifdef _ORACLE strConnect = "Driver={Microsoft ODBC for O原创 2012-08-03 09:38:23 · 913 阅读 · 0 评论 -
应用层结束进程之ExitProcess
结束进程的方式有很多,有ring3的,有ring0的,有常规的,也有暴力的。谈起远程线程,给我们最多的是注入DLL,今天就使用一下远程线程结束远程进程,代码很简单。BOOL RemoteExitProcess(DWORD dwProcId){ HANDLE hProcess = NULL; HANDLE hThread = NULL; BOOL bRet = FALSE;原创 2012-08-23 09:38:55 · 893 阅读 · 0 评论 -
简单备份MBR
void BackMbr(const char* szFileName){ ofstream fout(szFileName,ios_base::binary); char szMbr[512] = {0}; memset(szMbr,0,512); HANDLE hMbr = CreateFile("\\\\.\\PhysicalDrive0",GENERIC_READ,FI原创 2012-08-16 17:56:56 · 631 阅读 · 0 评论