自定义博客皮肤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)
  • 资源 (17)
  • 收藏
  • 关注

原创 从未放弃过

从未放弃过 在工作中偶尔遇到自己难以解决的问题似乎是再正常不过的事了,要说近期让我最记忆犹新的一次就应该是解决“弹出提示格式化框”的问题了。当自己刚接手这个问题时,感觉应该不难,于是和领导说很快能搞定。让我万万没有想到的是在我解决此问题的过程中,却发现这个“小问题”涉及了太多底层的相关知识,这其中当然也包括了一些自己从未接触过的知识,这些从未接触过的知识让我产生了很强的忙中失措的感觉,此时一想到自己那么坚定地和领导说很快能搞定这话,就感觉是自己把自己推进了充满压力的深渊中,是那么的彻底。。。...

2021-02-20 10:01:58 170 2

原创 应用层和驱动层的同步与异步的处理逻辑及底层实现

应用层的实现:1ReadFile、WriteFile、DeviceIoControl等,这些都有两种操作方式,一种是同步,一种是异步。操作设备的Win32API主要是这3个函数ReadFile、WriteFile、DeviceIoControl以DeviceIOControl为例,它的同步&异步操作如下:同步操作时,它的内部会创建一个IRP_MJ_DEV

2021-02-20 09:54:11 2483

原创 自己对面向对象开发的理解

【抽象】指“数据抽象”和“代码抽象” 数据抽象:指对象的属性(用类的成员变量来实现)代码抽象:指对象的行为(用类的成员函数来实现) 【封装】将抽象得到的“成员变量”和“成员函数”相结合,形成一个有机的整体 用类来实现 【继承】体现在代码的重用性&派生类不一样的扩展上,派生类继承后可有除基类公有的的属性和方法外,也可拥有自己独有的属性和方法。如基类是动物,子类有猫、鸟等,猫和鸟都会走,走...

2016-08-01 10:57:05 599

原创 CrackMe.exe 解密流程

2013-09-29 09:59:29 2881 1

原创 缓冲区溢出的例子

缓冲区攻击1.代码如下:#include<stdio.h>#include<string.h>root (){printf("your have a root!\n");}main (){char passwd[16]; char login[16];printf("login :"); gets(login);printf("passwd:"); gets(passwd)...

2013-09-29 09:50:46 1643 1

原创 分页机制

一:启动一个计算器程序calc.exe,输入一个字符串123456789二:启动WinDBG,并附加到计算器程序上开始调试(选择File>Attach to a process…..)三:在WinDBG的命令区输入xcalc!g*命令列出计算器程序中以g开头的所有符号(先要设置好XP系统的符号路径)四:在WinDBG的命令区输入ddcalc!gpszNum l1命令,查看该符号地址的内容五:...

2013-09-29 09:47:48 693

原创 中断和异常

【归纳】 1、中断和异常机制会产生向量号。(中断的向量号:通过8259A可编程中断控制器产生的IRQ与向量号相关联) 2、向量号会作为IDT中的索引来取出门描述符。向量号与IDT表一一对应。如向量号0对应着IDT表中的第一个门描述符。 3、软中断指令“INT n”和“INTO”也归类于异常而不称为中断。(CPU外部的叫中断,CPU内部的叫异常) 异常分为3类:故障& 陷阱 & 中止...

2013-09-29 09:41:44 957

原创 两个内部函数体之间的HOOK

#include <iostream>#include <windows.h>using namespace std;typedef void(*pF)(); void test(){  cout<<"this is a pFtest!"<<endl;}void fun(){  cout<<"funfunction!!"&

2013-09-27 11:18:04 885

原创 HOOK 系统 API

一调用系统函数 MessageBoxA VCMessageBoxA(NULL,NULL,NULL,MB_OK)CALL dword ptr [0040d244]VC作了优化ASMinvoke  MessageBoxA,NULL,NULL,NULL,MB_OKCall 401abc401abc :jmp dword ptr [0040d244]未优化时,函数名代表了jmp dword ptr [00...

2013-09-27 11:17:03 1123

原创 逆向虚函数

 对象结构体  虚函数表    xxxxx    0x800Jmp sub_xxxxxx xxxxx       xxxxx  0x800 0x250Jmp sub_xxxxxx xxxxx 0x800x250   ObjectAD0x20 0x80        虚函数表存在了.rdata节区...

2013-09-27 11:15:09 630

原创 自己对栈帧的理解

1 当函数被调用时,系统栈会为这个函数开辟一个新的栈帧,并把它压入栈。当函数返回时,系统栈会弹出该函数所对应的栈帧。 2 ESP总是指向系统栈的顶部,EBP指向的是系统栈最上面一个栈帧的底部,底部存的第一个是ebp,这个ebp是上一个栈帧的底部 栈帧从底到高依次为:ebp(上一个栈帧的底部) ->当前函数的局部变量 ->要调用函数的实参 ->要调用函数的返回地址 3 修改邻接变量...

2013-09-27 11:12:14 1095

原创 条件判断 & 循环语句的逆向

【重点:当判断大于&小于时】(根据执行体是否紧贴着跳转指令来判断是那个条件语句)  一:执行体紧贴着跳转指令时,代码中的条件判断都会编译成否决条件的形式,原因如下: 如判断:if (a>5) printf("OK"); 1为真时是让它往下继续执行printf,可是为真的跳转指令都会跳转而不会向下执行,所以才会用否决条件的跳转指令 2这样原本的JG会编译成否决条件的跳转指令,即:JLE...

2013-09-27 11:08:01 1240

原创 指针的逆向

指针操作技巧 1 运算时一定要先把地址存入指向单字节指针中,这样指针运算时的+1才是加上一个地址 2要取单字节就将地址存入指向单字节指针中,要取四字节就将地址存入指向四字节的指针中,之后用指针[0]输出即可 3 指针的感觉:   一级指针存了变量 &结构体的地址OnePoint输出变量&结构体的地址OnePoint->Var输出结构体变量的某个成员OnePoint[5]输出变...

2013-09-27 11:03:11 1089

原创 逆向for语句

注释:1、ebp减的越多则位置越靠下,结构体中的第一个成员(cpu_num)的位置是最底下的位置,即:ebp-0D4H2、第二个成员cpu_name,字符串所占的14个字节+ 36(9次4字节的填充0的操作) +  =cpu_name[50],之后省去了两个地址9E和9D,这样从地址9C开始的4个字节就是cpu_speed(9C+9B+9A+99)3、虽然在堆栈上分配空间是向下扩展的,但是设置数据...

2013-09-27 11:00:38 879

原创 二维数组对比一维数组的取值差别是多了一个行偏移的计算

2013-09-27 10:58:58 980

原创 通过寄存器作中转来修改变量的值,因为内存之间无法寻址操作

2013-09-27 10:56:26 840

原创 定位到驱动中的分派函数

计算方法就是用IDA中的数减去38,再除以4即可。注意整个计算过程在十六进制上进行 edx+38就是函数指针数组MajorFunction的第一个数据元素 38h = 38h- 38h = 0 / 4(每个数据元素是一个函数指针,占4个字节)  = 0 40h = 40h - 38h= 8h / 4 = 2 44h = 44h - 38h= ch / 4 = 3...

2013-09-27 10:54:19 683

原创 VA转换FileOffset

将VA转换成FileOffset地址,先用VA-400000得到RVA,RVA-RVA所在节的起始地址[虚拟地址](RVA所在节的起始地址通过PEID软件获得),得到偏移地址。通过PEID软件获得获得RVA所在节的起始地址[文件偏移地址]。用这个地址和前面获得的偏移地址相加即可得到最终需要的地址。用HexWorkshop对这个地址进行修改即可。 EXAMPLE:401010(VA)-400000=...

2013-09-27 10:53:12 1153

原创 驱动中设备符号名写法

/创建设备名称UNICODE_STRING devName;RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice"); //创建设备status =IoCreateDevice(pDriverObject,//驱动对象sizeof(DEVICE_EXTENSION),//自定义的扩展结构的大小&(UNICODE_

2013-09-27 10:48:06 1870

原创 StackSize & CurrentLocation & StackCount & IopfCallDriver内部设置当前堆栈单元的代码

StackSize:共几个IO空间:在每个设备对象中,有个StackSize子域,表明操作这个设备对象需要几层才能到达最下层的物理设备。(若共四个设备,最顶端的设备的StackSize  = 4,最底下的设备的StackSize  = 1      HighFiDO -> FDO -> LowFiDO ->PDO )CurrentLocation :IRP头中的CurrentLocation字

2013-09-27 10:46:20 982

原创 通过测试实例详细分析 IoMarkPending 的原理

使用IoMarkPending的原因及原理 为了使系统吞吐量最大化,I/O管理器希望驱动程序推迟其耗时IRP的完成。驱动程序通过在某个派遣例程中调用IoMarkIrpPending函数并返回STATUS_PENDING来表示完成操作被推迟。 I/O管理器在处理推迟完成时有下面类似的逻辑: Irp->UserEvent =pEvent;//  don't do thisyou

2013-09-27 10:33:37 1437

原创 ListEntry 链表图解,及解析 InsertTailList & RemoveHeadList&RemoveEntryList函数

一:NPROT_INSERT_TAIL_LIST(&pOpenContext->PendedReads, &pIrp->Tail.Overlay.ListEntry); #define NPROT_INSERT_TAIL_LIST(_pList, _pEnt)InsertTailList(_pList, _pEnt)  二:pIrpEntry =pOpenContext->Pe

2013-09-27 10:15:11 4480

原创 详细分析CONTAINING_RECORD宏

该宏的作用是:用结构成员中的ListEntry的地址(0x108)减去结构体成员ListEntry到首地址的距离(8)得到结构体首地址(0x100)  pEntry中的值就是结构成员中的ListEntry的地址。即:0x108ListEntry0x108 结构成员中的ListEntry的地址,也是RemoveHeadList函数函数的

2013-09-27 10:10:23 958

原创 嵌套的 CONTAINING_RECORD 宏

第一个CONTAINING_RECORD&NPORT_RECV_PACKET_RSVD得到了NPROT_RECT_PACKET_RSVD.link的地址,因为NPROT_RECT_PACKET_RSVD存于NDIS_PACKET.ProtocolReserved处,所以NPROT_RECT_PACKET_RSVD.link的地址就NDIS_PACKET结构中最后一个成员ProtocolReserv

2013-09-27 10:04:59 657

GUIDGEN生成GUID

生成GUID号,可用于驱动中定义设备的GUID。

2013-09-26

DriverLoad-monitor

DriverLoad-monitor,驱动加载工具,通用各个操作系统。

2013-09-26

DeviceTree-64bit.zip

驱动开发 DeviceTree,支持64位操作系统。

2013-09-26

CuteFTP 文件上传

CuteFTP 文件上传,支持WIN7 64位

2013-09-26

CTL_CODE 驱动

用于驱动开发,生成 CTL 码。生成自定义的CTL码。

2013-09-26

Wireshark-win64抓包工具

Wireshark-win64抓包工具,64位的

2013-09-26

U盘恢复工具

主要用于恢复U盘的扇区表等,常用于磁盘的驱动开发中。

2013-09-26

putty连接linux

putty连接linux,可滚屏并保存相关信息。

2013-09-26

WTL80 头文件

WTL80库,一些开发中会常用到的头文件等

2013-09-26

HttpWatch抓包

用于分析网页协议,可用于网络包重组的参考中

2013-09-26

字节转换工具

一个是单字节转换的,一个是双字节转换,支持生成数组并贴入代码中。

2013-09-26

visual studio 助手

支持VS2005 & VS2008 & VS2010 和VC6,里面有注册替换步骤。

2013-09-26

归纳 DPL RPL CPL

内核 系统 DPL RPL CPL , 调用门等

2012-02-11

DLL互引用的代码(汇编y引用VC的DLL,C引用ASM的DLL)

DLL互引用的代码(汇编y引用VC的DLL,C引用ASM的DLL),一个VC编写的WIN32窗口程序引用汇编编写的DLL,并用地址做返回值。。。。。。。

2008-12-23

Window_Control,win32asm版本的,基于Static,Edit,ListBox,ComBox,Button

Window_Control,win32asm版本的,基于Static,Edit,ListBox,ComBox,Button

2008-10-22

asm全部指令的例子

asm全部指令的例子asm全部指令的例子asm全部指令的例子asm全部指令的例子asm全部指令的例子

2008-10-19

空空如也

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

TA关注的人

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