- 博客(42)
- 收藏
- 关注
原创 在ATL中加入带SAFEARRAY参数的方法
摘要 本文描述了在ATL项目中添加包含SAFEARRAY参数的方法时遇到的问题及解决方法。当尝试通过向导添加GetStructValue方法时,系统报错无法创建函数。手动解决步骤包括:1)在IDL文件中直接添加方法声明;2)在头文件中声明方法原型;3)在实现文件中编写方法实现。这种方法绕过了向导的限制,成功实现了包含SAFEARRAY参数的方法添加。
2026-01-28 19:08:33
136
原创 【COM逆向系列一】ATL COM组件逆向
逆向旧版COM音频编辑库的探索 本文记录了作者尝试逆向分析一个老旧音频编辑COM组件的过程。该组件在XP系统下可正常使用,但在Win10系统下会导致VS2015闪退,表现出明显的兼容性问题。 作者通过以下步骤进行分析: 使用VC6生成COM组件的包装类,获取接口和类信息 利用DumpVTable等工具提取COM函数名和地址 编写IDA Python脚本为函数重命名,方便逆向分析 整个过程结合了COM编程学习和逆向工程实践,展示了如何处理老旧技术在新环境中的兼容性问题。文章还提供了更新后的IDA Python
2026-01-18 21:33:39
339
原创 【32位win7一键扫雷】32位win7系统自带扫雷游戏逆向分析之一键扫雷(附VS代码工程文件、可执行文件和OD分析缓存文件)
本文分享了如何通过逆向工程实现Win7系统扫雷游戏的一键秒杀功能。作者通过分析扫雷程序的内存结构和随机数生成机制,成功定位了布雷函数和雷区数据。文章详细介绍了使用Cheat Engine和OllyDbg进行逆向调试的过程,包括对rand函数下断点、分析雷区生成逻辑以及处理程序重定位问题。通过修改PE头文件特性,作者简化了分析过程,最终实现了自动识别雷区并模拟鼠标点击的功能。该研究基于前人关于Vista和Win7扫雷的分析成果,为逆向工程初学者提供了实用的技术参考。
2025-11-11 07:12:39
84
原创 QString转char*出现中文乱码的疑难杂症终极解决方案
文章摘要: 在使用Qt开发时,从QString转换为char*/const char*时需要注意转换方式。直接一步转换(如text.toUtf8().data())在MSVC的Debug模式下可能出现异常,而分两步转换(先存为QByteArray再获取指针)则更安全。该问题与字符串内容、编码方式无关,具有随机性,可能与MSVC的调试内存机制有关。解决方案建议:1)分两步转换存储中间变量;2)直接在函数参数中调用转换方法。另附MSVC编译器添加UTF-8编码支持的配置代码。 (字数:150字)
2025-08-26 07:32:21
188
原创 Win7 x64位系统下几乎完美使用安装RTX3050 6G显卡驱动详细教程
RTX3050 6G显卡驱动安装指南:由于该显卡发布时间晚于驱动,需手动修改安装文件。首先在NVIDIA官网下载驱动并解压,通过设备管理器获取硬件ID(PCI\VEN_10DE&DEV_2584),然后在解压目录的.inf文件中添加对应的设备标识。安装完成后可能出现设备管理器感叹号问题,推荐通过命令提示符启用测试模式(bcdedit /set testsigning on)解决,此方法无需每次启动按F8,但会显示测试模式水印。文中提供了详细的图文操作步骤和两种解决方案。
2025-08-14 20:49:39
1745
1
原创 分享一个纯C++实现的循环队列(Cycle Queue)数据结构类库(支持批量push/pop/sliding等操作,存在好多bug,对其进行修改)
本文介绍了一种基于C++实现的循环队列(Circular Queue)类库,通过将队列首尾相连解决"假溢出"问题。文章分析了该库的主要功能包括批量数据推送(push)、弹出(pop)和滑动窗口操作,同时也指出了存在的几个关键缺陷:1)未使用模板类导致数据类型支持受限;2)存在内存空间计算错误,会无故空置最后一个存储单元;3)当数据从尾部循环到头部时尾指针定位错误。作者提供了详细的头文件和源文件代码,展示了队列的核心实现逻辑,包括内存管理、数据存取和指针移动等操作,但在边界条件处理上存在明
2025-06-29 17:57:59
175
原创 分享一个MFC的ProgressCtrl的扩展类(支持自定义显示文字、颜色、百分比及其位置)
摘要: CXProgressCtrl是对MFC标准进度条控件CProgressCtrl的扩展,解决了原控件无法显示文字和百分比的问题。该派生类提供了丰富的自定义功能,包括: 支持设置进度条颜色、背景色、文字颜色和背景色 提供三种文字对齐方式(左对齐、居中、右对齐) 可控制是否显示百分比数值 支持水平和垂直两种方向 通过重写OnPaint()和OnEraseBkgnd()方法实现自定义绘制,使用ExtTextOut函数显示文本信息。该控件增强了原有进度条的视觉效果和实用性,使界面更加美观和用户友好。
2025-06-20 07:03:19
68
原创 分享一个git上基于std::array实现的循环队列(Cycle Queue)模板类库
本文介绍了一种基于C++模板的循环队列实现,通过将向量空间视为环形结构避免"假溢出"。该实现基于std::array封装,支持数据类型泛化,包含push/pop操作和迭代器功能。文章指出原始代码在VS2015编译时遇到std::copy_n函数不兼容的问题,分析原因是VS2015工具集不支持新版C++特性。最终解决方案是将std::copy_n替换为memcpy函数,修改后的代码在VS2015中成功编译。作者提供了一个测试实例验证该循环队列类的功能,展示其支持自定义数据类型的能力。该实现
2025-06-20 06:48:29
207
原创 Windows下利用RegisterWindowMessage函数实现进程间通信
程间通信的方法有很多,比如使用注册消息,内存映射,WM_COPYDATA等,下面先讲使用注册消息实现的方法。使用注册消息比较简单,核心是消息的接收端和消息的发送端(接收端和发送端在两个不同的进程)必须注册相同的消息,这样发送消息才能识别。
2025-05-04 21:43:35
556
原创 [QCustomPlot系列]给QCustomPlot添加一个QScrollBar滚动条、限制缩放范围、自动设置大小和右边栏垂直缩放
从QCustomPlot类派生一个类,进行个性化设置,在轴矩形的上边设置Margin,放一个滚动条,设置滚动条的样式常量定义1000。
2025-05-03 21:31:36
386
原创 MFC界面库ToolkitPro v15.3.1的编译和使用教程(支持VS2015和VS2017)
界面库全称为Codejock Xtreme Toolkit Pro,目前可以免费使用的版本为v15.3.1,可以在CSDN上搜索下载,有很多,比如。
2025-01-12 01:59:40
1751
原创 [QT多线程基础系列]QT多线程之线程池QThreadPool方法详解
在Qt中使用线程池需要先创建任务,添加到线程池中的每一个任务都需要是一个QRunnable类型,因此在程序中需要创建子类继承QRunnable这个类,然后重写 run() 方法,在这个函数中编写要在线程池中执行的任务,并将这个子类对象传递给线程池,这样任务就可以被线程池中的某个工作的线程处理掉了。QRunnable类 常用函数不多,主要是设置任务对象传给线程池后,是否需要自动析构。
2024-11-11 02:25:56
252
原创 [QT多线程基础系列]QT多线程之moveToThread方法详解
假设应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行逻辑运算,多个线程各司其职,不仅可以提高用户体验还可以提升程序的执行效率。本博客同样以数字排序进行举例说明!
2024-11-09 15:09:40
811
原创 [QT多线程系列]QT多线程之线程类QThread的使用详解
假设应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行逻辑运算,多个线程各司其职,不仅可以提高用户体验还可以提升程序的执行效率。本博客以数字排序进行举例说明!
2024-11-08 00:32:36
128
原创 Visual Studio高版本到低版本的转换
由于VS版本比较多,低版本无法直接打开高版本的工程文件,通过对工程文件进行一些修改可以解决这些问题。通过修改Solution文件和Project文件,可以使低版本转换为高版本。
2024-11-06 23:30:02
1877
原创 [QT基础系列]QT信号槽的使用详解(含Lambda表达式)
案例:“指挥官” (Commander)发送一个 “冲” (go) 的信号,然后 “士兵" (Soldier)执行“ 战斗” (fight) 的槽函数信号和槽都已经定义完毕, 接下来就可以进行连接了// 1. 创建两个类的实例// 2. 建立信号和槽的连接// 3. 发送信号// emit 可省略如果要使用信号和槽,需要满足如下两个条件自定义的类,要继承自 QObject自定义的类,其中要声明一个宏 Q_OBJECT只有满足了这两个条件才可以正常使用信号槽机制。
2024-11-03 21:31:33
431
原创 [QT基础系列]表格QTableWidget
是Qt中的表格控件,可以行列的形式来展示数据有很多属性和方法,完整的可查看帮助文档。在窗口上放置一个控件后,既可以在设计师UI界面来编辑属性和添加数据,也可以在代码中动态地设置,常用的属性和方法如下。
2024-11-02 03:44:14
342
原创 [QT基础系列]QT程序的发布部署
打开QT控制台,根据自己的编译器选择相应的控制台,如MinGW 64-bit。切换目录到debug(包含exe程序)下,执行命令即可完成部署。
2024-10-31 00:59:40
146
原创 [QT基础系列]滑动条QSlider
QSlider是滑动条控件,滑动条可以在一个范围内拖动,并将其位置转换为整数QSlider继承自,它的绝大多数属性都是从继承而来的。
2024-10-27 23:09:35
256
原创 [QT基础系列]复选按钮QCheckBox
Qt中的复选按钮类是QCheckBox它和[单选按钮]很相似,单选按钮常用在 “多选一” 的场景,而复选按钮常用在 "多选多"的场景比如喜欢的水果选项中,可以在 “苹果/桃/梨/橘子/香蕉” 中选择多个。
2024-10-26 23:57:21
360
原创 [QT基础系列]单选按钮QRadioButton
Qt中的单选按钮类是它是一个可以切换选中(checked)或未选中(unchecked)状态的单选按钮单选按钮常用在 “多选一” 的场景,也就是说,在一组单选按钮中,一次只能选中一个单选按钮比如性别中的 “男女” 二选一,学历中的 “博士/硕士/本科/其他” 四选一,等等。
2024-10-26 23:57:03
327
原创 [QT基础系列]文本框QLineEdit
QLineEdit 是 Qt 中的文本框,准确地说是单行文本框,通常用于接受用户的输入比如用户输入用户名、密码等,都可以使用该控件。
2024-10-24 23:57:18
104
原创 [QT基础系列]窗口QWidget
所有窗口类的基类Qt 中有 3 个窗口的基类:QWidget、QMainWindow、QDialog在创建 Qt 工程时,会让我们选择继承自哪一个窗口类其中,QMainWindow、QDialog 都是继承自 QWidge所有控件类的基类Qt 中的控件类(按钮、输入框、单选框等)也属于窗口类它们的基类也是 QWidget;可以内嵌到其他窗口的内部,此时需要给其指定父窗口;可以作为独立的窗口显示,此时不能给其指定父窗口;
2024-10-23 07:10:30
322
原创 【超级鼠标键盘锁】之远线程注入winlogon.exe进程屏蔽Ctrl+Alt+Del、Win+L
通过上一节对进程的调试,得到了其处理和Win+L按键的关键代码位置偏移,并阐述了如何对指令进行修改,从而达到屏蔽这两个按键。本节采用远线程注入技术进行实现。
2024-10-06 19:05:38
303
原创 【超级鼠标键盘锁】之实现思路(非驱动实现)
曾经,学习孙鑫老师的《VC++深入详解》时,接触到了钩子HOOK原理,一度对HOOK技术特别感兴趣,便自然而然产生了实现“鼠标键盘锁”的想法。
2024-10-01 11:59:01
137
原创 一种使用setdll+HOOK钩子技术+dll为MFC程序ProtocalTool等老旧程序打补丁的思路(含源码)
由于工作原因,需要使用一个很老旧的软件,没有源代码,该软件在XP系统下运行正常,但是需要登录,且在win10系统下使用时IP控件运行不正常,只能输入每个数字只能输入2位数,还有一些其他问题,比如给软件添加一些编辑框,或者对软件进行下面简单梳理一下解决这些问题的思路。
2024-10-01 11:56:04
287
原创 Ollydbg使用教程学习总结(五)
新内容:硬件断点用PEID打开,看到程序是用VC6.0写的,用OD载入,按F9运行后,出现NAG窗口,在OD中按下暂停,再打开堆栈窗口如上图高亮行正是调用NAG窗口的call,双击来到反汇编窗口并下断重新运行程序,发现程序的3个窗口都是对话框,且都来自这个call,因此不能直接将该指令NOP掉。继续往上浏览,发现有je跳转语句,只要让第1次和第3次跳转实现,第2次跳转不实现即可。在数据段00445E80。
2024-09-05 06:47:30
198
原创 Ollydbg使用教程学习总结(四)
用PEID查看,是VC6编写的程序,用OD载入API下断方法:a.右键=>查找=>所有模块间的调用,直接输入API,找到后右键该行=>在每个调用到上设置断点;b.Ctrl+N,找到后右键=>在每个参考上设置断点;按F9运行程序,删除输入注册码之前就触发的断点,最后输入注册信息之后,在如下位置断下。
2024-09-05 06:46:42
224
原创 Ollydbg使用教程学习总结(三)
点击注册,输入邮箱和序列号后提示如下突破口:该提示窗口中的字符串,查找如下双击来到反汇编窗口,有个关键跳转,往上查看影响跳转的语句是test al,al,猜测al=0为未注册,al=1为已注册,再往上查看,决定al值,下断跟进查看。跟进“需进入1”,找到2个关键call跟进“需进入2”和“需进入3”,发现函数里代码相似看来是关键,跟进后来到最后一句为mov al,bl,这是改变al值的关键语句,修改为mov al,1后按F9运行程序,发现保存到可执行文件后,运行程序。
2024-09-03 16:34:02
392
原创 Ollydbg使用教程学习总结(二)
把程序跑一遍之后我们发现程序有两个NAG,一个是在程序界面启动前出现,另一个是在程序关闭后出现的。去掉第一个Nag方法如下:①jmp跳过②全部nop掉③令hOwner参数为1,push 1,使其父句柄无意义④更改入口地址为401024双击这一行将下面一行中的值改为1024,如下图具体在数据窗口中定位到4000E8,按下空格键进行修改同理,可去掉第二个NAG窗口。
2024-09-02 17:11:12
321
原创 Ollydbg使用教程学习总结(一)
使用例子程序为Hello.exeOD基本快捷键及功能从系统DLL领空返回到程序领空,Alt+F9通过OD将程序的标题“Hello world”改为“OD Class 01”直接单步执行法按F8单步执行,找到MessageBox传参的地方,直接在数据窗口修改即可。
2024-09-02 17:10:51
528
原创 Windows系统下基于VS通过setdll调试需要远线程注入的dll
下载源代码用管理员身份启动或直到编译结束,在Detorus-master目录下的bin.X86(x64类似)文件夹下,找到setdll.exe文件。
2024-09-02 17:09:30
283
原创 某MFC软件注册码逆向分析(此处只谈思路)
初始状态描述:软件可以正常打开,打开后点击菜单任意按钮,则弹出机器码包含本机机器码的注册框,机器码共有XX位!输入用户名和邮箱等之后,会生成一个后缀名为.dat的文件,并提示用户需要将该文件通过电子邮件反馈给软件厂商,软件厂商反馈后缀名为.key的注册文件,通过菜单注册按钮,选择该.key文件,即可注册成功。首先利用PEID之类的查看程序的基本信息,以及是否加壳,发现并没有加壳,且是采用VC++写的。
2024-09-02 17:01:07
243
原创 IDA反编译dll库时导入C++头文件
有时候,可能因为硬盘损坏等等原因,自己曾经写的动态链接库源码丢失了,幸好对应的头文件得以保留了下来,这个动态链接库主要是某种算法的实现,并没有继承其他的一些类库,比如MFC之类的,而自己对算法的实现已经忘得差不多了,而突然又需要该算法的实现过程,那么有什么办法可以帮助我们呢?一个很好的办法就是采用IDA进行反编译,如果dll只是C语言的导出,那么反编译代码应该比较好看懂!(不过有一个难题是结构体的识别)
2024-09-02 16:59:05
1025
空空如也
让指定内存地址不被占用,可以申请,比如0x400000
2025-06-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅