my_debugger_defines.py

 #encoding:utf-8

 from ctypes import *
from sys import version as py_ver # In python 2.7.6, LPBYTE is not defined in ctypes.wintypes
if py_ver.startswith(''):
LPBYTE = POINTER(c_byte) # 为ctypes创建匿名
WORD = c_ushort
DWORD = c_ulong
LPBYTE = POINTER(c_ubyte)
LPTSTR = POINTER(c_byte)
HANDLE = c_void_p # 常量定义
DEBUG_PROCESS = 0x00000001
CREATE_NEW_CONSOLE = 0x00000010
DBG_EXCEPTION_NOT_HANDLED = 0x80010001 # 定义行数CreateProcessA()所需要的结构体
class STARTUPINFO(Structure):
_fields_ = [
("cb", DWORD),
("lpReserved", LPTSTR),
("lpDesktop", LPTSTR),
("lpTitle", LPTSTR),
("dwX", DWORD),
("dwY", DWORD),
("dwXSize", DWORD),
("dwYSize", DWORD),
("dwXCountChars", DWORD),
("dwYCountChars", DWORD),
("dwFillAttribute", DWORD),
("dwFlags", DWORD),
("wShowWindow", WORD),
("cbReserved2", WORD),
("lpReserved2", LPBYTE),
("hStdInput", HANDLE),
("hStdOutput", HANDLE),
("hStdError", HANDLE),
] class PROCESS_INFORMATION(Structure):
_fields_ = [
("hProcess", HANDLE),
("hThread", HANDLE),
("dwProcessId", DWORD),
("dwThreadId", DWORD),
]

my_debugger.py

#encoding:utf-8

from ctypes import *
from my_debugger_defines import * kernel32 = windll.kernel32 class 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-8

import my_debugger

debugger = my_debugger.debugger()
debugger.load("C:\\Windows\\system32\\calc.exe")

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

debuggee python的更多相关文章

  1. 《python灰帽子》学习笔记:写一个windos 调试器(一)

    一.开发内容介绍 为了对一个进程进行调试,你首先必须用一些方法把调试器和进程连接起来.所以, 我们的调试器要不然就是装载一个可执行程序然后运行它, 要不然就是动态的附加到一个运行的进程.Windows ...

  2. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  3. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  4. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  5. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  6. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  7. 使用Python保存屏幕截图(不使用PIL)

    起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...

  8. Python编码记录

    字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...

  9. Apache执行Python脚本

    由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...

随机推荐

  1. 兼容性好的CSS字体投影

    <p>兼容性良好的css文字描边</p> <style><!-- h1, p { color: #fff; width: 100%; text-align: ...

  2. Hibernate提供的内置标识符生成器

    Hibernate提供的内置标识符生成器 Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键来识别或区分同一个表的不同记录.Hibernate使用OID(对象标识符)来统一两者之 ...

  3. TLV简介

    引子: 前段时间在项目中第一次接触TLV,项目中用这种格式来传输图片,语音等. 关于TLV TLV是一种可变的格式,意为:Type类型, Lenght长度,Value值.Type:该字段是关于标签和编 ...

  4. [LintCode] Copy Books 复印书籍

    Given an array A of integer with size of n( means n books and number of pages of each book) and k pe ...

  5. [LintCode] Move Zeroes 移动零

    Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...

  6. 将普通工程转为mvn标准工程(main resources)

    It is sometimes required to change the default source folder working on the java project. One best e ...

  7. 一款查看mysql QPS的脚本

    本脚本黏贴就可以使用绝对不坑人!!! (此脚本来源如一位大神网友) 执行效果: 脚本: #!/bin/bashPW=Eqipay20150504@mysqladmin -P3306 -uroot -p ...

  8. 第1章 Bootstrap介绍

    学习网址:http://www.bootcss.com/ 下载网址:http://v3.bootcss.com/ 下载后一共三个文件夹 css js fonts 引入的文件 <link rel= ...

  9. JSP中乱码问题

    一.JSP页面显示乱码 二.表单提交中文时出现乱码 三.数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到的中文乱码的问题及解决办法写出来供大 ...

  10. Ubuntu14.04配置记录

    公司配的台式机,新装了ubuntu,记录下配置过程. vim sudo apt-get install vim unzip sudo apt-get install unzip unrar sudo ...