自定义博客皮肤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 402

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

 计算方法就是用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 278

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



2015-10-05 10:28:41 434

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

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

2015-10-05 10:25:32 338

原创 逆向for语句

 注释: 1、ebp减的越多则位置越靠下,结构体中的第一个成员(cpu_num)的位置是最底下的位置,即:ebp-0D4H 2、第二个成员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 321

原创 指针的逆向

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

2015-10-05 10:23:33 467

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

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

2015-10-05 10:22:40 415

原创 自己对栈帧的理解

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

2015-10-05 10:21:52 373

原创 逆向虚函数

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

2015-10-05 10:20:59 390

原创 HOOK 系统 API

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

2015-10-05 10:19:56 352

原创 两个内部函数体之间的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 316

原创 缓冲区溢出的例子

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

2015-10-05 10:15:25 600

原创 CrackMe.exe 解密流程

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

2015-10-05 10:14:06 993

原创 中断和异常

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

2015-10-05 10:12:30 854

原创 分页机制

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

2015-10-05 10:11:30 416

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

原创 详细分析CONTAINING_RECORD宏

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

2015-10-05 09:33:29 938

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

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

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

2015-10-05 09:32:01 708

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

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

2015-10-05 09:30:47 699

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

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

2015-10-05 09:28:58 389

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

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

2015-10-05 09:22:56 1149

空空如也

空空如也

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

TA关注的人

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