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(''):
  8. LPBYTE = POINTER(c_byte)
  9.  
  10. # 为ctypes创建匿名
  11. WORD = c_ushort
  12. DWORD = c_ulong
  13. LPBYTE = POINTER(c_ubyte)
  14. LPTSTR = POINTER(c_byte)
  15. HANDLE = c_void_p
  16.  
  17. # 常量定义
  18. DEBUG_PROCESS = 0x00000001
  19. CREATE_NEW_CONSOLE = 0x00000010
  20. DBG_EXCEPTION_NOT_HANDLED = 0x80010001
  21.  
  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

  1. #encoding:utf-8
  2.  
  3. from ctypes import *
  4. from my_debugger_defines import *
  5.  
  6. kernel32 = windll.kernel32
  7.  
  8. class debugger():
  9. def __init__(self):
  10. pass
  11.  
  12. def load(self, path_to_exe):
  13.  
  14. # 参数dwCreationFlags中标志位控制着进程的创建方式
  15. # 若需要创建的进程独占一个新的控制台窗口,而不是与父进程公用同-
  16. # - 一个控制台可以加上标志位 CREATE_NEW_CONSOLE
  17. creation_flags = DEBUG_PROCESS
  18.  
  19. #实例化之前的结构体
  20. startupinfo = STARTUPINFO()
  21. process_information = PROCESS_INFORMATION()
  22.  
  23. # 在以下两位成员变量的共同作用下,新建的进程将单独的窗体中被显示
  24. # 可以通过结构体 STARTUPINFO 中各个成员变量的值来控制debugee的进程行为
  25. startupinfo.dwFlags = 0x1
  26. startupinfo.wShowWindow = 0x0
  27.  
  28. # 设置结构体 STARTUPINFO的值
  29. # cb的值,表示结构体本身的大小
  30. startupinfo.cb = sizeof(startupinfo)
  31. #print(startupinfo.cb)
  32. ## On 64-bit windows, sizeof(STARTUPINFO) == 104.
  33. ## On 32-bit windows, sizeof(STARTUPINFO) == 68.
  34. #print(STARTUPINFO.cb.offset)
  35. #print(STARTUPINFO.lpReserved.offset)
  36. #print(STARTUPINFO.lpDesktop.offset)
  37. #print(STARTUPINFO.lpTitle.offset)
  38. #print(STARTUPINFO.dwX.offset)
  39. #print(STARTUPINFO.dwY.offset)
  40. #print(STARTUPINFO.dwXSize.offset)
  41. #print(STARTUPINFO.dwYSize.offset)
  42. #print(STARTUPINFO.dwXCountChars.offset)
  43. #print(STARTUPINFO.dwYCountChars.offset)
  44. #print(STARTUPINFO.dwFillAttribute.offset)
  45. #print(STARTUPINFO.dwFlags.offset)
  46. #print(STARTUPINFO.wShowWindow.offset)
  47. #print(STARTUPINFO.cbReserved2.offset)
  48. #print(STARTUPINFO.lpReserved2.offset)
  49. #print(STARTUPINFO.hStdInput.offset)
  50. #print(STARTUPINFO.hStdOutput.offset)
  51. #print(STARTUPINFO.hStdError.offset)
  52. if kernel32.CreateProcessW(c_wchar_p(path_to_exe),
  53. c_wchar_p(0),
  54. 0,
  55. 0,
  56. 0,
  57. creation_flags,
  58. 0,
  59. 0,
  60. byref(startupinfo),
  61. byref(process_information)):
  62. print ("[*] we have successfully launched the process!")
  63. print ("[PID] :%d " %process_information.dwProcessId)
  64.  
  65. else:
  66. print("[*] Error:0x%08x. " %kernel32.GetLastError())

my_test.py

  1. #!encoding:utf-8
  2.  
  3. import my_debugger
  4.  
  5. debugger = my_debugger.debugger()
  6. 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. HDU 2955(0-1背包问题)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#problem/M 题目: Description The aspir ...

  2. Tom and paper

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5224 题意: 给出矩形的面积,求出最小的周长. 样例: Sample Input 3 2 7 12   ...

  3. navicat远程连接mysql

      转载:http://blog.sina.com.cn/s/blog_84485e540101178p.html   ERROR 1130: Host '192.168.1.81' is not a ...

  4. 1047. Student List for Course (25)

    Zhejiang University has 40000 students and provides 2500 courses. Now given the registered course li ...

  5. cmd 更改字体

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont,在右面找到936值双击打开,数 ...

  6. linux笔记三-------根目录相关说明

    1. /bin   binary二进制文件,可执行程序文件          ls   su    pwd    cd          内部文件是一些指令信息 2. /sbin  super bin ...

  7. 温故而知新 OOP

    设计原则1: 找出应用中可能需要发生改变的地方,把它们独立出来,不要和那些不需要变化的代码混在一起换句话说,如果每次新的需求一来,都会使某方面的代码发生变化,此时你就可以确定,这部分代码属于不稳定代码 ...

  8. 平方和和立方和_hdu2007

    #include <stdio.h>int main(){ int a, b, m , n, t;  while( scanf("%d %d", &a, &am ...

  9. 【转】解决jsp参数传递乱码的问题

    解决jsp参数传递乱码的问题 计算机生于美国,英语是他的母语,而英语以外的其它语言对他来说都是外语.他跟我们一样,不管外语掌握到什么程度,也不会像母语那样使用得那么好,时常也会出一些“拼写错误”问题. ...

  10. 数位dp/记忆化搜索

    一.引例 #1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an  ...