自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 ipHeader.Version_HLen=(4 << 4| sizeof(ipHeader) / sizeof(unsigned long))解析

typedef struct IpHeader{ u_char Version_Hlen;//首部长度IP版本号,1字节 u_char TOS;//服务类型TOS short Lengh;//总长度,2字节 short Iden;//标识 short Flags_Offset;//标志 u_char TTL; u_char Protocl;//协议 short Checksum;//首部校验和 unsigned int Source.

2020-12-31 20:03:18 433

原创 Winsock编程笔记[2]

1. WSAEventSelect模型2. Select模型3. WSAAsyncSelect模型

2020-12-31 19:59:01 230

转载 使用WSAIoctl获取AcceptEx函数指针

Winsock2的其他供应商不一定会实现AcceptEx函数。同样情况也包括的其他Microsoft的特定APIs如TransmitFile,GetAcceptExSockAddrs以及其他Microsoft将在以后版本的windows里。 在运行WinNT和Win2000的系统上,这些APIs在Microsoft提供的DLL(mswsock.dll)里实现,可以通过链接 mswsock.lib或者通过WSAioctl的SIO_GET_EXTENSION_FUNCTION_POINTER操作动态调...

2020-12-31 16:28:59 653

原创 Qt学习笔记[11]

1. QStringListModelQStringListModel主要用于处理字符串序列,一般与QListView联用。setStringList(const QStringList &strs): 初始化QStringListModel setModel(): 把数据模型关联到视图组件上 setEditTriggers(): 设置视图组件是否可编辑(该方法不属于QStringListModel)removeRows: 删除多行rowCount(): 获取数据模型.

2020-12-31 14:17:59 1518

转载 DDOS拒绝服务攻击种类与概念介绍

一、 简述随着网络技术和网络应用的发展,网络安全问题显得越来越重要,已经被提到一个很高高的高度。DDOS攻击随着互联网的快速发展,也日益猖獗,从原来的的几兆、几十兆,到现在的几十G、几十T的流量攻击,形成了一个很大的利益链。DDOS攻击由于容易实施、难以防范、难以追踪等而成为最难解决的网络安全问题之一,给网络社会带来了极大的危害。同时,拒绝服务攻击也将是未来信息战的重要手段之一。DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速

2020-12-30 13:41:35 1863

原创 Qt学习笔记[10]

1. Qt设计界面与运行不一致的解决办法插入如下代码: if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);在这个位置:2. QComboBox首先在UI界面上,可以双击ComboBox控件以添加默认拥有的项, 如下:ComboBox的主要方法如下:clear(): 清除ComboBox的所有

2020-12-29 13:19:25 2591

转载 Windows下OVERLAPPED相关的异步socket函数介绍

windows提供一组关联OVERLAPPED结构的套接字操作WSASocket、WSASend、WSARecv、WSAIoctl等。1:WSASocketDescription:The WSASocket function creates a socket that is bound to a specific transport-service provider.1 SOCKET WSASocket(2 __in int af,3 __in .

2020-12-27 21:41:29 434

转载 ICMP协议详解

ICMP协议详解ICMP协议是一个网络层协议。一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。所以我们就需要一种协议来完成这样的功能–ICMP协议。ICMP协议的功能ICMP协议的功能主要有:1. 确认IP包是否成功到达目标地址2. 通知在发送过程中IP包被丢弃的原因如下图所示:我们需要注意几点:1.ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结

2020-12-27 17:35:39 1453

原创 Winsock编程笔记[1]

0. 字节顺序TCP/IP统一规定使用大尾方式传输数据,即网络字节序Intel/AMD的计算机一般都是小尾方式存储数据所以当计算机想通过网络传输一串数据给另一台计算机时, 都会经历如下过程的转换1. inet_addr与inet_ntoa1. inet_addr是把由小数点分割的IP地址字符串转成由32位二进制表示的网络字节序IP地址IP字符串 => 32位网络字节序IP原型如下:2. inet_ntoa是把32位二进制表示的网络字节序IP地址转成由小数点.

2020-12-27 17:29:16 485

原创 Qt学习笔记[9]

1. QListView

2020-12-27 11:29:20 164

转载 inet_aton, inet_ntoa, inet_pton, inet_ntop解析

1.把ip地址转化为用于网络传输的二进制数值 int inet_aton(const char *cp, struct in_addr *inp); inet_aton() 转换网络主机地址ip(如192.168.1.10)为二进制数值,并存储在struct in_addr结构中,即第二个参数*inp,函数返回非0表示cp主机有地有效,返回0表示主机地址无效。(这个转换完后不能用于网络传输,还需要调用htons或htonl函数才能将主机字节顺序转化为网络字节顺序) in_addr_t i

2020-12-26 19:46:53 626

原创 gethostname与gethostbyname解析

这两个函数调用前必须先调用WSAStartup()进行初始化先来看下gethostname的原型:其作用是返回本地计算机的主机名,成功返回0,失败返回SOCKET_ERROR(-1)。来看一个例子:来看下gethostbyname的原型:其作用是输入计算机主机名获取一个hostent的结构体,该机构内容比较丰富,来看一下:接下来我们调用一下,然后将所有内容打印出来:可以看到我计算机有3张网卡(其实有2是虚拟网卡)。看一下代码:(完)...

2020-12-26 19:35:29 1110

原创 winsock2.h重复包含问题

如果是如下形式:#include <windows.h>#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")会导致一大堆的重定义错误,其原因不深究(其实原因也很简单)只要知道怎么才可正确包含即可。正确的做法有两种, 第一种:#include <winsock2.h>#include <windows.h>#pragma comment(lib, "ws2_32.lib")

2020-12-26 18:54:39 426

转载 IP TCP UDP ICMP校验和的区别和计算

IP校验和的计算IP数据报的校验和只检验IP数据报的首部。当发送IP包时,需要计算IP报头的校验和:把校验和字段置为0; 对IP头部中的每16bit进行二进制求和; 如果和的高16bit不为0,则将和的高16bit和低16bit反复相加,直到和的高16bit为0,从而获得一个16bit的值; 将该16bit的值取反,存入校验和字段。当接收IP包时,需要对报头进行确认,检查IP头是否有误,算法同上2、3步,然后判断取反 的结果是否为0,是则正确,否则有错。代码如下:unsigned

2020-12-26 15:34:05 2124

转载 send recv sendto和recvfrom函数解析

send、recv和sendto、recvfrom,一般情况下,send、recv在TCP协议下使用,sendto、recvfrom在UDP协议下使用,也可以在TCP协议下使用,不过用的很少。1、send这里只描述同步socket的send函数的执行流程。s:套接字|buf:存储发送数据|len:发送数据长度 当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR;如果len...

2020-12-26 13:33:09 578

转载 windows下命令行模式中cd命令无效的原因

当我们执行cmd 想切换当前工作目录时,会发现windows下命令行模式中cd命令没有生效,到底是什么原因呢?例如:当我们想切换到D:\MySql\mysql-5.7.19-winx64\bin 路径 ,理所当然的输入cdD:\MySql\mysql-5.7.19-winx64\bin 回车后,界面上路径并没有改变解决办法:方法一:输入完上面命令后,再输入D: 回车后,路径即成功的切换到我们想要到的路径方法二:直接输入cd /dD:\MyS...

2020-12-25 21:49:53 4722 5

原创 [内核安全6]内核态Rootkit之GDT Hook

1. 导言GDT Hook的原理是通过修改GDT全局描述符表来达到挂钩的目的。GDT表的概念可以看下:IDT Hook整个GDT Hook的原理可以归纳为如下图。2. 代码段区分代码段分为两种: 一致代码段 非一致代码段 数据段属于非一致代码段 首先不管一致还是非一致,同特权级代码段之间互访都是允许的。在者永远不能由高特权级代码段访问低特权级代码段,这是不允许的!因为操作系统不会允许用高特权级来访问不安全的代码。有一种情况例外就是数据段,数据段可以被更高级的

2020-12-24 20:28:32 516 1

原创 C++细节笔记7

1. 浅拷贝和深拷贝浅拷贝可能出现重释放问题深拷贝导致资源浪费最佳解决方案: 引用计数即用一个计数器记录某块堆内存被引用的次数,平时调用拷贝构造时仅使用浅拷贝并仅增加引用计数的值,每次释放仅减少引用计数,直到引用计数变成0才会进行释放,这样就解决了这个问题计数器放在哪?静态成员变量: 不可取,因为假设有不同的对象即非拷贝构造导致的新对象,这时静态成员变量会出现混乱,因为两个对象到底增加的是谁的计数这会混淆在一起 成员属性: 可取,以成员指针的形式驻入类内,每个对象在构造

2020-12-24 10:31:11 65

原创 C++细节笔记6

1. 初始化列表,可对一般数据成员,常数据成员以及类对象数据成员进行初始化并且其时机比构造函数早,类中假设包含类对象成员,则构造时先构造成员后自己,析构时先析构自己后析构成员(顺序相反),类定义中假设有多个类对象成员,则他们之间的构造顺序与成员定义顺序一致2. 静态成员(未完)...

2020-12-24 09:30:57 74

原创 C++细节笔记5

1. C++中通过malloc在堆上分配一个类对象不会调用构造函数,free也不会调用析构函数, 调用new和delete才可以。其构造顺序是先分配内存后调构造,析构顺序是先析构在释放内存2. 为何new[]时需要传入具体个数(只要初始化了编译器就可以了解到对应大小,如果不初始化需要写入具体个数),而delete[]时不需要?原因是因为在申请内存的上4字节,有一个DWORD,其是申请的元素个数,编译器根据该值确定释放次数3. 为何new出来类实例的数组,使用delete[]没有问题,而单

2020-12-23 14:46:56 195

转载 隐秘通讯与跳板?C&C服务器究竟是怎么一回事

C&C服务器,其全称为command and control server。我们在诸多文章中曾看到过,C&C服务器不仅可以为攻击者提供便利的资源管理平台,也可以保障其个人隐私安全。今天,我们就通过一个几个C&C服务器的搭建实验教程让大家了解一下什么是C&C服务器,以了解如何应对利用C&C的攻击行为。无C&C服务器通讯故事*本文中涉及的故事纯属虚构,如有雷同实数巧合某天,某攻击者通过固定的外网IP控制了一个处在外网的用户。两台设备的交流完全是点对

2020-12-23 13:12:27 2153 1

原创 截屏技术

该段代码可以截获桌面屏幕#include <windows.h>#include <tchar.h>#include <stdio.h>#include <atlimage.h>BOOL PaintMouse( HDC hdc){ HDC bufdc = NULL; CURSORINFO cursorInfo = { 0 }; ICONINFO iconInfo = { 0 }; HBITMAP bmpOldMask = NULL

2020-12-23 10:53:38 422

原创 Winsock编程基础TCP与UDP通信

这不做解释,直接给出代码, TCP服务端:#define _CRT_SECURE_NO_WARNINGS#include <winsock2.h>#include <windows.h>#include <stdio.h>#include <tchar.h>#pragma comment(lib, "WS2_32.lib")SOCKET g_ServerSocket = 0;SOCKET g_ClientSocket = 0;BOOL

2020-12-23 07:53:38 369

转载 git统计项目代码总行数命令

统计代码总行数find . "(" -name "*.java" ")" -print | xargs wc -l统计其他文件行数find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.h" -or -name "*.rss" ")" -print | xargs wc -l(完)

2020-12-22 15:09:31 1683

原创 移动设备监控

用Qt写了一个简单的界面,主要用于监控移动设备的插入和拔出监控, 效果如下:其原理相对简单,只要接收一个名为WM_DEVICECHANGE的消息即可。 使用前需要包含dbt.h头文件其中WPARAM接收的是事件类型,由于我这里只监控移动设备的插入和拔出,所以只要监控DBT_DEVICEARRIVAL和DBT_DEVICEREMOVECOMPLETE即可。LPARAM参数是一个DEV_BROADCAST_HDR结构体,其定义如下:这里只要关心DBT_DEVTYP_VOLUMN即可,

2020-12-21 15:58:25 830 1

原创 利用RAWINPUT来记录键盘按键

这里用Qt写了下简单的界面,效果如下这里主要的技术在于注册和从分发中获取虚拟键码。从注册来讲:注册主要是RegisterRawInputDevices函数, 原型如下:最重要的是填充PCRAWINPUTDEVICE结构,具体填充方式上面已给出。由于Qt对Windows下消息循环进行封装,所以我们重写nativeEvent方法获取消息循环, 一旦注册完毕,消息循环会开始接收WM_INPUT消息, 我们从中获取虚拟键码下面是接收信息的逻辑:(完)...

2020-12-21 13:34:42 589

原创 监控文件

监控目录内文件的变动。#include <windows.h>#include <tchar.h>#include <stdio.h>#include <string.h>VOID W2C(WCHAR *pwszSrc, int iSrcLen, PCHAR pszDst, int iDstLen){ RtlZeroMemory(pszDst, iDstLen); WideCharToMultiByte(CP_ACP, 0, pwszSr

2020-12-20 19:28:56 400

原创 Qt学习笔记[8]

1. QListWidgetclear(): 清除所有list项setFlags(): 设置每一项的属性addItem(): 在list末尾添加一项setIcon(): 设置图标setCheckState(): 设置是否被check, 前提是flag()内有Qt::ItemIsUserCheckable属性CheckState(): check状态currentRow(): 返回当前选中item索引insertItem(): 在currentRow()位置插入一项aI

2020-12-20 18:02:41 1460 1

原创 Qt学习笔记[7]

1. 关于pro文件的用法Qt中导入win库的时候 不能使用#pragmacomment(lib,...) 这是MSVC专有的表达式在mingw中需要在Qt的pro文件中加入LIBS+=-lxxx比如:msvc中:#include <Shlwapi.h>#pragma comment(lib, "shlwapi")minGw:pro文件添加:LIBS += -lshlwapi添加头文件:#include <Shlwapi.h&g...

2020-12-20 18:02:27 474

原创 C++细节笔记4

1. thiscall调用约定thiscall一般是类的成员函数用的调用约定,其特点是通过ecx传递指向实例对象的指针,即this指针。成员函数的调用约定可以改但是不推荐2. 定义类内的函数指针#include <iostream>using namespace std;class Base{public: Base() = default; void SetNum(int iNum) { m_iNum = iNum; } int GetNum() {

2020-12-19 22:16:45 56 1

原创 汇编与机器码对照(长期记录)

je或jz // 相等则跳(机器码是74或84) jne或jnz // 不相等则跳(机器码是75或85) jmp // 无条件跳(机器码是EB)汇编指令对应机器码表一、状态寄存器PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZF AF PF CF条...

2020-12-19 20:29:14 4473 1

转载 Windbg中查看函数参数

方式一:kb命令断下后,输入kb,会回显调用堆栈的详细信息如:第一个是EBP地址;第二个是返回地址;从第三个参数开始就依次是函数调用的参数啦,如果要查看里面的具体值可以使用d系列的命令。方式二:在内存窗口中查看esp要理解在此处通过查看esp从而获取调用参数的真实意义,需要了解函数栈的布局。简单介绍下:函数栈的生长方向是从高地址向低地址生长 参数入栈:从右向左 函数栈的基本布局 每个函数在其开始的部分会保存EBP当前值,而我们的断点下在还没有执行到push eb...

2020-12-19 18:51:01 1847 1

原创 [内核安全4]内核态Rootkit之IDT Hook

IDT Hook是通过挂钩中断描述符表的一种Ring0挂钩形式。在保护模式下和实模式下的中断机制是完全不同的。实模式下有256个中断例程以供调用,可以通过对应的中断号来调用。在保护模式下中断机制变得相对复杂了,但更好用。保护模式下中断由对应的门描述符来描述,其中有三种格式,分别为:任务门描述符 中断门描述符 陷阱门描述符任务门描述符一般用于不同特权级的非一致代码段间跳转。和IDT HOOK没有什么关系,因为IDT HOOK是通过挂钩中断门比如希望低特权级代码段跳转至高特权级的代码段运行就一般需

2020-12-19 16:31:48 593 1

原创 NtQuerySystemInformation来遍历显示进程

NtQuerySystemInformation属于未公开的函数,没有文档化,头文件中也不存在(winternl.h中有其及其部分数据结构的定义),该函数可以查询到非常大量的系统信息。这里来使用该函数来查询进程名和对应PID。该代码摘自网络,我对其做了大量的修改,废弃掉了大部分不需要的内容并完善了程序, 其本来的用意是查询特定进程下的特定线程状态,我保留了原程序功能的核心代码仅将其注释掉。#include <windows.h>#include <tchar.h>#in

2020-12-19 11:04:54 4035 4

原创 文件遍历

Win下文件遍历的方法:VOID TraverseFile(LPCTSTR pszDir){ DWORD dwBufferSize = 2048; TCHAR* pszFileName = NULL; TCHAR* pTmpSrc = NULL; WIN32_FIND_DATA FileData = { 0 }; if (NULL == pszDir) { return; } pszFileName = new TCHAR[dwBufferSize]; pTmpSrc

2020-12-18 21:17:15 393 1

原创 [内核安全3]内核态Rootkit之Object Hook

Object Hook是通过挂钩OBJECT_HEADER其中一些字段来实现的。在Windows中通过对象管理器来管理所有对象,可以使用WinObj来观察一下WinXP SP3下的对象类型:Windows中包含三种对象:执行体对象 内核对象 GDI/User对象这里我们挂钩的就是执行体对象。这里实验机器是WinXP SP3, 首先来看一下进程对象的数据结构:然后随便找一个进程对象,寻找他的对象结构体,比如之前打开的WinObj进程,通过!object命令查找到了其进

2020-12-18 21:13:26 535 1

原创 通过Psapi.dll来遍历进程方法

这种方法主要通过EnumProcesses来进行, 来看一下函数原型:lpidProcess是一个DWORD数组,用于接收系统上所有的PID数组 cb是DWORD数组的大小,以Byte计 lpcbNeeded是PID数组被填充了多少字节,除以sizeof(DWORD)就是进程数通过EnumProcesses来遍历的方法主要步骤如下:EnumProcesses获取PID数组 遍历PID数组并尝试用OpenProcess打开对应PID(至少需要PROCESS_QUERY_INFORMATIO

2020-12-18 13:34:22 360

原创 Qt学习笔记[6]

1. 关于Qt生成可执行文件后打包作为产品的问题当用Qt写完一个软件后希望给别人用,但Qt有很多地方都要依赖自身的DLL, 下面的方法可以进行顺利打包:生成可执行文件后,在可执行文件目录下执行windeployqt *.exe命令,该Qt自带的工具就会帮助我们把该可执行文件需要的Qt内的dll打包起来(个人的资源比如图片音频不算在里面!)打包完就和如上一样,只要将其放到一个目录下即可2. 关于缺少libgcc_s_dw2-1.dll动态库错误导致该错误的原因是Mingw环境没

2020-12-17 21:51:25 238

原创 C++细节笔记3

1. 命名空间命名空间的定义, 以及基础使用using namespace Namespc;这句代码代表了从该行开始所有代码对Namespc空间中的内容可见。单独引用命名空间中的一个变量或者函数使用using xxx:??,其中xxx代表某个命名空间,??代表其中某个变量或者方法名。可以使用某个命名空间的具体某个内容命名空间可分开可以看到上述代码中,命名空间被分成了两部分,但其内容依旧是同一部分2. 重载重载意思是函数名相同,参数列表(顺序,类型,个数)不同。调用约定,

2020-12-17 13:24:49 93

原创 C++细节笔记2

1. 宏的缺点没有类型检查 宏无法进行调试(宏无符号),即在监控窗口无法显示值const修饰的常量在C与C++中是不一样的,C++在编译过程中会进行替换,类似于宏。并且是一个真的常量,而在C中const修饰的值是一个假的常量,可以通过指针修改C++中const是常量理所应当其无法被修改,在VS的Debug版中可以被修改但这是假的,在Release版本中就不可以了。它根本就没有地址2. 引用引用必须初始化 对左值不可多级引用 不能改变引用的变量,只能改变引用的变量的值 const修饰

2020-12-16 14:32:55 58

一个在用户层的调试器设计书

一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书

2020-10-09

dd for windows

dd工具dd工具

2018-04-07

BZ二进制查看工具

二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具

2018-04-07

30天自制操作系统光盘文件

30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统

2018-04-07

空空如也

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

TA关注的人

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