自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (4)
  • 收藏
  • 关注

原创 Windows的字符串函数 lstrlen lstrcpy lstrcpyn lstrcat lstrcmp lstrcmpi sprintf

正如前面谈到的,Microsoft C包括宽字符和需要字符串参数的C语言执行时期链接库函数的所有普通版本。不过,Windows复制了其中一部分。例如,下面是Windows定义的一组字符串函数,这些函数用来计算字符串长度、复制字符串、连接字符串和比较字符串:ILength = lstrlen (pString) ;pString = lstrcpy (pString1, pString2) ;pString = lstrcpyn (pString1, pString2, iCount) ;pStr

2021-03-26 16:30:40 709

原创 strlen () 显示一个宽字符长度为什么都是等于1 ,宽字符要用wcslen () ;

我们都知道如何获得字符串的长度。例如,如果我们已经像下面这样定义了一个字符串指针:char * pc = “Hello!” ;我们可以呼叫iLength = strlen (pc) ;这时变量iLength将等于6,也就是字符串中的字符数。太好了!现在让我们试着定义一个指向宽字符的指针:wchar_t * pw = L"Hello!" ;再次呼叫strlen :iLength = strlen (pw) ;现在麻烦来了。首先,C编译器会显示一条警告消息,可能是这样的内容:‘functio

2021-03-25 16:56:46 600

转载 C++强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast)

将类型名作为强制类型转换运算符的做法是C语言的老式做法,C++ 为保持兼容而予以保留。C++ 引入了四种功能不同的强制类型转换运算符以进行强制类型转换:static_cast、reinterpret_cast、const_cast 和 dynamic_cast。强制类型转换是有一定风险的,有的转换并不一定安全,如把整型数值转换成指针,把基类指针转换成派生类指针,把一种函数指针转换成另一种函数指针,把常量指针转换成非常量指针等。C++ 引入新的强制类型转换机制,主要是为了克服C语言强制类型转换的以下三个缺

2021-03-25 09:08:49 183

翻译 你的第一个Windows程序【Module 1. Your First Windows Program】

在这个模块中,我们将编写一个最小的Windows桌面程序。它所做的就是创建并显示一个空白窗口。第一个程序包含大约50行代码,不包括空白行和注释。这将是我们的出发点;稍后我们将添加图形、文本、用户输入和其他特性。如果您想了解更多关于如何在Visual Studio中创建传统Windows桌面应用程序的细节,请参阅演练:创建传统Windows桌面应用程序(c++)。下面是该程序的完整代码:#ifndef UNICODE#define UNICODE#endif #include <wind

2021-03-21 21:09:59 140

翻译 WinMain:应用程序入口点【WinMain: The Application Entry Point】

每个Windows程序都包含一个命名为WinMain或wWinMain的入口点函数。这是wWinMain的签名。int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow);这四个参数是:hInstance是被称为“实例句柄”或“模块句柄”的东西。操作系统使用这个值来识别可执行文件(EXE),当它加载到内存中。某些Windows函数需要实例句柄——例如,加载图标或位图。

2021-03-21 11:01:33 431

翻译 什么是Window【What Is a Window?】

什么是Window显然,windows是windows的核心。它们是如此重要,以至于人们用它们来命名操作系统。但什么是窗口呢?当你想到窗户的时候,你可能会想到这样的东西:这种类型的窗口被称为应用程序窗口或主窗口。它通常有一个带有标题栏、最小化和最大化按钮的框架,以及其他标准的UI元素。这个框架被称为窗口的非客户区,之所以这样称呼是因为操作系统管理窗口的那部分。框架内的区域是客户区域。这是你的程序管理的窗口的一部分。这是另一种类型的窗口:如果您是Windows编程的新手,您可能会惊讶于UI控件,如

2021-03-21 10:46:15 1192

翻译 处理字符串【Working with Strings】

Windows本身支持UI元素、文件名等的Unicode字符串。Unicode是首选的字符编码,因为它支持所有的字符集和语言。Windows使用UTF-16编码表示Unicode字符,其中每个字符都被编码为16位值。UTF-16字符被称为宽字符,以区别于8位的ANSI字符。对于宽字符,Visual c++编译器支持内置数据类型wchar_t。头文件WinNT.h还定义了以下类型定义。typedef wchar_t WCHAR;您将在MSDN示例代码中看到这两个版本。要声明宽字符字面值或宽字符字符串字面

2021-03-21 10:02:07 111

翻译 windows 编码规范【Windows Coding Conventions】(docs.microsoft.com翻译)

英文原版地址:https://docs.microsoft.com/zh-cn/windows/win32/learnwin32/windows-coding-conventions如果您是Windows编程的新手,当您第一次看到Windows程序时,可能会感到不安。代码中充满了奇怪的类型定义,如DWORD_PTR和LPRECT,变量的名称如hWnd和pwsz(称为匈牙利符号)。花点时间学习一些Windows编码约定是值得的。绝大多数的Windows api由函数或组件对象模型(COM)接口组成。很少有

2021-03-20 21:25:14 459

原创 发包函数 send

找到三大发包函数:send sendto WSASend 或者是重新实现的发包函数,所在的功能函数地址不管是三大发包 函数还是重新实现的发包函数都会调用 WSPSend函数,通过下面的方法可以找到所在功能函数的地址第一步、Ctrl+g 输入 send,找到第 三个CALL,在第三个CALL下断点(WIN7是第三个CALL,WIN10是第CALL)第二步 F7进入这个CALL下面就是 WSPSend,在一个电脑上WSPSend地址是固定的第三步 在这个函数头下断 ,然后两次GTRL+F9 返

2021-03-19 16:33:52 3348 3

原创 硬编码

定长指令:一条指令有多长由Opcode决定,Opcode是必须有的INC 加 1指令,DEC 减1指令XCHG 交换指令改EIP的指令变长指令

2021-03-17 11:53:50 63

原创 两个进程通信

自定义消息自己定义的消息类型WM_USER消息注入,setwindowHOOKEx共享内存匿名管道

2021-03-16 10:03:03 101 1

原创 Win32 InlineHook

内联HOOK函数内部VirtualProtectEx内存地址改为可写属性卸载HOOK函数执行的汇编代码

2021-03-15 16:43:39 119

原创 Win32 IAT HOOK

需要 自己实现的HOOK函数获取IAT 表 函数地址自己定义一个 函数,与系统函数 的参数和一样HOOK的实现过程获取模块的基址 遍历 IAT表里面的函数地址FirstThunk 指向的是IAT表通过函数指针调用没修改过的函数...

2021-03-15 14:51:54 137

原创 win 32注入

怎么编写ShellCode硬编码,一种不依赖外部DELL 和全局变量,可以直接运行的硬编码

2021-03-14 10:15:06 92

原创 OD 使用

先用CE 找到 改写了的地址例如: 0042814E - mov [esi+18],eaxGtrl+g 跳到这个地址F2 设置断点、mov esi,[0x6426E0]mov esi,[esi+0xC]mov esi,[esi+0x14]mov [esi+0x18],eax命令行dd dbdd 表示 data dword 表示到内存以 4个字节查看返回上一层的调用函数1、Ctrl+F9 把当前函数执行到rent 在按F8返回到谁调用它2、在函数头部下断点,然后在堆栈选择 返到

2021-03-12 15:50:18 461

原创 CE的使用 nop

使用nop ,改变一行代码为什么都不做改变后代码注入,实现类似HOOK功能原理就是通过JMP跳转到自己创建的另外一块代码地址,这个代码的地址是我们自己添加的,执行完需要的功能后再跳转回来原来是减少1改为加2CE多级指针查找黑色和绿色显示的区别看看谁改了这个地址3211 放到了 ESI里面的值+18 的地址,ESI里面的值是别人给的,现在就是去找ESI里面的值是哪里来的查看详细信息ESI 里面保存的是地址018F7040 , 再搜索这个地址,看看这个地址是保存在

2021-03-12 10:43:57 1168 1

原创 win32 枚举窗口_鼠标键盘事件函数、DLL函数调用例子

visual 2019 工具查找窗口句柄切换窗口函数的调用例子1、要创建一个函数指针类型2、创建一个函数指针类型的对象3、把包含这个函数的这个DLL加载到4GB空间4、通过GetProcAddress 获取这个函数的地址5、通过函数指针就可以调用这个函数了...

2021-03-11 14:13:01 178

原创 Win32 加密壳_说明

2021-03-11 10:16:47 204

原创 Win32 进程创建(CreateProcess)_句柄表、挂起模式

通过命令行参数创建进程,可以自动打开浏览器并且登录一个网址命令行可以使用简写方式通过应用程序名创建进程也可以命令行参数和完整路径两个参数都写注意命令行参数前面要留一个空格代码延时 void aaa() { STARTUPINFO si = { 0 }; PROCESS_INFORMATION pi; si.cb = sizeof(si); TCHAR szApplicationName[] = TEXT("J://a//Z//D//1.e...

2021-03-10 16:57:02 900

原创 Win32 线程同步与线程互斥

2021-03-10 09:07:53 136

原创 win32 信号量

2021-03-10 09:05:10 300

原创 win32 内核对象互斥体在多进程之间互斥,事件

2021-03-10 08:05:42 108

原创 Win32 互斥体

两种进程直接的线程控制

2021-03-09 15:12:30 92

原创 win32 线程安全 临界区 CRITICAL_SECTION

系统线程切换的操作的结构 CRITICAL_SECTION使用系统提供的CRITICAL_SECTION

2021-03-08 17:01:22 146

原创 Win32 线程控制_CONTEXT结构,线程的暂停、恢复、终止、挂起

进程就是4GB 线程就是EIP创建线程代码

2021-03-08 15:58:13 242

原创 win32 创建线程 CreateTherad、::CreateTherad前面两个冒号的意义

::CreateTherad前面两个冒号的意义CloseHandle

2021-03-08 14:17:42 129

原创 win32 通用控件,WM_NOTTFY通知消息,给win发消息SendMessage

通用控件通用控件是不常用的控件放在一个DLL里面,标准控件是直接可以用的通用控件的消息,WM_NOTTFY通知消息SendMessage获取点击后返回的行

2021-03-07 13:09:29 183

原创 Win32 提取图标_修改标题,PE结构的资源表

设置图标PE结构的资源表位段或位域结构1、对位的精确控制2、这个union联合体结构存储内容的含义,要通过最高位是1还是0来决定图标提取工具

2021-03-07 09:13:12 255

原创 Win32 资源文件_消息断点

通过资源文件创建窗口

2021-03-06 15:32:13 137

原创 Win32 子窗口_消息处理函数@按钮

按钮的本质定义按钮代码void CreateButton(HWND hwnd){ HWND hwndPushButton; HWND hwndCheckBox; HWND hwndRadio; hwndPushButton = CreateWindow( TEXT("button"), TEXT("普通按钮"), //WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_DEFPUSHBUTTON, WS_CHILD | WS_V

2021-03-06 14:04:43 483 2

原创 win32 消息、事件、创建一个窗口

消息消息记录了事件,消息就是对事件的描述

2021-03-06 08:45:00 272

原创 通过GetLastError 获取win32 api 的错误信息

win32 api出错不会有错误提示信息,所以要通过GetLastError 获取错误代码找到错误原因 MessageBox((HWND)1, 0, 0, 0); DWORD erroCode= GetLastError(); DbgPrintf("错误代码:%d\n", erroCode);根据错误代码找到错误原因方法一:直接在软件上面查方法二:通过MSDN 文档查找...

2021-03-05 11:53:29 389

原创 win32应用程序仿C语言printf函数格式化输出到调试窗口

仿printf函数格式化输出DbgPrintf(“hello print:%d %d %d\n”, 10, 20, x);.h头文件#pragma oncevoid __cdecl OutputDebugStringF(const char* format, ...);#ifdef _DEBUG #define DbgPrintf OutputDebugStringF #else #define DbgPrintf #endif .cpp文件#include "

2021-03-05 11:36:00 306

原创 win32 宽字符 L“X“

宽字符指的的是要系统按UNICOED表,需要在字符串前面加 L ,如果不加系统就会按默认的ASCII表

2021-03-05 11:25:55 218 1

原创 数据结构 二叉树

二叉树1、查找、新增,删除都有比较好的性能根据某个节点计算高度二叉树实现

2021-03-04 16:01:05 53 1

原创 数据结构@链表

单链表链表的框架节点头指针

2021-03-04 14:30:28 49 1

原创 数据结构 Vector @(向量、顺序表、可变数组)知识点:模板类型的使用,memcpy内存拷贝函数

Vector叫法很多=向量,顺序表,可变数组1、特点是数据是连续存储的;2、是一个动态数组,例如本来创建一个10个大小的数组,发现不够用了,它就创建一个大一点的数组,把原来的数据复制过来Vector的实现构造函数定义初始化赋值的一种写法无参构造函数定义调用使用了模板的类创建到堆内存的代码书写格式注意调用后面加()调用后执行结果测试一下用一个结构来分配空间是什么效果代码修改如下结构体是12个字节大小,分配到了 120个字节空间大小有参的构造函数字节定义创建空间大小

2021-03-04 11:22:41 285 1

原创 C++ 关键词 new delete

new 在堆里面申请空间new 本质就是调用 C语言里面的 malloc函数,在堆里面向系统申请了内存空间下面这个代码的意思是 在堆里面创建一块int 大小的空间new的写法的区别类是怎么new出来的delete 释放堆里面的空间delete 本质就是调用 C语言里面的 free函数delete汇编释放数组new类也可以用数组,释放的时候加[]...

2021-03-03 16:35:43 144 2

原创 c++ 运算符重载 operator

运算符重载本质就是给函数取一个运算符的名字,是编译器层做的事情。常规定义:改为运算符重载后声明定义调用

2021-03-03 14:59:28 79

原创 C++友元函数 friend ,关键字 const 设置只读类型为属性

关键字const1、加类型前面加 const2、如果不想改变一个变量的值,也就是向作为只读的一个类型,就可以声明在前面添加 const ,如果改了编译器就会报错提醒友元函数 friend给类交朋友,朋友就可以访问该类的私有成员,这个编译器级别做的事情。3、同样还有友元类,和友元函数道理是一样的...

2021-03-03 14:13:59 822

DriverMonitor.zip

驱动安装工具

2021-01-14

VirtualKD-Redux-2020.2

如果VirtualKD-3.0不能连接成功,用这个试试,方法一样,亲测有效

2020-12-23

DebugView 微软官方原版

微软官方原版

2020-12-23

空空如也

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

TA关注的人

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