随便写写
搬砖道人
这个作者很懒,什么都没留下…
展开
-
EXE检查自己是否被修改
EXE检查自己是否被修改原创 2022-05-14 20:12:31 · 806 阅读 · 0 评论 -
C++检测自己是否被调试
要检测自己是否被调试主要有调用API和获取PEB标志PEB标志主要检测BeingDebugged 和NtGlobalFlag ,当然检测一个就行了,一般来说如果一个被调试器的反检测调试功能修改那另外的一般也跑不了,对于x86 PEB读取 fs[0x30]即可,对于x64读取gs[0x60]即可,BeingDebugged的偏移为固定的0x002,NtGlobalFlag因为两者结构不一样所以偏移也不一样x86:0x68 x64:0xbc。NtGlobalFlag如果被调试其值为0x70。而API有.原创 2022-05-11 11:02:30 · 3123 阅读 · 0 评论 -
由sendmessage引发的血案
某项目里使用了soui的通知中心的SRUNONUISYNC实现ui和后台线程之间的同步!发现窗口关闭时后台线程小概率出现随机join后死锁现象!由于这个现象出现的几率很小十分难调试,在我本机甚至无法复现,只得研究代码过程!好在代码量不大,排除几处可能得情况,最后锁定在SRUNONUISYNC上!因为它的原理就是使用SendMessage来实现同步!那么为什么它会发生死锁呢?首先这个关闭动作发生在一个消息处理过程中即鼠标点击事件,这个时候如果SendMessage的情况则分两种,一是来自本ui线程,这个时候它原创 2022-05-07 00:16:22 · 309 阅读 · 0 评论 -
C++获取CPUID
#include <intrin.h> std::array<int, 4> cpuid; __cpuid(cpuid.data(), 1); char cpuid_buf[17]; sprintf_s(cpuid_buf, "%08X%08X", cpuid[3], cpuid[0]); std::cout << cpuid_buf << std::endl;经测试__cpuid(cpuid.data(), 1); 和__cpuide原创 2022-05-05 09:18:51 · 2445 阅读 · 0 评论 -
VCPKG使用入门
关于VCPKG编译和使用基本方法,其它文章已经说得很清楚。我也是依照各位大佬的文章学习了不少东西。下面说说我的使用发现。一、库和它支持库都是一直更新的,所以一般用一段时间就可以更新一次,以便获取新加入的库的支持。二、怎么知道它支持哪些库,查看 子目录下的 ports。这个每个文件夹就对应一个库。vcpkg install 加上这个目录的名字即可安装对应的库。三、部分库会提供一些选项提供一些编译和库特性。这个参数使用方法如下:vcpkg install 库名[选项]:版本选项库名,已经在上原创 2022-02-01 22:01:09 · 1787 阅读 · 0 评论 -
利用巴法云控制电脑
官方网站地址https://cloud.bemfa.com/上面地址有详细说明。如果自己有服务器也可以自己利用各种语音平台提供有SDK来接入。我自己只有一个天猫精灵,所以我这里接入的天猫精灵,没有服务器所以使用现成的。就是上面的巴法云,当然这种平台其实还是挻多的。我是随便选择的一个。对于巴法云来说接入很简单。第一步:注意一个巴法云帐号第二步:登陆以后找到控制台,这里有私钥。这个就是接入时的验证。第三步:建立一个主题,当然它不是你想建立什么就建立什么的,巴法云物联网平台默认接入天猫精灵控.原创 2022-01-31 20:49:37 · 4909 阅读 · 2 评论 -
zlib实现流式解压
#define CHUNK_SIZE 4096class CZipFileStream { // zlib支持. z_stream m_stream; int m_last_inflate_; // 解压缓冲. char m_zlib_buffer[CHUNK_SIZE]; // 输入的字节数. std::size_t m_zlib_buffer_size; std::ifstream& m_fs; bool m_auto_close_fs;public: /// <.原创 2021-09-17 19:40:26 · 1087 阅读 · 0 评论 -
禁止 ctrl+alt+del
BOOL DisableCTRL_ALT_DEL(bool bDisable) { if (bDisable==suspend) return FALSE; //bDisable ? Suspend(_WinLoginPid) : Resume(_WinLoginPid); typedef DWORD(WINAPI* NtProcessAPI)(HANDLE ProcessHandle); HMODULE h_module = LoadLibrary(L"ntdll.dll".原创 2021-06-27 13:41:24 · 513 阅读 · 0 评论 -
键盘钩子里区分按键
在做一个键盘测试demo时需要区分一些复合键。比如在数字键区当Num按下和按上时按键是不一样的,但是它们和其它区的按键是相同的,比如Ins,Del,上,下左右或者是翻页。通过测试发现KBDLLHOOKSTRUCT里有一个flags标记,它可以区分按键。上代码,std::map<int, int> idlist = { {VK_END,VK_NUMPAD1}, {VK_RETURN,313}, {VK_UP,VK_NUMPAD8}, {VK_DOWN,VK_NUMPAD2}, {V原创 2021-03-05 17:32:38 · 589 阅读 · 0 评论 -
c++使用fmt::format格式化字符串
C++格式化字符串一直是个老大难,要么用系统API,要么用C库函数,要么自己写。最近std::format终于在C++20来了。。。cpp在一边不停加入新特性,实用的东西还是不少,比如cpp11的多线程支持,cpp17的filesystem等等,而网络库还不知道在哪。但是这些东西似乎来得太迟。cpp的现状却是很惨。其它语言很快崛起很大的原因就是基础库很全,你可以烂,可以不好用,但你不能没有啊。什么轮子都要自己造。吐槽完毕。而vs2019仍然没有加入std::format支持,所以先自己用fmt::for原创 2021-02-22 16:40:17 · 21699 阅读 · 0 评论 -
应用程序错误0xc000007b
现在此错误基本可以肯定是需要加载的DLL版本不一致或不存在(个人觉得应该一般都是不一致,因为不存在DLL时会提示无法加载XXX DLL)。网上有不少修复方法。但是都没有说到重点。当然它们也能解决问题。因为你可能正好缺了运行时库或DX版本的DLL。因为很多现在的DLL从外面是看不出32位还是64位的。你可以做一个实验,如果是某DLL不存在时,直接会提示XXXdll无法加载。但是你放一个名字一样的不同位数的则会直接出现应用程序初使化错误0xc000007b。系统并不会提示是因为版本不对。...原创 2021-02-04 21:14:20 · 201 阅读 · 1 评论