博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
debuggee python
阅读量:5062 次
发布时间:2019-06-12

本文共 3980 字,大约阅读时间需要 13 分钟。

my_debugger_defines.py

1 #encoding:utf-8 2  3 from ctypes import * 4 from sys import version as py_ver 5  6 # In python 2.7.6, LPBYTE is not defined in ctypes.wintypes 7 if py_ver.startswith('2'): 8     LPBYTE = POINTER(c_byte) 9     10 # 为ctypes创建匿名11 WORD = c_ushort12 DWORD = c_ulong13 LPBYTE = POINTER(c_ubyte)14 LPTSTR = POINTER(c_byte)15 HANDLE = c_void_p16 17 # 常量定义18 DEBUG_PROCESS = 0x0000000119 CREATE_NEW_CONSOLE = 0x0000001020 DBG_EXCEPTION_NOT_HANDLED = 0x8001000121 22 # 定义行数CreateProcessA()所需要的结构体23 class STARTUPINFO(Structure):24     _fields_ = [25         ("cb",  DWORD),26         ("lpReserved",  LPTSTR),27         ("lpDesktop",   LPTSTR),28         ("lpTitle",     LPTSTR),29         ("dwX",         DWORD),30         ("dwY",         DWORD),31         ("dwXSize",     DWORD),32         ("dwYSize",     DWORD),33         ("dwXCountChars", DWORD),34         ("dwYCountChars", DWORD),35         ("dwFillAttribute", DWORD),36         ("dwFlags",     DWORD),37         ("wShowWindow", WORD),38         ("cbReserved2", WORD),39         ("lpReserved2", LPBYTE),40         ("hStdInput",   HANDLE),41         ("hStdOutput",  HANDLE),42         ("hStdError",   HANDLE),43     ]44     45 class PROCESS_INFORMATION(Structure):46     _fields_ = [47         ("hProcess",    HANDLE),48         ("hThread",     HANDLE),49         ("dwProcessId", DWORD),50         ("dwThreadId",  DWORD),51     ]

my_debugger.py

#encoding:utf-8from ctypes import *from my_debugger_defines import *kernel32 = windll.kernel32class debugger():    def __init__(self):        pass        def load(self, path_to_exe):                # 参数dwCreationFlags中标志位控制着进程的创建方式        # 若需要创建的进程独占一个新的控制台窗口,而不是与父进程公用同-        # - 一个控制台可以加上标志位 CREATE_NEW_CONSOLE        creation_flags = DEBUG_PROCESS                #实例化之前的结构体        startupinfo = STARTUPINFO()        process_information = PROCESS_INFORMATION()                # 在以下两位成员变量的共同作用下,新建的进程将单独的窗体中被显示        # 可以通过结构体 STARTUPINFO 中各个成员变量的值来控制debugee的进程行为        startupinfo.dwFlags = 0x1        startupinfo.wShowWindow = 0x0                # 设置结构体 STARTUPINFO的值        # cb的值,表示结构体本身的大小        startupinfo.cb = sizeof(startupinfo)        #print(startupinfo.cb)        ## On 64-bit windows, sizeof(STARTUPINFO) == 104.        ## On 32-bit windows, sizeof(STARTUPINFO) == 68.        #print(STARTUPINFO.cb.offset)        #print(STARTUPINFO.lpReserved.offset)        #print(STARTUPINFO.lpDesktop.offset)        #print(STARTUPINFO.lpTitle.offset)        #print(STARTUPINFO.dwX.offset)        #print(STARTUPINFO.dwY.offset)        #print(STARTUPINFO.dwXSize.offset)        #print(STARTUPINFO.dwYSize.offset)        #print(STARTUPINFO.dwXCountChars.offset)        #print(STARTUPINFO.dwYCountChars.offset)        #print(STARTUPINFO.dwFillAttribute.offset)        #print(STARTUPINFO.dwFlags.offset)        #print(STARTUPINFO.wShowWindow.offset)        #print(STARTUPINFO.cbReserved2.offset)        #print(STARTUPINFO.lpReserved2.offset)        #print(STARTUPINFO.hStdInput.offset)        #print(STARTUPINFO.hStdOutput.offset)        #print(STARTUPINFO.hStdError.offset)        if kernel32.CreateProcessW(c_wchar_p(path_to_exe),                                   c_wchar_p(0),                                   0,                                   0,                                   0,                                   creation_flags,                                   0,                                   0,                                   byref(startupinfo),                                   byref(process_information)):            print ("[*] we have successfully launched the process!")            print ("[PID] :%d " %process_information.dwProcessId)                else:            print("[*] Error:0x%08x. " %kernel32.GetLastError())

my_test.py

#!encoding:utf-8import my_debuggerdebugger = my_debugger.debugger()debugger.load("C:\\Windows\\system32\\calc.exe")

 

 

参考:Python灰帽子-黑客与逆向工程师的Python编程之道

转载于:https://www.cnblogs.com/hujianping/p/4648176.html

你可能感兴趣的文章
Missing letters
查看>>
Virtual Machine Converter 3.0 发布了
查看>>
强连通 HDU 3639
查看>>
Python 3语法小记(九) 异常 Exception
查看>>
DSP TMS320C6000基础学习(4)—— cmd文件分析
查看>>
角色权限etmvc+jQuery EasyUI+combobox多值操作实现角色授权
查看>>
Prototype Pattern
查看>>
前端工具----iconfont
查看>>
过完年了,要不要辞职?
查看>>
每天一个linux命令(57):ss命令
查看>>
Javascript获得当前网页页面详细地址的实现
查看>>
tcp ip协议讲解
查看>>
linux内核系统调用和标准C库函数的关系分析
查看>>
nginx log 错误502 upstream sent too big header while reading response header from upstream
查看>>
CGI,FastCGI,PHP-CGI与PHP-FPM(转)
查看>>
学习陆汝铃老师一篇序言有感
查看>>
Tcpdump
查看>>
Android TabHost中使用startActivityForResult无法接收返回值的解决方案
查看>>
做一些面试题目(JavaScript部分)
查看>>
Azure Site Recovery 通过一键式流程将虚拟机故障转移至 Azure虚拟机
查看>>