
VC/C/C++
文章平均质量分 60
W1nds
每天进步一点点。
展开
-
C标准库的setlocale()用法笔记
C 和 C++ 的标准库分别有自己的 locale 操作方法,C 标准库的 locale 设定函数是 setlocale(),而 C++ 标准库有 locale 类和流对象的 imbue() 方法。这篇是我自己的 setlocale() 使用总结。Linux的glibc中的s转载 2011-09-02 09:24:59 · 1254 阅读 · 0 评论 -
关于SSDT HOOK取消内存写保护的问题
有些人说不去掉也不会蓝屏,照样能HOOK成功确实,我当时也是这样过。。。不过拿给别人机器一测试就蓝了网上找到了MJ给出的答案:当使用大页面映射内核文件时,代码段和数据段在一块儿,所以页必须是可写的,这种情况下直接改是没有问题的HKEY_LOCAL_MA原创 2011-10-02 15:49:54 · 4639 阅读 · 0 评论 -
关于OpenCV开发的程序不能在其他电脑上运行的问题
其实就是程序部署的问题基于OpenCV的程序部署起来需要一些额外的操作。下面列出了OpenCV必要的运行时文件其中,加粗部分是特别重要的,几乎每个基于OpenCV的程序都会用到的。其它的是根据使用的库和框架选择的。(1)OpenCV的DLL位于安装路径原创 2011-10-05 18:47:23 · 5779 阅读 · 1 评论 -
简简单单,做自己的视频加密软件
昨天刚开始学习OpenCV,老师要求的挖,两天完成个视频加密的小东东,还好在学长的帮助下搞定了,其实相当Easy贴下主要代码:VOID EncryptVideo(char * szPath,char *outputPath,int key,BOOL原创 2011-10-05 18:56:22 · 3547 阅读 · 4 评论 -
局部变量,局部静态变量,全局变量,全局静态变量分别
c++内存到底分几个区?一: 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由os回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是转载 2011-10-25 15:20:36 · 1238 阅读 · 2 评论 -
关于VS2008debug编译下函数名字就是函数地址的问题
今天写个程序,自定义了一个函数void Func();然后DWORD dwStart=(DWORD)Func;调试监视 dwStart与Func两值不同拿到OD里看了下发现是这样的0062D7D3 . /E9 68050100 JMP demo.0063DD40原来debug版本的地址都是A:jmp BB:Func()。dwStart原创 2011-11-16 19:34:29 · 1784 阅读 · 0 评论 -
__declspec(naked) 生成纯汇编使用方法
__declspec(naked)是用来告诉编译器函数代码的汇编语言为自己的所写,不需要编译器添加任何汇编代码,通俗说可生成纯汇编。使用方法:#define NAKED __declspec(naked)VOID NAKED MyFunc(){ __asm { ret }}1,使用 naked 关键字必须自己构建 EBP 指针 (如果用到了的话);2,原创 2011-10-31 22:21:04 · 5832 阅读 · 1 评论 -
xp/win7 win32k kernel 0day
目前还是ODay,转自DEBUGMAN老外今天公布的,改了一下XP的可以支持任意权限用户触发建立一个名为1123的user权限用户运行可触发~(不是老外,翰海源的instruder公布的。XP下没对文件句柄做任何检测,所以 lpLayoutFile 只要是任何一个可以写入的地址都可以。win7里面还会限定这个句柄只能是windows/system32下的文件。)//原创 2011-11-25 19:20:10 · 1349 阅读 · 0 评论 -
读IDTR与GDTR的值
转自油条智辅论坛#include "stdafx.h"#include int _tmain(int argc, _TCHAR* argv[]){ char idtr[6]={0}; char gdtr[6]={0}; SetThreadAffinityMask(GetCurrentThread(),1); __asm { sidt idtr sgdt转载 2011-11-12 11:42:48 · 12899 阅读 · 1 评论 -
对数组名取地址与数组名
可以调试看下会发现两者的值是相同的。int array[100];关于对数组名取地址的问题,由于数组名是右值,本来&array 是不合法的,早期不少编译器就是指定&array 是非法的,但后来C89/C99认为数组符合对象的语义,对一个对象取地址是合理的,因此,从维护对象的完整性出发,也允许&array 。只不过,&array 的意义并非对一个数组名取地址,而是对一个数组对象取地址,也正因原创 2011-12-15 17:12:09 · 1621 阅读 · 0 评论 -
关于VS2008调试时加载符号缓慢的问题
用VS调试程序的时候有时总是提示要加载符号然后等好长时间,本来程序老出错就烦,调试卡个半天等的蛋都碎了,以前在论坛发过帖子也没人甩,今天终于找到了解决方法。在VS2008的安装目录的IDE文件夹下(我机器上是F:\DevelopTools\VS2008\Common7\IDE)新建一个symsrv.ini文件,我们可以在里面设置想要排除的文件。因为我全都不想加载,所以就*.*,文件内容如下:原创 2012-02-16 23:10:54 · 9036 阅读 · 4 评论 -
关于伪句柄
一、什么是伪句柄在使用很多函数的时候,我们都需要获得一个对象的句柄,而某些函数返回的是伪句柄。伪句柄本身不会打开内核对象的句柄表,因此内核对象的使用计数就不会增加。它本身就只指向调用它的主调进程或线程。会因为调用者的不同而改变,比如:调用者A使用一个伪句柄,这个句柄指向调用者A,而调用者A将该句柄传递给调用者X,则这个句柄就指向调用者X。我们可以通过调试的方式查看伪句柄,可以得知,进程的伪转载 2012-03-28 15:15:56 · 3090 阅读 · 0 评论 -
过QQ游戏大厅的SX保护
早些时间看郁金香的教程,写过qq游戏练练看的挂,那时候CE附加QQ游戏大厅的时候貌似是没有任何保护的,昨天舍友让做个斗地主的记牌器,但是,我用CE附加的时候,被检测到了,其实不附加也会被检测,所以猜测可能只是检测窗口进程或是模块名称啥的吧,被检测到的时候主程序会退出,但是那个对话框还在,就是那个SX什么什么的,所以如果是QQgame启动了某个线程来检测非法的话,在主程序退出其他线程对象都释放掉的时原创 2012-03-13 15:42:05 · 9480 阅读 · 8 评论 -
由远程线程注入代码引出来的一些问题
昨天小平同学在写一个远程线程注入代码的程序,他注入成功了,能弹出对话框,但是点击确定之后被注入的程序会崩溃掉,我记得自己以前写过是没有问题,但是我是拿VC6写的,调试了一下他的程序,发现原因是向目标进程地址空间中writeprocessmemory的时候,把call checkesp也写进去了,这玩意就是用来检验ESP在函数体中是否被改变,但是这些检验函数的地址在不同PE文件中有可能是不一样的。我原创 2012-03-19 13:52:25 · 6092 阅读 · 1 评论 -
vc对话框程序运行时隐藏
1、在资源编辑中设置对话框为不可见 2、在OnPaint中加入下面代码 void CMyDlg::OnPaint() { static b = false; if(!b){ ShowWindow(SW_HIDE); b = true; return; } // //其他代码 }转载 2012-10-12 09:40:06 · 3027 阅读 · 0 评论 -
静态编译sqlite3
文件添加进去选择编译为静态lib就可以了如果使用时出现冲突注意工程 跟 编译lib时的 运行时库设置要一致 否则出现error link:2005错误好久没更了。日原创 2013-07-23 10:23:30 · 3564 阅读 · 0 评论 -
微信聊天内容解密终于搞定了。。。
在某牛的帮助下,终于搞定了。。原创 2013-10-17 17:56:52 · 17956 阅读 · 10 评论 -
关于虚表
一般会在rdata段,固定的偏移地址,所以可以直接定位,拿来hook。原创 2014-08-15 13:43:26 · 3005 阅读 · 0 评论 -
驱动程序中重载new与delete
全局重载跟类中重载//全局new操作符void * __cdecl operator new(size_t size,POOL_TYPE PoolType=PagedPool){ KdPrint(("global operator new\n")); KdPrin原创 2011-09-29 14:09:54 · 2366 阅读 · 0 评论 -
如何理解stdlib.h里的_countof()宏
在stdlib.h里有一个宏_countof,如下:/* _countof helper */#if !defined(_countof)#if !defined(__cplusplus)#define _countof(_Array) (sizeof(_Arra转载 2011-08-30 22:16:48 · 847 阅读 · 0 评论 -
枚举进程信息
1.PSAPI法#include #include #include #include "psapi.h"#pragma comment ( lib, "psapi.lib" )int main(){ setlocale(LC_ALL,"CHS"); //原创 2011-09-02 10:58:28 · 3095 阅读 · 1 评论 -
Detour安装及简单使用实例
Detours是微软开发的一个函数库,可用于捕获系统API。在用其进行程序开发之前,得做一些准备工作:一.下载Detours 在http://research.microsoft.com/sn/detours 可免费下载Detours二.安装Detours原创 2011-08-04 11:34:55 · 26466 阅读 · 6 评论 -
使用异步过程调用(APC)实现模块注入
摘自:windows编程循序渐进 异步过程调用是一种能在特定线程环境中异步执行的系统机制。往线程APC队列添加APC,系统会产生一个软中断。在线程下一次被调度的时候,就会执行APC函数,APC有两种形式,由系统产生的APC称为内核模式APC,由应用程序原创 2011-09-03 11:33:34 · 6673 阅读 · 1 评论 -
使用调试钩子屏蔽全局钩子
WH_DEBUG为调试钩子,用来给钩子函数除错。在系统调用系统中与其他Hook关联的Hook钩子例程之前,系统会调用WH_DEBUG Hook钩子例程。你可以使用这个Hook来决定是否允许系统调用与其他Hook关联的Hook钩子例程。WH_DEBUG调用DebugProc钩子例程原创 2011-09-06 22:18:02 · 5016 阅读 · 0 评论 -
关于判断目标程序/文本文件是否为unicode
用API: IsUnicodeWindow函数功能:该函数确定指定的窗口是否是一个本地Unicode窗口。 函数原型: BOOL IswindowUnicode(HWND hwnd); 参数: hWnd:被测试窗口的句柄。 返回值:如果窗口是一个本地U原创 2011-09-07 20:58:45 · 2536 阅读 · 1 评论 -
继续谈下调用约定
今天写了个DLL是用extern "C"导出的,以前一直用.def文件,结果出现了以下错误无法解析的外部符号 "__declspec(dllimport) int __cdecl SetStatus(int)" (__imp_?SetStatus@@YAHH@Z),该符号在函原创 2011-09-06 23:12:54 · 1147 阅读 · 2 评论 -
关于程序基址改变问题
windows vista开始有动态基地址的功能,只要pe头Dll Characteristics有0x40每次加载时基地址都不一样自己的程序:要想基址固定,在链接器中去掉/DYNAMICBASE加上/FIXED#pragma comment(linker,"/BAS原创 2011-08-13 14:41:03 · 8613 阅读 · 6 评论 -
多开限制的原理
1.创建新节法 为程序加入一个全局变量,让这个全局变量可以被程序的多个实例所共享,每当程序实例运行时就对该全局变量进行修改。通过访问该全局变量,就可以知道有多少个实例在运行了。当然,为了系统的安全和稳定性,默认情况下是不允许这样做得。为了阻止这种事情的发生,系统原创 2011-08-02 14:35:44 · 3799 阅读 · 0 评论 -
c++复习
麻痹忘得真快 重载:参数个数或是参数类型不同时才可以重载,只有返回类型不同构不成重载继承:类中只有公有的才可以被外部调用,其它的都只能被内部调用,被保护成员只有内部和子类调用,私有成员只有本身能调用。构造函数的调用顺序:先父类的,后子类的,析构的时候相反#原创 2011-08-18 18:42:03 · 846 阅读 · 0 评论 -
const的常见用法
出处;http://blog.youkuaiyun.com/bizhu12/article/details/6672723 const用法主要是防止定义的对象再次被修改,定义对象变量时要初始化变量 下面我就介绍一下几种常见的用法1.用于定义常量变量,这样这个变量在后面转载 2011-08-19 13:13:58 · 625 阅读 · 0 评论 -
成员函数做为线程函数
WIN32线程控制主要实现线程的创建、终止、挂起和恢复等操作,这些操作都依赖于WIN32提供的一组API和具体编译器的C运行时库函数。1.线程函数 在启动一个线程之前,必须为线程编写一个全局的线程函数,这个线程函数接受一个32位的LPVOID作为参数,返回一个UIN转载 2011-08-25 11:51:14 · 1190 阅读 · 0 评论 -
VC全局变量的使用
全局变量一般这样定义:1。在一类的.cpp中定义 int myInt;然后再在要用到的地方的.cpp里extern int myInt;这样就可以用了。 2。在stdafx.cpp中加入:int myInt;然后在stdafx.h中加入:extern in转载 2011-08-25 12:06:44 · 754 阅读 · 0 评论 -
VC释放资源
让程序运行时释放我们需要的DLL或是其他步骤:切换到资源视图,导入我们要释放的资源,并设置好导入的资源类型名初始化函数中ReleaseRes(_T("C:\\Test.dll"),(WORD)IDR_DLL1,_T("DLL"));//不指定路径就直接释放到程序所原创 2011-09-21 14:59:44 · 5121 阅读 · 1 评论 -
远程加载与卸载DLL
DWORD GetProcessIdByName(LPCTSTR szProcess)//注意要加exe后缀{ DWORD dwRet=0; HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)原创 2011-08-27 17:14:39 · 3880 阅读 · 2 评论 -
窗口全屏,覆盖任务栏
给人做个东西,有这个要求先放上一些玩意的隐藏任务栏::ShowWindow(::FindWindow(_T("Shell_TrayWnd"), NULL), SW_HIDE);开始菜单 ::ShowWindow(::GetDlgItem(::FindWindow(原创 2011-09-23 23:29:56 · 11681 阅读 · 5 评论 -
隐藏 LoadLibrary() 函数
#include typedef struct _UNICODE_STRING { // UNICODE_STRING structure USHORT Length; USHORT MaximumLength; PWSTR Buffer;} UNI原创 2011-09-25 21:25:55 · 7550 阅读 · 0 评论