自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Jiangkai.net

专注于黑客技术 & 驱动开发 & 逆向反汇编方面的研究与探索。

  • 博客(22)
  • 资源 (1)
  • 收藏
  • 关注

原创 VA转换FileOffset

VA转换FileOffset分类: 逆向反汇编 2013-09-27 10:53 311人阅读 评论(0)收藏 举报病毒蠕虫将VA转换成FileOffset地址,先用VA-400000得到RVA,RVA-RVA所在节的起始地址[虚拟地址](RVA所在节的起始地址通过PEID软件获得),得到偏移地址。通过PEID软件获得获得RVA所在节

2015-10-05 10:30:26 284

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

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

2015-10-05 10:29:34 192

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



2015-10-05 10:28:41 330

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

: 逆向反汇编 2013-09-27 10:58 289人阅读 评论(0)收藏 举报版权声明:本文为博主原创文章,未经博主允许不得转载。

2015-10-05 10:25:32 259

原创 逆向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、虽然在

2015-10-05 10:24:14 250

原创 指针的逆向

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

2015-10-05 10:23:33 396

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

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

2015-10-05 10:22:40 318

原创 自己对栈帧的理解

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

2015-10-05 10:21:52 295

原创 逆向虚函数

 对象结构体  虚函数表    xxxxx    0x800Jmp sub_xxxxxx xxxxx 

2015-10-05 10:20:59 304

原创 HOOK 系统 API

一调用系统函数 MessageBoxA VCMessageBoxA(NULL,NULL,NULL,MB_OK)CALL dword ptr [0040d244]VC作了优化ASMinvoke  MessageBoxA,NULL,NULL,NULL,MB_OKCall 401abc

2015-10-05 10:19:56 270

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

#include #include using namespace std;typedef void(*pF)(); void test(){  cout}void fun(){  cout}void Hook(pF pf1,pF pf2){ //输入“JMP步长”指令的 地址printf("pf1=%.8x\n",pf1

2015-10-05 10:19:09 227

原创 缓冲区溢出的例子

     2013-09-29 09:50 225人阅读 评论(0)收藏 举报逆向缓冲区攻击1.代码如下:#include#includeroot (){printf("your have a root!\n");}main (){char passwd[16]; char login[16];printf("login

2015-10-05 10:15:25 496

原创 CrackMe.exe 解密流程

     2013-09-29 09:59 634人阅读 评论(0)收藏 举报逆向

2015-10-05 10:14:06 833

原创 中断和异常

     2013-09-29 09:41 280人阅读 评论(0)收藏 举报操作系统【归纳】 1、中断和异常机制会产生向量号。(中断的向量号:通过8259A可编程中断控制器产生的IRQ与向量号相关联) 2、向量号会作为IDT中的索引来取出门描述符。向量号与IDT表一一对应。如向量号0对应着IDT表中的第一个门描述符。 3、软中断指令

2015-10-05 10:12:30 705

原创 分页机制

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

2015-10-05 10:11:30 330

原创 嵌套的 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

2015-10-05 09:34:26 210

原创 详细分析CONTAINING_RECORD宏

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

2015-10-05 09:33:29 843

原创 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

2015-10-05 09:32:45 1308

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

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

2015-10-05 09:32:01 593

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

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

2015-10-05 09:30:47 561

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

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

2015-10-05 09:28:58 321

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

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

2015-10-05 09:22:56 1062

空空如也

空空如也

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

TA关注的人

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