![](https://img-blog.csdnimg.cn/20201221154340856.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
逆向开发学习笔记
驱动开发的学习笔记
lygl35
这个作者很懒,什么都没留下…
展开
-
MFC初始化过孔【学习笔记】
mian 函数之前已经运行了类的构造函数原创 2022-03-07 14:23:11 · 87 阅读 · 0 评论 -
windows注入代码【学习笔记】
代码实现参数的结构体编写一个需要复制到目标进程的函数远程创建文件JMP 下一行的代码地址+偏移21 就是要跳转的地址创建远程线程执行原创 2022-03-02 11:24:02 · 131 阅读 · 0 评论 -
windows 模块隐藏【学习笔记】
TEB、PEB是3环的结构体TEB的结构PEB 的结构原创 2022-03-01 16:07:01 · 256 阅读 · 0 评论 -
windows进程间的通讯【学习笔记】
同一台电脑上两个进程的通讯本质上就是共享内存,一块数据两个进程共享。如果两个进程不在同一台电脑上就需要通过网络进行连接,也就需要使用SOcket套接字的方式进行通讯获取PID函数根据进程的名字得到当前进程的PID命令队列写入DLL的共享内存卸载模块把当前DLL模块从进程空间里面卸载掉,并且这个线程也会退出...原创 2022-02-28 10:38:50 · 304 阅读 · 0 评论 -
windows远程线程注入【学习笔记】
远程注入要满足两个条件例如A进程调用B进程1、这个被调用的函数在B进程。2、B进程这个被调用函数的格式是:一个返回值,一个参数四个字节远程注入的思路封装一个函数loadDLL远程注入实现过程第一步:获取进程句柄第二步:计算DLL路径字符的长度,目的是在目标进程分配一块空间,把这个路径写进去第三步:在目标进程分配空间,VirtualAllocEx可以在指定的目标进程分配空间。第四步:向目标进程写入DLL的路径,通过WriteProcessMemory可以向其它进程写入数..原创 2022-02-25 13:11:53 · 897 阅读 · 0 评论 -
windows隐式链接,dll隐式调用【学习笔记】
准备:DLL 和LIB 文件第一种通过DEF dll的def文件导出配置导出函数的声明第二种 通过extern 导出,导入的时候也要加extern隐式链接需要DLL 和lib文件静态库与动态库的LIB文件的区别:1、静态库里面的LIB文件包含的是正在的代码2、动态库里面的LIB文件不包含任何一行代码,只包含一些辅助信息,用隐式链接必须用到LIB里面的辅助信息,要根据这些辅助信息来找到真正的函数在哪里。第一步:DLL 和 LIB 放到项目文件夹里面,也可以通过配置放在其它位置,参考前.原创 2022-02-24 09:18:09 · 959 阅读 · 0 评论 -
windows 共享内存的申请与释放【学习笔记】
共享内存多个进程都可以访问,又称为映射内存创建共享内存需要的函数:第一步:CreateFileMapping :准备物理内存(物理页),可以把一个文件映射到具体的物理页上。这个函数执行完了后,需要的物理页已经准备好了,但是这个物理页与当前的进程还没关联。第二步:MapViewOfFile: 把准备好的物理页与进程关联起来第一个参数是文件句柄,如果不需要映射到文件,可以填无效的文件句柄,值是 -1用完后的处理另外一个程序可以使用这个共享内存,通过MapViewOffile来控制程原创 2022-02-18 11:43:23 · 1368 阅读 · 0 评论 -
windows私有内存的申请与释放【学习笔记】
内存物理页分为两类1、自己私有的 Private Memory2、与其它进程共享的 Mapped Memory申请内存只有这两种方式VirtualAlloc 只能在自己进程申请私有内存,VirtualAllocEx可以给其它进程申请内存申请私有内存函数:定义一个变量接收返回值释放虚拟内存 VirtualFreec语言里面的申请内存 malloc 和C++里面的new,都是从已经申请好的内存拿出一块出来使用,这块内存是操作系统自动用VirtualAlloc申请好的,无论是堆,栈原创 2022-02-17 11:59:37 · 706 阅读 · 0 评论 -
windows虚拟内存与物理内存学习笔记
(物理页并不是实际内存条的地址,它与内存条实物之间还有一层映射)虚拟内存空间使用情况查询这个成员记录的就是当前虚拟内存空间哪些被使用了 ,4KB页为单位 10H*1000Hwindbg查物理内存大小查询出来的是物理页个数 ,4KB一个页暂时没有用到的会放到系统的虚拟内存,不会分配物业页。操作系统底层自动操作...原创 2022-02-17 11:17:32 · 343 阅读 · 0 评论 -
windows 子窗口控件学习笔记
子窗口控件查找子窗口类型方法原创 2022-02-17 10:10:34 · 163 阅读 · 0 评论 -
windows消息类型学习笔记
能产生消息的四种情况:1、鼠标2、键盘3、其它的应用程序4、操作系统的内核程序操作系统会为每个消息定义了独一无二的编号在结构体MSG的第二个成员 UINT 里面。回调函数 第三和第四个参数是说明消息详细类型的,类容由具体消息决定的,第二个参数是消息类型,都是内核传进来的TranslateMessage把键盘按的虚拟码转换为字符,然后就可以用 WH_CHAR接收消息,否则接收不到。完整的消息处理函数模板...原创 2022-02-16 11:32:54 · 66 阅读 · 0 评论 -
第一个WINdows程序(海哥)学习笔记
入口函数HINSTANCE类型 指向一个模块的句柄,就是一个内存地址。真正的对象在0环,它只是一个DWORD类型的索引,里面存储一个编号,句柄有各做名称是为了区分它们。hInstance 参数是在整个进程空间这个EXE的内存地址是多少进程都是有CrateProcess创建的,入口函数的参数也是这个函数传过来的调试信息的输出创建窗口的步骤...原创 2022-02-15 11:01:36 · 668 阅读 · 0 评论 -
Win32 API中的宽字符 学习笔记
TCHAR 是一个宏,当前项目默认是什么编码格式,在编译的时候就会转换为什么样的编码格式原创 2022-02-14 11:54:18 · 389 阅读 · 0 评论 -
windows消息队列学习笔记
一个线程一个消息队列,消息队列是与线程相关的windows系统先捕获到动作(键盘输入,鼠标点击等),生产消息对象(结构体),然后把这个消息对象放到相关进程的线程消息队列(7个链表)里面。一个线程可以有很多个窗口,但是一个线程只有一个消息队列,这是一对多的关系...原创 2022-02-14 11:09:55 · 173 阅读 · 0 评论 -
windows事件学习笔记
事件可以作为通知类型来使用,通知类型可以使两个线程同时运行第一个参数是安全描述符,只要是内核对象都有这个参数第二个参数设置为TURE就是通知类型,FALSE就是互斥体CreateEvent第三个参数是FALSE就是没有信号,没有信号时线程跑到waitForSingleObject就会阻塞,就是不往下执行了可以通过 SetEvent 把事件修改为有信号创建事件线程同步同步=互斥+有序互斥本身是无序的,变成有序的互斥就是同步SetEvent本质就是挂起自己,通知别人执行.原创 2022-02-12 11:12:57 · 391 阅读 · 0 评论 -
临界区学习笔记
第一步,创建一个全局变量第二步 初始化全局变量第三步 实现临界区(就是把需要读写操作的全局变量包含在临界区里面)原创 2022-02-12 09:25:43 · 152 阅读 · 0 评论 -
互斥体学习笔记
互斥体解决跨进程共享资源的问题原创 2022-02-12 09:36:05 · 255 阅读 · 0 评论 -
微机原理 (西安电子科技大学-周佳社老师)学习笔记
1-4 绪论(四)5-12 数制与码制(八)13-23 8086结构与功能(十一)24-64 8086指令系统(四十一)65-70 汇编语言程序设计(六)71-79 总线及其形成(九)80-88 存储器系统设计(九)89-94 常用芯片的接口技术(六)95-99 中断系统与可编中断控制芯片8259A100-107 可编程并行接口芯原创 2021-12-25 11:38:51 · 2739 阅读 · 0 评论 -
windbg常用命令
1、!process 0 0 (查看所有进程)2、dt _EPROCESS 8710da00 (查看当前进程的结构体)2、dt _HANDLE_TABLE 0x8d7fc818 (查看内核对象句柄表)3、dd 0x98609000 (当前进程句柄表,一个句柄对象是8个字节)内核对象句柄/4=内核句柄地址在句柄表的索引...原创 2021-12-23 13:53:55 · 1004 阅读 · 0 评论 -
windows系统(微软编译器)常用的调用约定
原创 2021-11-15 11:17:33 · 534 阅读 · 0 评论 -
保护模式相关知识点(段寄存器,段选择子、GDT表、页等)
GDT段选择子知识点1、 段选择子的RPL与GDT的DPL进行比较,进行权限检查。在保护模式下 mov ds,axax 里面的RPL权限大于或等于GDT表的DPL才会成功2、段描述符是64位,段寄存器是96位,其中16位是段选择子,另外80位通过64的的段描述符转换后获得。3、...原创 2021-09-24 09:13:09 · 643 阅读 · 0 评论 -
计算机相关英文缩写解释
DB-- Declare(声明) Byte(字节)DW-- Declare Word(字)DD-- Declare Double(双) WordDQ-- Declare Quad(四) Word原创 2021-09-16 16:19:29 · 1461 阅读 · 0 评论 -
《x86汇编语言-从实模式到保护模式》 知识点快速查询
NASM 编译名格式原创 2021-09-14 17:20:36 · 104 阅读 · 0 评论 -
王爽著《汇编语言》第三版,常用知识点快速查询
乘法指令:mul摘自:199页自加1: inc自减1: dec跳转指令:jcxz摘自:184页除法指令:DIV摘自:169页原创 2021-09-09 17:29:06 · 86 阅读 · 0 评论 -
《汇编语言》第三版 王爽,实验10,编写子程序1、显示字符串 2、解决除法溢出的问题 3、数值显示
,实验10,编写子程序三个子程序1、显示字符串 2、解决除法溢出的问题 3、数值显示代码assume cs:code,ss:stackdata segment db 'Welcome to masm!',0 db 10 dup (0)data endsstack segment dw 8 dup (0)stack endscode segmentstart: mov ax,data mov ds,ax ;调用show_str子程序,打印出字符Welcome原创 2021-09-03 17:00:44 · 438 阅读 · 0 评论 -
王爽汇编语言第3版 实验7根据材料编程,在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串‘welcome to masm!‘
编程要求实现效果:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串’welcome to masm!’assume cs:codesg,ds:datasg,ss:stacksgstacksg segment db 16 dup (0)stacksg endsdatasg segment db 'welcome to masm!' db 0datasg endscodesg segmentstart: mov ax,0B800H ;显存位置 mov es,ax mo原创 2021-08-28 14:09:40 · 1347 阅读 · 0 评论 -
王爽汇编语言第3版 实验7寻址方式在结构化数据访问中的应用
方法一assume cs:codesg,ds:data,es:table,ss:stacksgstacksg segment dw 8 dup (0)stacksg endsdata segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991','1992' db '1993','原创 2021-08-25 15:29:34 · 87 阅读 · 0 评论 -
16位汇编通用寄存器
调试实验1、输入命名debug,进入调试程序2、r 命令显示寄存器3、a命令输入汇编指令4、t命令单步执行汇编指令5.数据溢出后标志位NC 变为NY, 0变成1最后AX=044C , 1丢失了,标志位变为了CY作业1.写出每条汇编指令执行后相关寄存器中的值。mov ax,62627 AX=2627Hmov ah,31H AX=3127Hmov al,23H AX=3123Hadd ax,ax AX=6246Hmov bx,826CH BX=826CHmo.原创 2021-08-18 15:40:46 · 3055 阅读 · 0 评论 -
WIN10下的 16位汇编学习环境的搭建 及编译、链接和调试
第一步:安装 16位DOS虚拟机:DOSBox0.74第二步:把编译、链接、调试等软件复制到自己指定的文件夹下面第三步:建立一个存放源文件的文件夹第四步:DOS虚拟机里面设置编译环境所在的目录mount c d:\masm16\masm第五步:自动配置第四步的目录,不用每次打开都设置找到配置文件:dosbox-0.74.conf方法1:运行安装目录下的 DOSBox 0.74 Options.bat(有可能打不开,就用第二种方法)方法2:自己在启动窗口找添加到 配置文件运行原创 2021-08-17 16:33:15 · 743 阅读 · 0 评论 -
保护模式-段寄存器
用汇编指令获取GDT//主程序 outoutpeh.cpp#include <stdio.h>#include <stdlib.h>int main(int argc ,char* argv[]){ unsigned char buf[6] = { 0 }; //获取GDT表 _asm { sgdt buf; } printf("%x,%x", *(unsigned int*)&(buf[2]), *(unsigned short*)&原创 2021-08-13 09:59:26 · 102 阅读 · 0 评论 -
打印出重定位表(C语言实现)
主程序//主程序 outoutpeh.cpp#include <stdio.h>#include <stdlib.h>#include "func.h"typedef int(*lpPlus)(int, int);int main(int argc ,char* argv[]){ //PrintNTHeaders();//打印PE头信息 //TestAddCodeIncodeSec(); //TestAddSecIncode(); //Pri原创 2021-07-23 13:55:33 · 328 阅读 · 0 评论 -
通过函数名称和序号,打印出导出函数地址(含代码)
主程序//主程序 outoutpeh.cpp#include <stdio.h>#include <stdlib.h>#include "func.h"typedef int(*lpPlus)(int, int);int main(int argc ,char* argv[]){ //PrintNTHeaders();//打印PE头信息 //TestAddCodeIncodeSec(); //TestAddSecIncode(); //Pri原创 2021-07-19 15:01:23 · 928 阅读 · 2 评论 -
打印PE文件导入表(C语言代码)
打印导入表#include <stdio.h>#include <stdlib.h>#include "func.h"int main(void){ PrintdDirectory();//打印PE文件导入表 getchar(); return 1;}//func.h 头文件#pragma once#include <Windows.h>#define FILEPATH "D:/ipmsg.exe"#define FILEPATH原创 2021-07-07 10:48:32 · 386 阅读 · 0 评论 -
新增节-添加代码
1、要判断空间是否足够要判断节目录下面是否有足够的空间添加一个节目录项,一个节目录项需要40个字节的空间,而且整个节目录必须以40个存储 0的字节结尾,也就是所加一个节目录项只是需要 80个字节的空间。2、复制一个相同属性的节,然后在复制过来的基础上进行修改必要的属性3、修改节属性1、修改节的数量 _IMAGE_FILE_HEADER->NumberOfSections2、修改PE文件内存拉伸后的大小,_IMAGE_OPTIONAL_HEADER ->SizeOfImage3、原创 2021-07-01 16:29:00 · 519 阅读 · 1 评论 -
代码节空白区添加代码(手动)(含C练习代码)【基础函数的实现的源代码在这里面】
7559ED60 > 8BFF mov edi,edi ; HelloWor.原创 2021-06-24 17:19:16 · 1113 阅读 · 4 评论 -
PE练习代码@硬盘上的PE文件->FileBuffer->ImageBuffer->NewBuffer->存盘
实现功能: 硬盘上的PE文件-》FileBuffer(原封不动的复制到内存)-》ImageBuffer(拉伸为4G空间存储模式)=>NewBuffer(又还原成FileBUffer)=>存盘(保存为PE文件)//主程序 硬盘上的PE文件-》FileBuffer(原封不动的复制到内存)-》ImageBuffer(拉伸为4G空间存储模式)=>NewBuffer(又还原成FileBUffer)=>存盘(保存为PE文件)#include <stdio.h>#include原创 2021-06-23 15:47:27 · 320 阅读 · 0 评论 -
手动解析PE文件(含打印PE文件信息的C练习代码)
1、DOS头 _IMAGE_DOS_HEADER(共40个字节)WORD e_magic // 5A4D *EXE标志,“MZ”WORD e_cblp //0090WORD e_cp //0003WORD e_crlc //0000WORD e_cparhdr //0004WORD e_minalloc //0000WORD e_maxalloc //FFFFWORD e_ss原创 2021-06-17 16:21:25 · 980 阅读 · 0 评论 -
从一个文件中读取数据到内存,然后再把内存中的数据写入另外一个文件
#include <stdio.h>#include <stdlib.h>const char fileName[] = "D:/逆向学习/soure/openexe1/HelloWorld.exe";const char fileName2[] = "D:/逆向学习/soure/openexe1/b.exe";int main(){ long size; errno_t err; FILE* fp; char* file_buffer; char* ch1;原创 2021-06-16 17:25:18 · 861 阅读 · 0 评论 -
C 语言 用 typedef 定义一些比较复杂的声明
原创 2021-05-19 17:05:37 · 163 阅读 · 0 评论 -
c 语言 static extern的作用
//parta.c 不同的存储类别//与partb.c一起编译#include <stdio.h>void report_count();void accumulate(int k);int count = 0;int main(void){ int value; register int i; printf("Enter a positive integer (0 to quit):"); while (scanf("%d",&value)== 1 &...原创 2021-05-13 16:20:36 · 70 阅读 · 0 评论