自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (2)
  • 收藏
  • 关注

原创 读写锁SRWLock

SRWLock读写锁在对资源进行保护的同时,还能区分想要读取资源值的线程(读取者线程)和想要更新资源的线程(写入者线程):对于读取者线程,读写锁会允许他们并发的执行。 当有写入者线程在占有资源时,读写锁会让其它写入者线程和读取者线程等待。对于一个读写锁,有两种获取方式:共享(Shared)或独占(Exclusive)。 如果当前读写锁处于空闲状态,那么当多个线程同时以共享方式访问该...

2018-03-14 09:03:22 525

原创 线程局部存储

1.TLS(Thread—Local—Storage)机制进程中的全局变量与函数内定义的静态(static)变量,是各个线程都可以访问的共享变量。在一个线程修改的内存内容,对所有线程都生效。 如果需要在一个线程内部的各个函数调用都能访问、但其它线程不能访问的变量,就需要新的机制来实现。这就是TLS。 最简单的办法就是建立一个全局表,通过当前线程ID去查询相应的数据,因为各个线程的ID不同,...

2018-03-14 08:56:12 318

原创 PE文件(3)重定位表

PE文件(3)重定位表重定位表概念程序编译时每个模块有一个优先加载地址ImageBase,这个值是链接器给出的,因此链接器生成的指令中的地址是在假设模块被加载到ImageBase前提之下生成的,那么一旦程序没有将模块加载到ImageBase时,那么程序中的指令地址就需要重新定位,从而需要重定位表的修正。   对于EXE应用程序来说,在自己独立的4G进程空间中,它是肯定加载到ImageBa...

2018-03-02 10:28:19 474

原创 PE文件(2)导出表

PE文件(2)导出表导出表概念导出表就是记载着动态链接库的一些导出信息。 通过导出表,DLL 文件可以向系统提供导出函数的名称、序号和入口地址等信息,Windows 加载器通过这些信息来完成动态连接的整个过程。扩展名为.exe 的PE 文件中一般不存在导出表,而大部分的.dll 文件中都包含导出表。但这并不是绝对的。例如纯粹用作资源的.dll 文件就不需要导出函数啦,另外有些特殊...

2018-03-02 10:19:17 386

原创 PE文件(1)导入表

PE文件(1)导入表概念导入函数的代码位于一个或者多个DLL中,在调用者程序中只保留一些相关的函数信息,包括函数名及其对应的DLL名等。 对于磁盘上的PE 文件来说,它无法得知这些输入函数将来在内存中的地址,只有当PE 文件被装入内存后,Windows的 加载器才将相关DLL 装入,并将调用导入函数的指令和函数实际所处的地址联系起来。 这就是“动态链接”的概念。动态链接是通过PE 文件...

2018-03-02 10:10:52 709

原创 进程间通讯IPC总结

1.各个IPC通讯的原理:ipc原理1:让两个进程各自的虚拟地址对应内存上同一个物理地址!(进程空间,内存空间)FileMapping—IPCPoint—IPCShareDllData—IPCipc原理2:利用操作系统消息队列的三种消息传递(自定义消息,系统消息,拷贝消息)UserMsg—IPCMsg—IPCipc原理3:利用其他方式(管道,邮筒)进行消息传

2018-01-01 21:49:07 237

原创 IPC—MailSlot邮槽

这里使用邮槽所体现的原理的和NamePipe管道类似,但比其更加简单。//刷新数据void CIPC_MailslotDlg::OnBnClickedFlush(){ DWORD dwNextSize = 0, dwMsgCount = 0, dwReadBytes = 0; if ( GetMailslotInfo ( this->hMailslot, NULL, &dwNextSi

2018-01-01 20:41:59 191

原创 利用命名管道实现进程间通讯

管道服务器创建管道,管道客户端连接管道。32位,64位之间可以混合通信,主要代码如下:void CServerDlg::OnBnClickedButtonStartServer(){ UpdateData(TRUE); CString PipeFullPathData = L"\\\\.\\Pipe\\NamedPipePipe"; if (m_CEdit_Max_Connec

2017-12-23 21:01:31 489

原创 进程间通讯—MFC三种消息传递数据

MFC消息类型:消息前缀:wm(系统消息),rm(注册消息),um(自定义消息)//自定义消息void CServerDlg::OnBnClickedButtonUserMessage(){ // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); CWnd* DlgHwnd = FindWindow(NULL,L"Client");

2017-12-09 11:41:39 1438

原创 利用自定义消息(MFC界面)实现进程间通讯

使用了操作系统的消息队列,所以可以做到进程32位,64位通用!但是同样受限于此,只能做到四个字节(或者八个字节)的数字数据通讯!//server.cpp#include #include "resource.h"INT_PTR CALLBACK DialogProcedure(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar

2017-11-30 15:51:20 491

原创 Ring3层的DLL注入(32)(64)

原理:自己写的一个进程,将对方的进程空间打开,在其中写ShellCode,这句shellcode翻译为机器指令实际上就是loadlibrary(Dll.dll),也就是自己写的一个动态库,在这个动态库中这写了当有进程加载此动态库时弹出一个MessageBox。五个函数都在围绕ShellCode的这三个地址来写的。ShellCode中需要三个地址:1.EIP的地址,就是对方主线程的e

2017-11-22 21:30:57 262

原创 利用32位PEB结构实现从进程ID中得到进程完整路径

本程序只使用于32位!即只能寻找32位进程的完整路径!使用PEB结构以得到进程的完整路径(包括从进程ID得到进程PEB地址和从PEB结构得到进程完整路径)GetProcessFullPathByProcessID相当于两个函数GetPebByProcessID,GetProcessFullPathByPeb的合并。从PEB结构中得到进程的完整路径: 通过PEB结构中的RTL_USER_PROCESS_PARAMETERS类型的ProcessParameters成员,ProcessParamet

2017-11-20 19:51:12 1239

原创 进程间通讯--动态库的共享数据

因为这里是不同的进程同时加载一个动态库,所以要求两个进程的位数必须与dll相同,即只能使32位与32位通讯,64位与64位的通讯。其中的原理就是:设置某一块物理内存为“共享读共享写”,对其写的时候就不会触发操作系统的拷贝写。//Dll.cpp#include #include using namespace std;char __BufferData[MAX

2017-08-13 21:50:05 1103

原创 declspec的用法小结

目前学了三个declspec的用法:1.线程局部存储TLS机制:(在全局变量或静态变量前加上标识符__declspec(thread)就变为私有变量)// 定义静态TLS全局变量__declspec(thread)  int __TlsValue = 0;2.__declspec(naked)加在函数的定义前,代表函数的栈区是要由其自己写汇编开辟的,不加的时

2017-08-09 15:46:23 337

原创 进程间通讯——内存映射/文件映射形式

内存映射/文件映射形式下的进程交通讯不分32位还是64位,是因为本质上使用的是系统物理页面(系统位数)。主要是三个函数:CreateFileMapping;MapViewOfFile(映射内存),OpenFileMapping。// FileSend.cpp : 定义控制台应用程序的入口点。//#include #includeint main(){ HANDLE M

2017-07-26 22:30:04 317

原创 逻辑或“||”与按位或“|”的区分

I是运算或,输出运算结果; ||是逻辑或,输出true或者false:int i = 1,j=2;int k = i | j;BOOL b = i||j;结果,k的结果是3,b的结果是1也就是true.2.&&和||是短路运算符,&和|是非短路运算符;&&和||运算符第一个表达式不成立的话,后面的表达式不运算,直接返回。而&和|对所有表达式都得判断.

2017-07-26 11:04:22 1480

原创 进程间通讯——指针方式的内存读写

//进程间通讯的指针形式的内存访问#include#include#includeusing namespace std;BOOL EnableSeDebugPrivilege(IN const CHAR * PriviledgeName, BOOL IsEnable);typedef NTSTATUS(NTAPI *LPFN_NTWOW64READVIRTUALMEMORY6

2017-07-23 23:27:37 3617

转载 结构体的大小

结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存空间。和数组不一样的是,结构体的大小不是所有成员大小简单的相加,需要考虑到系统在存储结构体变量时的地址对齐问题。看下面这样的一个结构体:  struct stu1  {

2017-07-15 22:46:24 246

原创 JAVA期末考试的总结

JAVA期末考试的总结与吐槽java的扩展名:编译时.java;将源程序编译成字节码文件的时候是,class。java开发平台: J2EE:为企业计算提供一个应用程序服务运行和开发平台。J2SE:为台式机和工作站提供一个开发和运行的平台。J2ME:为消费电子产品提供一个开发和运行的平台。 java程序中如果有package语句,该语句一定是源文件

2017-05-26 21:06:50 1918 1

转载 socket函数

与socket有关的一些函数介绍1、读取当前错误值:每次发生错误时,如果要对具体问题进行处理,那么就应该调用这个函数取得错误代码。 int WSAGetLastError(void ); #define h_errno WSAGetLastError()错误值请自己阅读Winsock2.h。2、将主机的unsigned long值转换为网络字节

2017-04-29 16:00:50 237

转载 基本TCP socke编程

备注:该文简洁、形象地描述了socket常用函数的功能。有助于提纲挈领地掌握这些函数。概述socket() --得到文件描述符,架设好一部电话(服务器/客户端用,在本地建立一个套接字,作为一条通讯线路的一个端点)!bind() --有事请拨本电话(电话号码:IP,分机:Port)(主要用于server端,将文件描述符和地址信息主要

2017-04-28 21:43:25 217

原创 通讯中本机与虚拟机的连接

最近在学通讯,电脑安了个虚拟机,然后要跟本机相连,学到了一些···主要是虚拟机与主机连接的方法,还有自己的一些理解!虚拟机跟本机相连:Ping 192.168.137.1通过cmd:首先ipconfig查一下本机的ip:/*自己的本机的以太网适配器 VMware Network Adapter VMnet1:   连接特定的 DNS 后缀 . . .

2017-04-13 14:04:51 1056

原创 VS2015的单双字问题

最近在写程序的时候遇到的单双字问题!就是CHAR*与WCHAR*的问题!const char*:(LPCTSTR)/const WCHAR*:(LPCWSTR)一般显示的错误是:“const char*的实参与LPCWSTR的形参不匹配”之类的!解决方法:(1)先检查自己的设置问题:(两个)一个是项目属性中的项目默认值下的字符集:Unicode是双字(WCHAR*),多

2017-04-12 18:34:12 461

原创 我的大数相加

从HD1002开始说,1002这道题很坑,我这个菜鸟提交了15次!(1)最开始的时候:三步走:反转,对齐,求和;后来知道函数:(strrev,字符串反转函数)#include#include#define maxn 1000int main(){char number1[maxn+1];char number2[maxn+1];char su

2017-03-14 13:28:23 245

远程注入的EasyHook

EasyHook使用中的一种特殊情况: 需要实现这样一个功能,截获打开文件(CreateFile)和获取文件大小(GetFileSize)函数,且在打开文件时需要获取文件的大小,即在HookCreateFile中同时使用CreateFile和GetFileSize。此时问题来了。CreateFile此时调用的是真实的API,而GetFileSize将会调用HookGetFileSize。如果存在更多的函数,必将导致问题。

2017-12-28

32,64位下的Ring3层的动态库dll注入

自己写的一个进程,将对方的进程空间打开,在其中写ShellCode,这句shellcode翻译为机器指令实际上就是loadlibrary(Dll.dll),也就是自己写的一个动态库,在这个动态库中这写了当有进程加载此动态库时弹出一个MessageBox

2017-11-22

空空如也

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

TA关注的人

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