ASM/WTL/MFC/QT
文章平均质量分 64
C++/VC/MFC 各种奇淫技巧!
汪宁宇
我想大抵是累了,横竖都没有精神,漫不经心的看着代码,眼皮倦倦的。仔细看了半夜的符号,才从字缝里看出来,满眼都是吃人的bug......
(有多年C/C++上下位机开发经验,熟悉三菱FX1S/1N/2N/3U、MODBUS等常见通讯协议,可兼项目顾问等方式合作有意私信!)
展开
-
Win32下VC++重置指定的USB端口/重新启动USB设备方法
是一个IO控制代码,用于控制USB集线器对特定端口执行重置操作,这有助于重新启动USB设备。在Windows操作系统中,这通常用于修复因为某些原因无法正常通信的USB设备。注意:这个代码需要管理员权限才能运行,并且可能会影响到正在使用的USB设备,因此请谨慎使用。在Windows中,你可以使用WinUSB(Windows USB Driver)库或者。API来发送这个IO控制代码。原创 2024-04-04 11:00:00 · 248 阅读 · 0 评论 -
WinSock Api connect超时函数实现方法
表示服务器同时处理的连接请求的最大数量。在这种情况下,服务器只能处理一个客户端连接请求。如果客户端尝试连接时,服务器正在处理一个连接请求,客户端将被阻塞(即死等)直到服务器接受连接或超时。为了解决这个问题,您可以使用多线程或异步编程模型,以便服务器能够同时处理多个连接请求。原创 2024-03-29 18:00:00 · 238 阅读 · 0 评论 -
在C++控制台程序中实现一个简单的进度条效果
在C++控制台程序中实现一个简单的进度条效果通常涉及使用控制台输出和控制台光标移动。原创 2024-03-30 10:00:00 · 186 阅读 · 0 评论 -
基于LCD点阵颜色数组绘制并生成BMP格式
【代码】基于LCD点阵颜色数组绘制并生成BMP格式。原创 2024-03-29 18:00:00 · 228 阅读 · 0 评论 -
用纯C语言实现空气压强和电压关系
用纯C语言实现空气压强和电压关系,已知P是真空度,U是电压,C是3.572(以PA为单位),P=10**(U-C)/1.286原创 2024-03-20 19:30:00 · 318 阅读 · 0 评论 -
_MSC_VER宏对应的Visual Studio版本
_MSC_VER宏对应的Visual Studio版本原创 2023-12-18 15:00:00 · 708 阅读 · 0 评论 -
C/C++ makefile 支持多目录、多文件批量化模版
最近因工作需要,要尝试徒手撸一份makefile文件,这份模版支持批量化,也不针对某一个C/CPP文件指定规则.....原创 2023-12-16 09:00:00 · 119 阅读 · 0 评论 -
纯C语言实现解析单色位图文件获取颜色值
利用纯C语言解析单色位图文件获取颜色值,只需要你自己实现setPixel(int x, int y, int iColor)即可......原创 2023-10-26 22:44:11 · 387 阅读 · 0 评论 -
主流架构(gcc、msvc、x86、x64、arm)中double与float浮点数保留精度(末尾清零)
浮点会由于精度问题,导致无法直接做 != 比较,下面是一个主流架构下,优化处理浮点精度的函数, 保留精度(末尾清零)......原创 2023-10-23 20:32:43 · 966 阅读 · 0 评论 -
4. (C++)利用redis或MySQL实现射击游戏排名系统
假设我们要设计一款排名系统,那必然要涉及到两大类数据:武器数据和非武器的通用数据,它他通常有一个共用的属性:那就是主键唯一的,例如玩家的数字编号,通常在MySQL中是自增的无符号整数字段。原创 2023-10-14 11:19:11 · 311 阅读 · 0 评论 -
3. Windows下C++/MFC调用hiredis库操作redis示例
将之前下载和编译好的Redis目录拷贝到新建好的工程目录下面,再点击测试工程的右键/属性,点击C++/常规,附加包含目录添加以下路径,注意如果原先有多个路径,在末尾处添加分号后再粘贴:点击C++/常规,附加包含目录点击完成即可。原创 2023-10-13 11:00:00 · 1013 阅读 · 1 评论 -
2. redis常见数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。原创 2023-10-12 10:00:00 · 183 阅读 · 0 评论 -
1. Windows平台下如何编译C++版本的Redis库hiredis
Windows平台下如何编译C++版本的Redis库hiredis,及编译错误解决办法原创 2023-10-10 22:18:16 · 1165 阅读 · 0 评论 -
linux C++用pthread_create创建线程示例
linux C++用pthread_create创建线程示例原创 2023-09-13 19:00:00 · 150 阅读 · 0 评论 -
神经网络视觉AI“后时代”自瞄实现与对抗
整套系统完全不在Windows上运行,也不需要截取游戏画面,也不需要读写游戏数据,甚至连一个多余的进程、文件都不需要;他的原理是彻底不接触物理游戏主机,而是直接从HDMI读取画面数据用FPGA开发板上的Python+OpenCV来识别出游戏人物位置,如果当前他了解神经网络方面的视觉AI,也许他会打开新世界的大门!原创 2023-05-25 22:25:07 · 4360 阅读 · 3 评论 -
用纯C语言分别实现增量式与位置式的PID自整定算法
用纯C语言分别实现增量式与位置式的PID自整定算法原创 2023-02-20 11:00:00 · 3559 阅读 · 0 评论 -
用纯C语言实现3D空间中的点坐标转化为屏幕二维点坐标,包含主视图、侧视图、俯视图、正等轴投影
要实现3D空间中的点坐标转换为屏幕二维点坐标,需要进行透视变换和投影变换。以下是一些基本的思路和示例代码,可以用于实现主视图、侧视图、俯视图、正等轴投影。原创 2023-02-19 20:00:00 · 1315 阅读 · 0 评论 -
ChatGPT 在做什么… 以及它为何发挥作用?
ChatGPT 能够自动生成一些读起来甚至表面上像人类写的文字的东西,这很了不起,而且出乎意料。但它是如何做到的?为什么它能发挥作用?我在这里的目的是大致介绍一下 ChatGPT 内部的情况,然后探讨一下为什么它能很好地生成我们认为是有意义的文本。我应该在一开始就说,我将把重点放在正在发生的事情的大画面上,虽然我将提到一些工程细节,但我不会深入研究它们。(我所说的实质内容也同样适用于目前其他的 “大型语言模型” LLM 和 ChatGPT)。转载 2023-02-18 15:21:20 · 768 阅读 · 0 评论 -
QT启动时设定QDockWidget初始化窗口大小
这个功能是为了保留软件上一次的布局设置等信息,比如软件窗口上次的大小或坐标位置、停靠栏大小与位置、表格控件的行高列宽信息等等,从这些细节上优化易用性,在QT4与5中实现方法均不相同:原创 2022-12-21 20:15:00 · 1673 阅读 · 0 评论 -
#QT 字符编码集GB2312、GBK、BIG5、GB18030、Unicode、UTF-8、UTF-16
QT 字符编码集GB2312、GBK、BIG5、GB18030、Unicode、UTF-8、UTF-16原创 2023-02-21 10:00:00 · 1129 阅读 · 0 评论 -
三、C++反作弊对抗实战 (实战篇 —— 4.辅助工具开发:利用MFC、Freetype、ImGui在OpenGL绘制滚动文字、窗口、菜单、按钮等控件)
利用MFC、Freetype、ImGui在OpenGL绘制滚动文字、窗口、菜单、按钮等控件。这一章节将讲述如何在OpenGL/DirectX环境的游戏中使用第三方的ImGui绘制常见的窗口和控件,例如菜单、按钮、复选框、滑动条等等,这一章节需要有一定的C++基础和Win32相关开发经验原创 2022-10-13 21:30:27 · 1454 阅读 · 1 评论 -
三、C++反作弊对抗实战 (实战篇 —— 3.如何获取游戏中角色人物角色的名称坐标、血量、武器信息(非CE扫描))
在上一章节中《三、C++反作弊对抗实战 (实战篇 —— 2.认识CS1.6常见的数据结构与流程)》我们了解了一些常见的数据结构与一些接口函数,在这里将介绍如何获取游戏中角色人物角色的名称坐标、血量、武器信息(非CE扫描)的方法。...原创 2022-08-28 18:52:56 · 1985 阅读 · 0 评论 -
MFC从字体名获取字库文件路径(从宋体获取到simsun.ttc)
#MFC从字体名获取字库文件路径(从宋体获取到simsun.ttc)原创 2022-08-16 20:51:07 · 2048 阅读 · 1 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 18.如何检测与对抗各种调试器)
如何检测与对抗各种调试器为了应对破解者调试我们的反作弊系统,所以我们需要检测各种调试器,以此来判断我们的游戏是否正在被调试。本文将非常详细的由浅入深的介绍ring3下面各种常见的检测方法(包括示例代码)原创 2022-04-16 21:06:00 · 1783 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 17.如何内存校验保护代码段、对抗远程线程注入)
这一章节将重点介绍如何利用内存校验防止第三方模块或辅助软件恢复我们的HOOK或者篡改任意代码段,配套全程在2.17目录中,本专栏所有内容仅供学习参考,我们应当坚决抵制任何不非行为!原创 2022-03-05 00:26:38 · 1066 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 15.如何对抗OpenGL类型的透视作弊器)
在前面的章节中已经分析过OpenGL32类型作弊器的原理与代码片段,在这里将介绍如何其中一些对抗的方法......原创 2022-03-04 10:46:01 · 449 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 13.利用内联汇编实现多层深度检测非法call)
在上章节中介绍了利用ebp返回地址检测非法call函数调用、如何实现VS2010调试器的调用堆栈列表的方法,在这章节中,我们换另一种纯汇编实现的深度多层调用堆栈检测方法,示例代码如下:原创 2022-03-04 10:43:55 · 554 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 12.如何实现VS2010调试器的调用堆栈列表)
如何实现VS2010调试器的调用堆栈列表显示效果:在ring3环境下,我们并不能信任任何dll模块,包括系统API函数,通常都是使用内存加载与重定向修复一下,以防止我们的API函数不“干净”,在下一章节将讲解不使用任何API函数遍历调用堆栈的方法!原创 2022-03-04 10:42:07 · 543 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 11.利用ebp返回地址检测非法call函数调用)
这个示例代码已经介绍了如何利用ebp来检测上层的非法call调用,实际上在真正的反作弊场景上,我们肯定不会只检测一层的,会检测很深的层次,当然有个弊端就是检测层次越深,误报就极有可能越多,这里就特别需要配合游戏流程与架构......原创 2022-03-04 10:41:36 · 738 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 10.利用硬件断点 + 结构化异常VEH HOOK与对抗方法)
本章节详细讲述了VEH HOOK与检测、对抗的方法,本文对应的代码在2.09文件夹中。上面这些都只是一些基础的对抗方法,对抗与绕过都是一次思维上的跳跃,欢迎大家参与讨论并留言!原创 2022-03-04 10:41:03 · 1160 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 9.利用硬件断点 + 结构化异常 SEH HOOK)
SEH(Struct Exception Handler,结构化异常)VEH(Vector Exception Handler,向量异常处理)SEH是OS提供给线程来感知和处理异常的一种回调机制。在Intel Win32平台上,由于FS寄存器问题指向当前的TIB(线程信息块),因此FS:[0]处能找到最新的一个原创 2022-03-04 10:40:35 · 1222 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 8.认始 EAT IAT HOOK)
IAT与EAT HOOK示例原创 2022-03-04 10:39:53 · 687 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 7.函数钩子 inline Hook与对抗方法)
提其实在前面的章节已经详细介绍过原理与实现方法,可以点击进入查看https://blog.csdn.net/wangningyu/article/details/122926215这里我们给出一个最简单的的方法即可轻易绕过这种inline hook。首先我们在dll函数中直接伪造一个bypass_MessageBoxW函数,并恢复被之前的机器码字节,再跳转至偏移5字节后的地址即可,实现代码如下原创 2022-03-04 10:37:44 · 547 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 6.初识堆栈、函数调用栈帧、ESP、EBP)
假设目前有一个代码,函数调用顺序是:main ==>> fun1 ==>> fun2 ==>> fun3,那我们该如何在当前函数中(fun3),判断当前这个函数(fun3)正在被哪一个函数调用的,即如何获取到fun2地址呢?原创 2022-03-03 20:00:35 · 348 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 5.图文讲解PE文件结构)
PE即Portable Executable,是Win32环境自身所带的执行体文件格式,其部分特性继承自Unix的COFF(Common Object File Format)文件格式。PE表示该文件格式是跨win32平台的,即使Windows运行在非Intel的CPU上,任何Win32平台的PE装载器也能识别和使用该文件格式的文件。所有Win32执行体(除了VxD和16位的DLL)都使用PE文件格式,如EXE文件、DLL文件等,包括NT的内核模式驱动程序(Kernel Mode Driver)。原创 2022-03-03 20:00:15 · 412 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 4.遍历进程模块(暴力扫描整个内存找出被断链的))
提示:以下是本篇文章正文内容,下面案例可供参考一、前言由于上一章节中的MsgBox已经被抹去PE头、断链隐藏了DLL,导致将无法正常遍历出当前进程的所有模块,这时候就需要用到暴力内存的方法了。因为断链这种方法只能欺骗常规的CreateToolhelp32Snapshot、Module32First、Module32Next三个遍历函数,而当我们真正使用暴力扫描内存的方法后,这个”隐藏“的MsgBox.dll一样能被扫描出来。这里我们得用前面章节介绍的Native API ZwQueryVi...原创 2022-03-03 19:59:41 · 1000 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 3.遍历进程模块(默认))
3.遍历进程模块(默认),利用常规的CreateToolhelp32Snapshot、Module32First、Module32Next三个函数来遍历。原创 2022-03-03 19:59:01 · 396 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 2.作弊器中常见断链隐藏DLL方法)
目前,比较常见的模块隐藏方法有抹去模块的PE头、断开进程的LDR_MODULE链或者Hook模块枚举函数等,这里介绍前面抹去PE头、断链的方法。提示:以下是本篇文章正文内容,下面案例可供参考一、设置环境变量符号表示首先需要在系统环境变量中设置符号表自动下载,如下图:变量名:_NT_SYMBOL_PATH变量值:srv*D:/symbols*http://msdl.microsoft.com/download/symbols这里将是后面VS2010或windbg调试时将用到的.原创 2022-03-03 19:57:47 · 1253 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 1.detours3.0钩子库编译与函数接口说明)
这是来自微软官方的源码文件,最新版已经至4.0支持更高的编译器版本,通常为了考虑兼容XP,我们不建议使用更高版本的detours库,以及Visual Studio版本,本文测试采用detours 3.0以及Visual Studio 2010。当然如果你不考虑XP问题的话,也可以直接使用detours 4.0以及更高的Visual Studio 2019等等。原创 2022-03-03 19:56:49 · 798 阅读 · 0 评论 -
一、C++反作弊对抗实战 (基础篇 —— 8.在ring3调用NtTerminateProcess结束进程)
在ring3调用NtTerminateProcess结束进程原创 2022-03-02 14:22:23 · 399 阅读 · 0 评论