
C++
文章平均质量分 78
i华仔
设计高效、稳定、易用的软件!
展开
-
关于gtk+中GdkAtom定义
GTK+3.0代码中,对GdkAtom有如下定义:解释:一种类型,描述XServer服务器的字符串表的索引在源代码中末搜索到任何_GdkAtom的定义,且此处使用typedef定义为GdkAtom为指针类型。X11代码中定义了,Atom类型:X11中Atom类型,实际为 unsigned long类型经实验得知,GtkAtom内存中的值为数字类型,因此,猜测...原创 2019-11-19 10:33:51 · 269 阅读 · 0 评论 -
EasyHook库系列使用教程之五全局ACL和本地ACL
EasyHook控制钩子函数通过两个ACL表控制全局ACL:针所有钩取的函数本地ACL:针对指定的钩取函数判断ACL是否能够访问的C++代码如下:if(ACLContains(&Unit.GlobalACL, CheckID)) { if(ACLContains(LocalACL, CheckID)) { if(Local原创 2014-10-29 18:40:56 · 5468 阅读 · 1 评论 -
关于Office系列软件的程序流程
本文的目的,明确Office系列软件的文件读取机制结论一.Offie2003时Office系统软件,读取文件,采用的是ReadFile和WriteFile,使用的底层库为Ole32.dll结论二.Windows为了提升文件读读写的效率,在WIN7中扩展了内存映射的支持,支持的方式为,先尝试使用内存映射读写文件,若内存映射失败,则采用直接读写文件结论三.Ole32.dll中只要内原创 2016-01-22 15:26:29 · 676 阅读 · 0 评论 -
关于应用程序加壳后,IAT钩子失效问题的破解
IAT钩子主要使用的IAT表进行API HOOK加壳会使原有的导入表被加密,导致无法直接通过修改导入表来Hook API,如下图, 使用UPX加壳后,计事本程序,的很多项导入表不见了.此类软件加壳后将导至IAT钩子失效,导致无法完成相应的API HOOK解决方法一, 强行搜索进行空间,进行比对,发现是自己所要钩取的API地址进行替换(稳定性极差)解决方法二 , 看官原创 2016-01-22 15:44:52 · 1364 阅读 · 0 评论 -
关于数据库控制
实现禁用数据库连接原创 2016-01-26 16:14:21 · 438 阅读 · 0 评论 -
关于禁用数据库访问方法
通用做法,不过本机中的SQL2000并未通过网络传输1.将socket函数connect函数过滤2.将dbnetlib.dll中ConnectionOpen函数过滤Orcal3.将oci.dll中OCIEnvCreate/OCIEnvInit/OCIEnvNlsCreate函数过滤SQL 2005+.sqlncli.dll/sqlncli10.dll等,由于是COM组件,可原创 2016-01-28 16:43:20 · 699 阅读 · 0 评论 -
关于MFC单文档窗口菜单的疑问
MFC单文档的菜单在何时创建?解答:参见窗体创建API CreateWindowEx,中的参数有一项指向了HMENU,因此菜单加载必定与此API有关,下面来调试一个流程_tWinMain //程序入口AfxWinMain //同入口CtestApp::InitInstance //应用程序初始化ProcessShellCommand(cmdInfo) //初始时会执行FILE原创 2016-07-09 22:17:52 · 750 阅读 · 0 评论 -
关于Window7/8/10 兼容层与钩子系统兼容问题
Win7 以来,微软增加了安全性 ..... 此处省略一万字同时增加了一个叫兼容层的东西 , 简单来说,就是由一些钩子处理程序,目的是为了兼容老程序在新系统上运行.更简单的说法,WIN7 增加了些新东西,势必导致API的变化,有增加的,也有减少的,也有变化的,那么问题来了,对于API变化的,原来在XP上正常运行的程序,到WIN7上可能就用不了了,为了让操作系统有更好的兼容性,微软做了这个兼原创 2016-11-17 23:23:47 · 1229 阅读 · 0 评论 -
修改大神写的MyGetProcAddress支持64位
ULONG_PTR MyGetProcAddress( HMODULE hModule, // handle to DLL module LPCSTR lpProcName // function name ) { int i=0; char *pRet = NULL; PIMAGE_DOS_HEADER pImageDosHeader = NUL转载 2016-11-17 23:41:29 · 2397 阅读 · 0 评论 -
巧用函数返回地址获取导出函数的直接调用模块
目的: 实现调用DLL中检测调用来源模块描述:开发三方接口时经常会遇到模块校验,常见做法有如下几种1. 在接口中开放参数,专门用于校验 2. 在接口DLL中校验调用模块本文主要介绍第2种的实现方法实现原理:假设有函数 Add(a+b);从C/C++角度看,貌似没有办法在Add函数中知道是谁调用了它.从汇编角度看,在Add函数调用流程如下;1. p原创 2018-04-19 10:29:54 · 1379 阅读 · 0 评论 -
从双击至窗口最大化都发生了什么
在研究Duilib框架时的测试小例子,只需在OnSize下断点,并双击标题栏,即会在OnSize中命令断点,可分析调用流程,解释见后 //5、最后,响应了OnSize消息> DuiLib_d.dll!DuiLib::WindowImplBase::OnSize(unsigned int uMsg, unsigned int wParam, long lParam, int &...原创 2019-04-24 11:57:12 · 550 阅读 · 0 评论 -
【转载】【翻译】X11 剪贴板是如何工作的
转载地址:自带梯子https://www.uninformativ.de/blog/postings/2017-04-02/0/POSTING-en.htmlX11:“剪贴板”如何工作?如果您在切换到运行X11的东西之前使用过其他操作系统,您会注意到有多个剪贴板:有时,您可以使用鼠标选择一些文本,切换到另一个窗口,然后点击鼠标中键来粘贴文本。有时,您可以选择文本,然后点击一些热键,...转载 2019-09-04 16:40:35 · 1450 阅读 · 4 评论 -
EasyHook库系列使用教程之四钩子的启动与停止
此文的产生花费了大量时间对EasyHook进行深入了解同时参考了大量文档先来简单比较一下EasyHook与Detour钩取后程序流程Detours:钩取API函数后,产生两个地址,一个地址对应真Hook函数地址,一个对应真实API地址EasyHook:钩取API函数后,所有API指向同一地址,通过ACL控制是否跳转到真实API地址原创 2014-10-29 10:27:11 · 6119 阅读 · 0 评论 -
关于VS2005和VS2008调试时,有些代码不能单步调试问题
问题描述:在使用VS2005和2008调试时部分代码原创 2014-05-15 10:49:15 · 2382 阅读 · 0 评论 -
文件透明加密,所处理的一些API
[XueTr][acad.exe-->Ring3Hook]: 287挂钩对象 挂钩位置 钩子类型 挂钩处当前值 挂钩处原始值[*]len(5) kernel32.dll->CloseHandle 0x7C809B7原创 2013-02-01 14:12:00 · 1376 阅读 · 0 评论 -
C++中GoTo语句的合理利用
描述:经常在写程序时,如果操作流程很长,每一部都需检查错误,如果这样将会发现,程序中很多地方需要关闭句柄回收资源等,将会重复性地去回收资源。解决办法:使用GoTo在函数结尾处进行一次回收。此处可以将错误信息统一放在此处输出。 if (bDoBackupEncFile){bSuccess = recoveryManager->EarseRecoveryFile(recoveryFileNew原创 2011-11-18 11:25:24 · 1942 阅读 · 0 评论 -
静态库动态库链接分析
本文为验证后的结果,准确性较高,适合任何人阅读静态库和动态库链接分析1、文件组成结构静态库:lib 头文件动态库:lib dll 头文件从组成上看,动态库和静态库的差异在于动态库多了一份dll文件,导致动态库可以独立存在,2、链接方式静态库:只能静态链接动态库:动态链接和静态链接3、运行效果静态库:相当于直接把代码段写入到exe或dll文件中动原创 2011-11-18 16:59:27 · 2002 阅读 · 0 评论 -
MFC资源高级应用
很多时候我们的应用程序需要配置文件,而配置文件经常会被遗忘而导致程序无法运行。现在我们有更好的办法来保存配置文件了,方法即为将配置文件以资源的方式添加至MFC中,在程序初始化时将资源释放至指定目录下即可,释放的过程就是将一块内存中的数据写至文件中。代码借用别人的,来源看雪论坛。// 前不久大家都在讨论怎样通过一个程序来生成另一个程序,我提出了将另一个程序当资源文件包含在程序中一原创 2011-11-21 16:07:03 · 665 阅读 · 0 评论 -
MFC消息ON_WM_CONTEXTMENU和ON_COMMAND_RANGE
ON_WM_CONTEXTMENU消息说明:用户右键窗口时调用此消息在右键单击窗口时调用,此消息的宏#define ON_WM_CONTEXTMENU() \ { WM_CONTEXTMENU, 0, 0, 0, AfxSig_vWp, \ (AFX_PMSG)(AFX_PMSGW) \ (static_cast ( &ThisClass :: OnContextMenu原创 2011-11-22 23:17:45 · 4114 阅读 · 0 评论 -
绘图相关API
AbortPath 抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作 AngleArc 用一个连接弧画一条线 Arc 画一个圆弧 BeginPath 启动一个路径分支 CancelDC 取消另一个线程里的长时间绘图操作 Chord 画一个弦 CloseEnhMetaFile 关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄 Clo转载 2011-11-23 21:45:07 · 632 阅读 · 0 评论 -
操作系统内存管理机制
windows缓存管理机制,内容来源《深入解析Windows操作系统》缓存管理机制总结:以下篇章主要针对文件那块的缓存机制做个总结分析。Windows缓存相当于在操作系统下建立一个块内存备份每次从文件中读或写的数据。缓存管理的目的:由于硬盘的速度太慢,CPU和内存的速度太快,导致数据传输的一个瓶颈,缓存管理可以有效的减少读写硬盘的次数据,来达到降低硬原创 2011-12-09 12:56:23 · 1339 阅读 · 0 评论 -
在C++中显示桌面的方法
CoInitialize(0); IShellDispatch4 *pdisp = NULL; CoCreateInstance(CLSID_Shell,NULL,CLSCTX_ALL,__uuidof(IShellDispatch4),(void **)&pdisp); if (pdisp) { pdisp->ToggleDesktop(); pdisp->Release();原创 2011-12-09 13:53:55 · 2063 阅读 · 0 评论 -
浅谈Windows窗体中显示出示
先上图,有图有真象,其效果有上图,当鼠标移动到按钮上是弹出一个提示。其实现方法为。在CXXXDlg.h文件中定义:public: CToolTipCtrl m_openToolTip; 在CXXXDlg.cpp的OnInitDialog()中初始化: m_openToolTip.Create(this); m_ope原创 2012-01-08 20:00:47 · 467 阅读 · 0 评论 -
替换通过PE加载器加载的模块的导入表
PE加载器:将PE文件在内存中加载,此加载方式,进程的模块列表中无法查看到模块名。Procmon中监视,堆栈,堆栈中显示,汇编跟踪时也没有模块名。替换方法:找到模块所在的内存块,对内存块中的PE文件进行解析,定位到导入表处,再替换导入表。方法详见代码HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,true,m_Pid); char原创 2012-02-03 16:41:24 · 1152 阅读 · 0 评论 -
桌面图标任意摆
核心实现思想,通过windows 消息机制,记录和修改桌面图标的位置。Win7验证通过。 欢迎转载使用。#ifndef __SETICONONDESTOP__#define __SETICONONDESTOP__class CSetIconOnDestop{public: CSetIconOnDestop(); ~CSetIconOnDestop(); typede原创 2012-03-18 02:13:39 · 1745 阅读 · 0 评论 -
【原创】类的交叉使用。
交叉引用对象 A.hA.cppB.hB.cpp A中有B的指针,B中有A的指针 A.h中有B的指针,在A.h中加入B.h---A中即以在任意地方使用A或A中的函数 B.h若在加入A.h编译器将会报错。办法。在B.h中使用A的前置定义如: class A ---在B中将可以使用A的指针,但是不能使用A的函数,因此B中所用A的函数需要写在B.cpp中。原创 2012-08-29 15:34:42 · 522 阅读 · 0 评论 -
MFC窗口各部分宽度简界
MFC窗口组成通过Spy++获取的窗体大小是整个窗口的大小窗体分为客户区域和非客户区域非客户区域包括菜单栏,工具栏和状态栏整个窗口由外到内,由上到下各部分之间的大小边框大小 8pit 标题栏大小 22pit菜单栏大小 20pit工具栏大小 24pit客户区大小 Xxpit状态栏大小 19pit即非客户区大小原创 2013-01-03 21:07:56 · 849 阅读 · 0 评论 -
静态动态库,导出类的方法
静态库,和动态为库说来其实是一样的,只不过静态库把dll的东西放到lib中了而动态库则分为一个lib和一个dll即然一样,那么使用方法都是差不多的,只不过静态库被编译到程序里面去了,动态库则放到dll中使用方法,类需要使用需要导出,即 __declspec(dllexport)写在类声时时即表示此类为导出类,在需要使用的地方,将此修改为__declspec(dlli原创 2011-11-17 23:19:08 · 3943 阅读 · 0 评论