自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

转载 InlineHook

计算偏移 = 自己创建的函数的地址 - 要Hook的函数地址 - 5,第一个字节为0xE9,构成无条件跳转指令。将前面构造的无条件跳转写入Hook函数地址处,大小为5字节,并保存之前的数据,以便修复。构建自己函数的时候一定要加上调用约定,否则新函数会默认使用C语言的调用约定,这回。加载函数所在的模块,获取要Hook的函数地址。导致在函数返回过程中,因堆栈不平衡而报错。根据要hook函数的原型创建自己的函数。修改目标页属性,是其可读可写可执行。

2022-11-10 21:44:02 403 1

转载 C/C++ x64 Inline Hook 代码封装

接着来研究一下64位程序的Hook,64位与32位系统之间无论从寻址方式,还是语法规则都与x32架构有着本质的不同,所以上面的使用技巧只适用于32位程序,注入32位进程使用,下面的内容则是64位下手动完成Hook挂钩的一些操作手法,由于64位编译器无法直接内嵌汇编代码,导致我们只能调用C库函数来实现Hook的中转.简单实现64位Hook去弹窗: 由于64位编译器无法直接内嵌汇编代码,所以在我们需要Hook时只能将跳转机器码以二进制字节方式写死在程序里,如下代码是一段简单的演示案例,主要实现了去弹窗的功能.

2022-11-10 17:27:31 903

转载 C语言 将十六进制字符串转为十六进制数 (二进制、十进制都适用)

参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换,但遇到如’0x’前置字符则会使用16进制做转换、遇到’0’前置字符而不是’0x’的时候会使用8进制做转换。一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(‘\0’)结束转换,并将结果返回。这里主要是两个参数:nptr(要转换的字符串)、base(代表采用的进制方式)

2022-10-27 00:53:30 1356

转载 Lua调试:getinfo详解

(0:getinfo自身,1:调用getinfo的函数f1,2:调用f1的函数f2,…(2)arg:该参数是一个字符串,其中每个字符代表一组字段,用于指定希望获取哪些信息,可为 “n”,“S”,“l”,“u”,“f”,“L” 中的一个或他们的组合。name:函数名, namewhat:函数类型(field, upvalue, global),what:函数类型(Lua, C, main),3.返回值:返回一个包含函数信息的table,table的内容由参数arg决定,包含哪个函数的信息由level决定.

2022-10-11 21:07:39 1186

转载 windows api 文件读写

输入参数,共享模式。输入参数,读取数据的文件对象,由CreateFile创建,调用CreateFile打开文件时,需要指明GENERIC_READ读取操作模式或者GENERIC_WRITE写入操作模式。在读的过程中,文件指针会随着读操作的进行而自动移动,在循环调用本函数时,会顺序读出文件的内容,如果程序返回失败,可以使用GetLastError函数获取错误信息。输入参数,写入数据的文件对象,由CreateFile创建,调用CreateFile打开文件时,需要指明GENERIC_WRITE读取操作模式。

2022-09-22 00:58:10 1882

转载 lua 中的面向对象

这里先生成一个 People “对象”, 然后把这个对象 Key 对应的 value 替换成 Man 中 Key 对应的 value, 这样的话, 如果 Man 中没有 “重写” People 中的方法, 那么, 返回的 self 中的方法还是为 People 中的方法, 如果 “重写” 了 People 中的方法, 因为做了替换操作, 所以返回的 self 中的方法其实是对应的 Man 中的方法.新问题是, 我们都知道, C++ 类有个 this 指针, 这点, 又要怎么实现呢?

2022-08-25 11:53:04 148

原创 VMProtect使用说明

VMProtect使用说明一. 接口说明二. 使用方法必须有相对应的VMProtectEnd结束。比如:保护的单元是函数,而不是整个EXE代码比如:保护嵌套情况字符串保护应使用VMProtectDecryptStringA或VMProtectDecryptStringW函数保护名为字符串,被保护后,明晚字符串不再出现在内存,除非被解密的那一刻!调用方法:.........

2022-06-17 00:54:41 3633

转载 MFC CHotKeyCtrl控件

知识点:CHotKeyCtrl控件获取热键数据注册热键响应热键事件一、CHotKeyCtrl控件void SetHotKey( WORD wVirtualKeyCode, WORD wModifiers );二、获取热键数据DWORD GetHotKey( ) const;void GetHotKey( WORD &wVirtualKeyCode, WORD &wModifiers ) const;三、注册系统热键RegisterHotKeyThe Registe

2022-05-30 02:14:52 203

转载 MFC--快捷键(组合键/热键)与按钮实现操作按钮的方法

首先插入一按钮,将其visible属性设为False,ID如设为:IDC_BTN_FASTKEY;然后双击它,进入代码编辑界面,编辑代码,实现所要的功能;最后如下操作添加加速键:1 插入一个新的Accelerator(加速键)到资源中,把加速键和对应的响应控件(这里是一个按钮,其ID为:IDC_BTN_FASTKEY)与您选择的组合键设好关联起来,如可以与Ctrl+Alt+空格关联起来;2 在按钮所在对话框的CPP文件所对应的头文件中public声明: HACCEL m_hAccel;virt

2022-05-28 00:00:56 1263

转载 ESP32: 使用ILI9341(parallel)液晶模组显示JPEG图像

ESP32採用双核心执行( core 0解码 ,core 1显示图像 )提升速度。使用ILI9341模组(parallel介面附SD卡插槽), 显示存在SD卡上的JPEG相片。程式会读取根目录下jpg档案(宽高必须为320*240,档名为数字10-14),显示2秒钟后换下一张,一直重複。零件表:ESP WROOM-32开发板 x1ILI9341TFT LCD 320x240液晶萤幕 x1线路图:选"ESP32 Wrover Module"安装ILI9341驱动及JPEG解码库。https:

2022-05-23 22:46:09 2991 2

原创 Arduino uno esp01s 硬串口通信

参考资料:esp 烧录固件 和 烧录程序esp 通信测试程序ili9341 tft显示屏使用零件:Arduino unoili9341 tftesp01susb 烧录器最初的想法是, 弄一个BTC 和 ETH 价格显示的小电视,找了找手上有的硬件就这几样,于是就开始了折腾。首先声明我是菜鸡一个, C++ 也就学了半桶水,硬件更是十分业余,我的方法也许你不一定能直接套用。一开始就有个很严重的问题, 就是 Arduino 插上 我这块屏幕就没有多余的接口,来给esp做软串口通信了, 所.

2022-05-20 06:02:02 3552

原创 C++ 调用 DmReg.dll 加载 大漠 笔记

VS2019 编译通过// 初始化COM(mta)CoInitializeEx(NULL, 0);// 声明 指针函数typedef BOOL (_stdcall *Dm_SetPath)(char *Path, BOOL Number);// 获取exe 根目录char Temp[MAX_PATH] = { 0 };GetModuleFileName(NULL, Temp, MAX_PATH);ExePath.Format("%s", Temp);ExePath = ExePath.

2022-04-10 22:01:13 2044 1

转载 对WM_NCHITTEST消息的了解+代码实例进行演示

这个消息比较实用也很关键,它代表非显示区域命中测试。这个消息优先于所有其他的显示区域和非显示区域鼠标消息。其中lParam参数含有鼠标位置的x和y屏幕坐标,wParam 这里没有用。Windows应用程序通常把这个消息传送给DefWindowProc,然后Windows用WM_NCHITTEST消息产生与鼠标位置相关的所有其他鼠标消息。通俗的讲从消息产生消息。case WM_NCHITTEST:return (LRESULT)HTNOWHERE;以上代码能禁用窗口的所有显示区域和非显示区域鼠标消息,

2022-04-05 00:21:43 710

转载 MFC 拖动无边框窗体

内容转载自https://www.bilibili.com/video/BV1AT4y137gS?p=35hpp //定义全局变量BOOL m_bMoving;CPoint m_ptMouse;cppCMFCApplication11Dlg::CMFCApplication11Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMFCApplication11Dlg::IDD, pParent){ m_hIcon = AfxGet

2022-04-02 06:02:25 512

转载 MFC error C2143: 语法错误 : 缺少“;”(在“*”的前面)

MFC error C2143: 语法错误 : 缺少“;”(在“”的前面)error C2143: 语法错误 : 缺少“;”(在“”的前面)error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int//a.h #include "b.h" class A { .... private: B b; };//b.h #include "a.h" cl

2022-03-29 17:57:59 1772 1

原创 chromebook 笔记本 TrueNas 设置 wifi 连网

需要用到:Intel WiFi网卡驱动https://packages.debian.org/bullseye/firmware-iwlwifiwireless-tools WIFI 连接工具https://packages.debian.org/bullseye/wireless-toolswireless-tools 连接工具 依赖包https://packages.debian.org/bullseye/libiw30安装好 TrueNas我的版本是 TrueNAS-SCALE-22.

2022-01-30 03:43:52 5639 3

转载 MFC 字符串按分隔符分割

CString m_str1="123,789,654,339";int count = m_str1.Replace(',', ' ');if(count<=0){printf("No data");return;}int* num = new int[count];int pos = m_str1.Find(' ');int i = 0;while(pos != -1){CString field = m_str1.Left(pos);num [i] = atoi(fie

2022-01-07 22:45:07 610

转载 VS 2019 编译 汇编 文件

1、右键 .asm 文件,点击“属性”。2、在项类型里选择“自定义生成工具”。3、点击应用,然后点击左边“自定义生成工具”里的“常规”。4、在“命令行”里输入ml64 /c %(fileName).asm在“输出”里输入%(fileName).obj;%(Outputs)5、点击“确定”,然后重新编译。值得注意的是, 仅 .asm 文件需要设置 .h 文件不用设置...

2021-12-28 22:59:18 1211

原创 c语言 字符串 强制转换

CString from charCString StrPath;USES_CONVERSION;char DllPath[MAX_PATH] = { 0 };strcpy(DllPath, T2A(StrPath));//strcpy(DllPath, W2A(StrPath));CString StrPath;USES_CONVERSION;char *DllPath = T2A(StrPath);//char *DllPath = W2A(StrPath);CString fr

2021-12-28 04:51:45 1656

原创 文件夹拷贝 不提示

SHFILEOPSTRUCT sfo;sfo.hwnd = NULL;sfo.wFunc = FO_COPY;sfo.pFrom = "c:\\My_Docs1\0";sfo.pTo = "c:\\My_Docs2\0";sfo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;hr = SHFileOperation(&sfo);

2021-12-28 02:55:01 175

转载 MFC对话框提示“未定义的基类CDialogEx“

问题:MFC对话框提示"未定义的基类CDialogEx"解决:检查头文件afxdialogex.h另外注意:#include “stdafx.h” 一定要放在第一行

2021-12-27 00:59:42 1167

转载 C++嵌入DLL到资源运行释放的问题

以前写过一篇《C#嵌入dll到资源释放的问题》。虽然相对于C#,C++中嵌入DLL到程序资源中,然后再释放出来的应用场合并没有那么多,但是还是有必要了解下一般的过程。结合本人在实际工作中解决此类问题的实践思路,这里介绍下最基本的一种解决方案。1 嵌入DLL到资源有些程序运行的时候,需要调用外部的DLL,用户使用时可能会不小心丢失这些DLL,导致程序无法正常运行,因此可以考虑将这些DLL嵌入到资源中,程序启动时自动释放到可执行程序目录(或者其他环境变量目录)。这里以嵌入FFmpeg+SDL开发所需要的DL

2021-12-26 23:51:24 1328

转载 主线程调用过环境检查以及防止游戏崩溃

先给大家说两种情况,也许这些情况都是你遇见过的。案例一,逆向软件,调试游戏找到了某个CALL,我们编写DLL,把这个call写入到DLL中,然后把DLL注入到软件内部,对这个CALL进行调用,发生游戏直接崩溃报错的情况。又或则直接用代码注入器编写内联汇编直接注入代码导致崩溃。(有的时候代码注入器不会出问题,因为他是进程挂靠的方式 优于DLL中非主线程调用的方式)图片案例二,编写了具有单一功能或则是一系列功能的DLL,测试以后功能正确,代码无误,可是总是在长时间运行时出现莫名其妙的崩溃情况。其实这

2021-12-15 21:46:34 1851

原创 vs2019 mfc dll 使用的lua工程方案 笔记

按照网址一的方法,制作 然后编译的时候会出现错误,使用网址二的方法 可以决绝,并且成功编译。网址1:https://blog.csdn.net/m0_46135508/article/details/121240436网址2:https://blog.csdn.net/m0_46135508/article/details/121667750...

2021-12-02 00:00:12 414

转载 VS2010编译静态链接MFC的OCX遇到的问题:nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 LIBCMTD.lib(dllm

打开工程属性页,配置属性->链接器->输入,忽略特定默认库添加LIBCMTD.lib;nafxcwd.lib附加依赖项添加nafxcwd.lib;LIBCMTD.lib目的是调整依赖库链接顺序。其他类似的问题也可以这样解决。如何查看依赖库的链接顺序呢?同样在链接器->命令行,其他选项中添加/verbose:lib重新build,就可以看到了。...

2021-12-01 23:55:13 291

转载 BMP位图结构很详细的说明和示例

一、文件格式Bmp文件是非常常用的位图文件,无论是游戏还是其他都被广泛使用。针对bmp文件的处理也有一堆现成的api进行调用,然而文件内部究竟怎样,如何自己来解析这样的文件呢?为了消除无聊,我用了几天时间来研究了一下,同时作为学习笔记,进行记录。首先,整个bmp文件的内容可以分为3到4块。之所以分为3到4块而不是固定的值,是因为,对于bmp来说可能存在调色板或者一些掩码。具体稍候讨论。第一块是bmp的文件头用于描述整个bmp文件的情况。结构如下:typedef struct tagBITMAPFI

2021-11-24 05:20:02 1052

转载 C++ MFC 调用 Lua

这几天研究了一下lua,主要关注的是lua和vc之间的整合,把代码都写好放在VC宿主程序里,然后在lua里调用宿主程序的这些代码(或者叫接口、组件,随便你怎么叫),希望能用脚本来控制主程序的行为。这实际上也是一种把业务分离,用脚本控制的架构,可能有些人把这种脚本叫做业务引擎,工作流等。为什么选择lua?因为它是一个能和C/C++结合得很紧的脚本语言,而我们的程序是用VC++ 写的;另外一点是因为它的名气,连WOW都用lua来提供API让玩家修改其游戏行为,那我是找不到什么理由拒绝它了。Lua是什么?在

2021-11-10 01:25:38 705

转载 使用C/C++语言遍历lua的table表

在宿主语言中操作lua的表跟在lua语言中的操作实际上很相似。在lua中我们多数时候是调用 pairs/ipairs 来迭代,不会直接使用 next 函数。但在宿主语言中只有 next,所以有必要讲下 lua 中 next 的用法:置 local k, v = nil,即先用 nil 调用 next 开始迭代;调用 k,v = next(table, k);如果 k ~= nil,则代表 k 和 v 是一对有效值;否则转到结束;使用 k, v;回到第2步,用此时的 k 再次调用 k, v = n

2021-10-31 20:51:30 623

原创 调用大漠插件5.1423

DWORD dmaddr=(DWORD)GetModuleHandle(“dm.dll”);(DWORD)(dmaddr+0x1063D0)=1;

2021-10-18 17:39:24 777

原创 关于 VS 2019 GetProcAddress 127 错误

https://github.com/hfl15/windows_kernel_development首先感谢 https://www.cnblogs.com/fanling999/p/4592740.html写的HOOK文章,很详细原因是这样的 在练习写 HOOK 源码:发现别人的项目,在VS2019下生成可以调用而我照抄别人的源码一字不漏,也不能调用。依然Getlasterror 127,代码敲一小时,就为这调用弄了两小时。感叹 C++ 水真深,所以写下来记录下。百度了很多文章,千篇一律

2021-10-17 08:05:04 639

原创 SendMessage

SendMessage(hwnd, WM_LBUTTONDOWN,0, MAKELPARAM(x,y));SendMessage(hwnd, WM_LBUTTONUP, 0,MAKELPARAM(x,y));

2021-10-14 16:31:35 215

转载 C/C++ 扫描特定进程内存状态

C/C++ 扫描特定进程内存状态扫描内存分页情况:#include <iostream>#include <windows.h>VOID ScanMemory(HANDLE hProc){ SIZE_T stSize = 0; PBYTE pAddress = (PBYTE)0; SYSTEM_INFO sysinfo; MEMORY_BASIC_INFORMATION mbi = { 0 }; //获取页的大小 ZeroMemory(&sysinf

2021-09-03 12:29:55 836 1

转载 c++ 怎样用一个函数返回两个参数?

写一个简单的吧,不用结构体的。#include "iostream.h"void calcu(int *a,int *b,int *l,int *angle){//进行相应的操作//比如...*l += *a;*angle += *b;//不需要return,l、angle的值已经改变了,因为传递函数参数是指针类型}void main(){int a1=1,a2=2,a3=3,b1=4,b2=5,b3=6;int l=2,angle=2;calcu(&a1,&b1

2021-08-10 23:38:07 1597

转载 分享一个简单易用的python并行模块【PP模块】

目前个人计算机大都是多核的,但是在运行python程序的时候会发现实际上只有一个核心(CPU)在跑代码,另外几个核心都在偷懒呢,如下图并行计算的目的是将所有的核心都运行起来以提高代码的执行速度,在python中由于存在全局解释器锁(GIL)如果使用默认的python多线程进行并行计算可能会发现代码的执行速度并不会加快,甚至会比使用单核心要慢!!!一些并行模块通过修改pyhton的GIL机制突破了这个限制,使得Python在多核电脑中也能够有效的进行并行计算。PP(Parallel Python)模块就是

2021-07-24 18:31:04 903 1

转载 python 控制台单行刷新,多行刷新

先贴出单行刷新实现的进度条:对于控制台的单行刷新,比较简单,先直接贴出代码:strarrs = ['/','|','\\'] for i in range(15): sys.stdout.write(strarrs[i % 3]+'{}/15:'.format(i+1)+'#' * i+'\r') sys.stdout.flush() time.sleep(1)对于单行刷新以及坑1.print是对sys.stdout.write的友好封装,利用sys.stdou.

2021-07-24 03:43:34 1740

转载 python 实现线程之间的通信

python 实现线程之间的通信  前言:因为GIL的限制,python的线程是无法真正意义上并行的。相对于异步编程,其性能可以说不是一个等量级的。为什么我们还要学习多线程编程呢,虽然说异步编程好处多,但编程也较为复杂,逻辑不容易理解,学习成本和维护成本都比较高。毕竟我们大部分人还是适应同步编码的,除非一些需要高性能处理的地方采用异步。首先普及下进程和线程的概念:进程:进程是操作系统资源分配的基本单位。线程:线程是任务调度和执行的基本单位。一个应用程序至少一个进程,一个进程至少一个线程。两者区别

2021-07-23 00:15:41 1122

转载 Python中用Ctrl+C终止多线程程序的问题解决

花了一天时间用python为服务写了个压力测试。很简单,多线程向服务器发请求。但写完之后发现如果中途想停下来,按Ctrl+C达不到效果,自然想到要用信号处理函数捕捉信号,使线程都停下来,问题解决的方法请往下看:#!/bin/env python # -*- coding: utf-8 -*- #filename: peartest.py import threading, signal is_exit = False def doStress(i, cc): global is_

2021-07-22 17:01:15 1862

转载 爬虫中获取cookie的方式

为什么要获取cookie?因为有的页面爬取的时候,需要登录后才能爬,比如知乎,如何判断一个页面是否已经登录,通过判断是否含有cookies就可以,我们获取到cookie后就可以携带cookie来访问需要登录后的页面了。方式一使用session这里的session并不是django中的session,而是requests中的sessionimport requestsurl = 'https://www.processon.com/login'login_email = '[email protected]

2021-07-19 05:11:33 5659

转载 在python列表中删除所有空元素

今天在测试数据的时候偶然发现一个问题,如下:test = ['a','','b','','c','','']for i in test: if i == '': test.remove(i)print(test)Out[3]: ['a', 'b', 'c', '']for循环居然不能删除列表中所有空值!偶然收到@有问题尽管问我 发的消息,才对此问题有些明白。下面是他的原话:for的计数器是依次递增的,但列表的内容已通过remove更改,i迭代的值为a ‘’ ‘’ ‘

2021-07-19 01:09:22 12645 2

转载 获取指定进程的加载基址

背景之前,自己写过一个进程内存分析的小程序,其中,就有一个功能是获取进程在内存中的加载基址。由于现在Windows系统引入了ASLR (Address Space Layout Randomization)机制,加载程序时候不再使用固定的基址加载。VS默认是开启基址随机化的,我们也可以设置它使用固定加载基址。至于什么是ASLR?或者ASLR有什么作用?本文就不深入探讨了,感兴趣的,可以自己私下了解了解。本文就是开发这样的一个小程序,使用两种方法来获取获取指定进程的加载基址...

2021-07-13 20:04:21 3477 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除