灰帽子
Ltanke
这个作者很懒,什么都没留下…
展开
-
python灰帽子--调试器基础4:实现调试事件处理
承接上文,调试器基础2,调试器基础3为了让调试器能够针对特定的事件采取相应的行动,我们必须给所有调试器能够捕捉到的调试事件,编写处理函数。回顾一下上文提到的WaitForDebugEvent()函数,每当它捕获到一个调试事件的时候,就返回一个填充好的DEBUG_EVENT结构。现在我们要用存储在结构里的信息决定如何处理调试事件DEBUG_EVENT定义如下:typedef struct DEBUG_EVENT { DWORD dwDebugEventCode; DWORD dwProcessI原创 2020-07-29 10:40:06 · 278 阅读 · 0 评论 -
python灰帽子--调试器基础3:获得线程相关寄存器状态
承接上文 进程调试基础2一个调试器必须能够在任何时候都搜集到CPU的各个寄存器的状态。当异常发生的时候这能让我们确定栈的状态,目前正在执行的指令是什么,以及其他一些非常有用的信息。理论基础1 - 要实现这个目标,首先要获取被调试目标内部的线程句柄。该功能由OpenThread()实现,函数原型:HANDLE WINAPI OpenThread( DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwThreadId);要获取线程id(原创 2020-07-28 13:44:18 · 640 阅读 · 8 评论 -
python灰帽子--进程调试基础2:将调试附加到进程
承接上一篇,进程调试基础1第二种方法:将调试附加到一个正在运行的进程。(1) 要附加到指定的进程,需要先获得他的句柄。这个任务由OpenProcess()完成,次函数有kernel32.dll库导出。原型如下HANDLE WINAPI OpenProcess( DWORD dwDesiredAccess, BOOL bInheritHandle DWORD dwProcessId);dwDesiredAccess:参数决定我们希望对将要打开的进程拥有什么样的权限因为要执原创 2020-07-28 08:33:32 · 985 阅读 · 0 评论 -
python灰帽子--调试基础(结构体及常量定义)
此文章为调试基础篇常量及结构体的定义# coding=utf-8from ctypes import *WORD = c_ushortDWORD = c_ulongBYTE = c_ubyteLPBYTE = POINTER(c_ubyte)LPTSTR = POINTER(c_char)HANDLE = c_void_pPVOID = c_void_pULONG_PTR = c_ulongLPVOID = c_void_pUINT_PTR = c_ulongSIZE_T = c_原创 2020-07-28 07:37:15 · 508 阅读 · 0 评论 -
灰帽子笔记--进程调试基础1:创建调试进程
为了对一个进程进行调试,你首先必须用一些方法把调试器和进程连接起来。所以,我们的调试器要不然就是装载一个可执行程序然后运行它,要不然就是动态的附加到一个运行的进程。第一种方法,其实就是从调试器本身调用这个程序(调试器就是父进程,对被调试进程的控制权限更大)。在 Windows 上创建一个进程用 CreateProcessA()函数函数原型:BOOL WINAPI CreateProcessA(LPCSTR lpApplicationName,LPTSTR lpCommandLine,LPSE原创 2020-07-28 05:42:22 · 556 阅读 · 0 评论