- 博客(40)
- 资源 (1)
- 问答 (2)
- 收藏
- 关注
转载 文件系统过滤驱动sfilter
标 题: 【分享】整理一份我对Windows文件系统过滤驱动的sFilter工程代码的详细说明作 者: tianhz时 间: 2012-06-19,18:32:07链 接: http://bbs.pediy.com/showthread.php?t=152338我平时很忙,很少发表主题。我在工作的时候,我身边的很多同事都不停地问我有关Windows文件系统过滤驱动的问题。他...
2020-07-27 10:46:45 1156
转载 Makefile语法学习
概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程
2020-06-07 11:24:36 432
转载 Git和Github详细教程
Git和Github详细教程一 概述 说到Git和Github,前几天我们知道微软以75亿美元收购全球最大的代码托管和写作平台GitHub,而GitHub是全球最大的代码仓库,很多开发人员都将代码存放在Github,许多开发者因为担心微软无法让 GitHub 在运营上保持开放和独立,将无数项目迁移到了 GitLab上,博主也担心微软是否会让GitHub按照以前一样运营...
2020-05-12 20:09:34 399
原创 滴水逆向——Win32_资源文件、消息断点
1、资源文件,创建对话框1.创建一个空的Win32应用程序2.打开新创建的xxx.rc文件, 在资源窗口新增一个对话框,并在对话框上新增2个按钮.3.打开resource.h文件,观察变化:#define IDD_DIALOG_MAIN 101 #define IDC_BUTTO...
2020-05-01 01:11:34 872
转载 浅谈Windows API编程 (这个经典)
WinSDK是编程中的传统难点,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制……WinSDK是编程中的传统难点,曾经听有一个技术不是很好的朋友乱说什么给你API谁都会用,其实并非那么简单,个人写的WinAPI程...
2020-04-30 16:22:00 906
原创 滴水逆向——Win32_按钮
1、按钮是什么?按钮的本质:在项目中添加如下代码:void CreateButton(HWND hwnd){ HWND hwndPushButton; HWND hwndCheckBox; HWND hwndRadio; hwndPushButton = CreateWindow( TEXT("button"), TEX...
2020-04-30 11:50:41 1015 2
原创 滴水逆向——Win32_定位回调函数
1、Win32应用程序入口识别Ollydbg一进入程序停留的地方并不是我们自己定义的函数入口点,因此我们需要寻找EIP。前面已经讲过入口函数参数的意义,再拿来复习复习int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)WinMain的第一个参数...
2020-04-28 16:46:49 1709 2
原创 滴水逆向——Win32_事件&消息&消息处理函数
1、事件&消息Windows中的事件是一个“动作”,这个动作可能是用户操作应用程序产生的,也可能是Windows自己产生的.而消息,就是用来描述这些“动作”的,比如:这个动作是什么时候产生的?哪个应用程序产生的?在什么位置产生的?等等。。。Windows为了能够准确的描述这些信息,提供了一个结构体:MSG,该结构体里面记录的事件的详细信息.typedef struct t...
2020-04-27 22:56:34 1199
原创 滴水逆向——Win32_杂项
1、什么是Win32 API?有哪些?在哪里?主要是存放在 C : \WINDOWS\system32 下面所有的dll2、非常重要的几个DLLKernel32.dll:最核心的功能模块,比如管理内存、进程和线程相关的函数等.User32.dll : 是Windows用户界面相关应用程序接口, 如创建窗口和发送消息等.GDI32.dll : 全称是Graphical Device In...
2020-04-27 20:22:39 851 1
原创 滴水逆向——Win32_宽字符
1、宽字符的使用"中"字的编码:ASCII:d6 d0UNICODE:4e 2dchar x = '中';wchar_t x1 = '中';观察内存中的值,为什么会出现这种情况?如何告诉编译器我们要使用的是Unicode的那张表呢?wchar_t x1 = L'中';2、宽字符串的使用char x[] = "中国";//d6 d0 b9 fa 00 ...
2020-04-27 17:56:52 539 1
原创 滴水逆向——C++_二叉树
1、概念:1.分类: 满二叉树:除叶子结点外, 所有结点都有两个结点, 叶子结点的left, right为NULL.完全二叉树 : 除了最底层的叶子结点之外, 其余层全满, 而且叶子层集中在左端.堆是一种特殊的完全二叉树(全满或者差一个结点就全满)平衡二叉树:所谓平衡二叉树指的是,左右两个子树的高度差的绝对值不超过 1。包括AVL树, 红黑树.哈夫曼树:又称为最...
2020-04-27 11:36:27 1341
转载 typedef关键字与结构体、结构体指针的定义
一、使用typedef定义结构体typedef用来定义新的数据类型,通常typedef与结构体的定义配合使用。使用typedef的目的使结构体的表达更加简练(所以说typedef语句并不是必须使用的)。定义一个名字为TreeNode的结构体类型(现在并没有定义结构体变量,并不占用内存空间):struct TreeNode{ ...
2020-04-24 18:05:55 489
转载 LINUX 和 WINDOWS 内核的区别
关于LINUX和WINDOWS的口水站已经很多了。本文企图从技术角度来比较下2个主流操作系统的异同。偏重于内核部分。一、动机:我最早是 WINDOWS 阵营的。在WINDOWS下写过2年多的驱动程序。后来由于学习需要,转投LINUX,一晃也快2年了。期间经历了很多曲折,也学到了很多东西。由于在开发WINDOWS 驱动的时候,经验和知识都还不够,所以现在我感觉对LINUX似乎更熟悉些。当然,各2年的...
2020-04-24 16:24:47 472
原创 滴水逆向——C++_链表
1、结构特点:1.数据分散存储2.查询性能没有Vector好3.新增与删除的性能好于Vector2、分类3、实现#include<stdio.h>#include<Windows.h>#define SUCCESS 1 // 执行成功 #define ERROR -1 //...
2020-04-22 22:05:54 943 1
原创 滴水逆向——C++_new/delete、vector
1、new/delete1.跟踪反汇编,查看函数的封装: malloc _nh_malloc_dbg _heap_alloc_dbg _heap_alloc_base HeapAlloc new _nh_malloc _nh_malloc_dbg _heap...
2020-04-22 16:44:06 1016
原创 滴水逆向——C++_引用、友元、运算符重载
1、引用#include<stdio.h>#include<Windows.h>struct Base{ int x; int y; Base(int x, int y) { this->x = x; this->y = y; }};void PrintByPoint(Base* pb){ printf("%d %d\n"...
2020-04-21 22:19:01 425
原创 滴水逆向——C++_模板
1、在函数中使用模板#include<stdio.h>#include<Windows.h>template<class T>void Sort(T arr, int nlength){ for (int n = 0; n < nlength - 1; n++) { for (int i = 0; i < nlength - ...
2020-04-21 13:34:31 680
原创 滴水逆向——C++_动态绑定/多态
1、绑定概念1.什么是绑定?绑定就是将函数调用与地址关联起来.观察下面代码反汇编class Base { public: int x; public: Base() { x = 100; } void Function_1() { printf("Base:Funct...
2020-04-20 22:49:45 410
原创 滴水逆向——C++_虚函数表
1、普通函数&虚函数 总结:1.通过对象调用时,virtual函数与普通函数都是E8 Call2.通过指针调用时,virtual函数是FF Call, 也就是间接Call2、虚函数大小 总结:1.当类中有虚函数时,会多一个属性,4个字节2.多出的属性是一个地址,指向一张表,里面存储了所有虚函数的地址3、虚...
2020-04-20 19:03:57 497 1
原创 滴水逆向——C++_权限控制
1、public private的使用public的意思是,这个成员哪里都可以用,不用担心被修改,所以,一旦发布成public的成员,是不能够改名字的.private的意思是,这个成员只用于内部使用,不要在其他的地方使用.如下: 探测一:观察private成员是否有空间struct Test printf("%d\n", s...
2020-04-20 15:53:52 315
原创 滴水逆向——C++_构造\析构、继承
1、构造函数 构造函数的特点:1.与类同名2.没有返回值3.创建对象的时候执行4.主要用于初始化5.可以有多个(最好有一个无参的), 称为重载 其他函数也可以重载6.编译器不要求必须提供2、析构函数析构函数的特点:1.只能有一个析构函数,不能重载2.不能带任何参数3.不能带返回值4.主要用于...
2020-04-20 12:41:23 503
原创 滴水逆向——C++_this指针
1、直接使用结构体做为参数\传递结构体指针2、空结构体的大小为13、函数可以放在结构体里面,也可以放在结构体外面struct sclass{ int a; int b; int c; int d; int Plus(sclass* sc) { return sc->a + sc->b; ...
2020-04-20 00:27:33 605
原创 滴水逆向——PE导入表注入
1.注入概念:2.导入表注入流程:第一步: 根据目录项(第二个就是导入表)得到导入表信息: typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size;} IMA...
2020-04-19 13:00:10 1125 1
原创 滴水逆向——PE打印绑定导入表
1.绑定导入表结构2.定位绑定导入表3.注意:IMAGE_IMPORT_DESCRIPTOR结构中的TimeDateStamp可以知道一个DLL有没有被绑定。TimeDateStamp为0,即未绑定;为-1即为绑定。 当IMAGE_BOUND_IMPORT_DESCRIPTOR结构中的TimeDateStamp与DLL文件标准PE头中的TimeDateStamp...
2020-04-15 23:04:56 602 1
原创 滴水逆向——PE打印导入表
1.导入表数据结构2.PE文件载入内存前后导入表变化3.打印步骤4.一张图体会重定位表和导入表关系DLL_A加载的基址本来是400000,但是被.exe占用了基址400000处,所以它的基址变为了1000000处。这时重定位表的作用就是改变DLL_A中要寻找各函数的Roa,具体操作就是Roa-原基址(400000)+现基址(1000000),这...
2020-04-15 17:23:25 789
转载 【VS2010学习笔记】【编程实例】 (在Visual Studio中使用C++创建和使用DLL)
什么是DLL(动态链接库)? DLL是一个包含可由多个程序同时使用的代码和数据的库。例如:在Windows操作系统中,Comdlg32 DLL执行与对话框有关的常见函数。因此,每个程序都可以使用该DLL中包含的功能来实现“打开”对话框。这有助于促进代码重用和内存的有效使用。这篇文章的目的就是让你一次性就能了解和掌握DLL。为什么要使用DLL(动态链接库)?...
2020-04-15 11:20:24 707
原创 滴水逆向——移动重定位表
1.移动要点:2.代码实现:#include<stdio.h>#include<stdlib.h>#include<windows.h>#define size_shellcode 0x12#define size_surplus_sizeofheader 0x50#define messagebox_add 0x76EE2030 #...
2020-04-14 23:07:58 558
原创 滴水逆向——DLL(.lib、.dll、VS2017编译dll、隐式&显式调用dll)
I.静态链接库1.创建静态链接库: a.在VC6中创建项目:Win32 Static Library b.在项目中创建两个文件:xxx.h 和 xxx.cpp c.编译2.使用静态链接库: 方式一:...
2020-04-14 19:10:03 1095
原创 滴水逆向——PE移动导出表
1.为什么要移动各种表?a.这些表是编译器生成的,里面存储了非常重要的信息。 b.在程序启动的时候,系统会根据这些表做初始化的工作: 比如,将用到的DLL中的函数地址存储到IAT表中.c.为了保护程序,可以对.exe的二进制代码进行加密操作,但问题是: 各种表的信息与客户字节的代码和数据都混在一起了,如果进行加密,那系统...
2020-04-13 21:26:36 926 2
原创 滴水逆向——PE重定位表打印
1.程序加载过程:2.重定位表:3.代码实现:#include<stdio.h>#include<stdlib.h>#include<windows.h>#define size_shellcode 0x12#define size_surplus_sizeofheader 0x50#define messagebox...
2020-04-12 14:44:59 759
原创 滴水逆向——PE导出表
Ⅰ.知识点:1.如何定位导出表: 数据目录项的第一个结构,就是导出表. typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; ...
2020-04-10 21:36:24 1625 1
原创 滴水逆向——PE合并节
1.问题描述:2.代码实现:#include<stdio.h>#include<stdlib.h>#include<windows.h>#define size_shellcode 0x12#define size_surplus_sizeofheader 0x50#define messagebox_add 0x76EE2030 ...
2020-04-10 00:05:13 936
原创 滴水逆向——PE扩大一个节
1.问题描述:2.代码实现:#include<stdio.h>#include<stdlib.h>#include<windows.h>#define size_shellcode 0x12#define size_surplus_sizeofheader 0x50#define messagebox_add 0x76EE2030 ...
2020-04-09 23:12:09 580
原创 滴水逆向——PE新增一个节
1.问题描述:2.注意事项:(1)首先判断头部的空白区够不够加节表, 所有的节表后面必须跟40个字节0。所以添加节表时得确保有两个节表大小(即80字节)的连续剩余。分三种情况:a.头部的最后一个节表后直接可以放下两个节区 b.节表后放不下,但是dos头后pe前可放下 c.前两种情况都不行,需扩大最后...
2020-04-09 18:39:24 1141 11
原创 滴水逆向——RVA与FOA相互转换
(开始这段别人总结的比较好,我就拿来用了)1.RVA2FOA即我们现在知道内存状态下的偏移,需要找到文件状态下的偏移。步骤如下图:step1:内存中的地址减去内存基址得到偏移,即RVA。step2:循环遍历节表中各个节的信息,判断在哪个节中。(需要满足:内存偏移+节数据没对齐的大小>image_panyi>内存偏移)step3:找出在哪个节后,减去该节在内存中的偏移...
2020-04-07 21:44:05 3340
原创 简单的栈溢出探索
1.什么是栈栈是一种计算机系统中的数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个弹出来),是一种特殊的线性表。栈的操作常用的有进栈(PUSH),出栈(POP),还有常用的标识栈顶和栈底。可以把栈想象成一摞扑克牌一样,一张一张叠加起来。(如图 1的a1,a2,……,an)。进栈(PUSH):将一个...
2020-04-07 17:02:29 516 1
原创 滴水逆向——filebuffer->imagebuffer->newbuffer->存盘
实现功能:代码如下:#include<stdio.h>#include<stdlib.h>#include<windows.h>LPVOID ToLeaderPE(IN LPSTR lpszFile);LPVOID ReadPEFile(IN LPVOID pFileBuffer);LPVOID CopyFileBufferToImag...
2020-04-07 16:50:33 1684 3
原创 Windows驱动开发学习3
驱动的 API 函数: 1. RtlInitUnicodeString 作用: 初始化设备名称指针。VOID RtlInitUnicodeString(IN OUT UNICODE_STRING DestinationString,IN PCWSTR SourceString);2. IoCreateDevice 作用: 此函数用...
2019-09-04 19:47:39 255
原创 Windows驱动开发学习2
在看梦无极关于驱动开发的教程,感觉讲的很细致。I/O管理器作用:1. I/O管理器创建一个数据包代表一个对应的请求,并且把该数据包(即IRP)传递给正确的驱动程序,当请求完成时再处理该数据包。2. 除了创建和处理请求的数据包以外,I/O管理器也提供一些对于不同驱动程序都通用的代码,驱动程序可以调用这些代码来完成它们的I/O处理。由于这些通用的任务都被合并到I/O管理器中...
2019-09-03 22:01:23 506
原创 windows驱动开发学习1
Windows系统是一种分层结构:总体分为用户态(Ring3)和内核态(Ring0)。所有应用程序都是运行在用户态,是最低特权级。设备驱动层属于内核态。分层结构使得各个模块之间相互耦合,减少关联。驱动分类:①内核扩展驱动(硬件无关联)②即插即用驱动(特定硬件关联)③文件系统驱动(接受文件I/O,将请求转化为存储设备或网络设备的I/O请求)驱动工作路径:bus...
2019-09-03 13:42:53 331
原始套接字捕获数据包
2018-05-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人