首页 > Python > Python灰帽子byref(process_information)

Python灰帽子byref(process_information)

最近决定把空出来的时间学习Python,基础部分则是打算从网上吸收各种教程,手头的书籍选择《Python灰帽子——黑客与逆向工程师的Python编程之道》,不过才开始写第三章的代码就遇到一个问题。因为书上漏掉了几行代码,而我是照着敲的,所以运行时出现了下面的提示:
D:\Python\Debugger>python my_test.py
Traceback (most recent call last):
File “my_test.py”, line 4, in
debugger.load(“C:\\WINDOWS\\system32\\calc.exe”)
File “D:\Python\Debugger\my_debugger.py”, line 25, in load
byref(process_information)):
WindowsError: exception: access violation writing 0x1D1A9D4E

就是书上CreateProcessA这个API的调用中少了几个参数而已。留个几号,相信会有人遇到同样的问题。

另外一个问题是,CreateProcessA调用总是返回[*] Error: 0×00000002.
非常奇怪的问题,后来用CreateProcessW就好了,不知道编码到底是怎么转换的。用MessageBoxA测试的话,只能显示字符串的第一个字符,说明确实使用了Unicode编码,所以要正确创建进程,就只能使用UNICODE版本的API了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from ctypes import *
from my_debugger_defines import *
 
kernel32 = windll.kernel32
 
class debugger():
	def __init__(self):
		pass
 
	def load(self, path_to_exe):
		creation_flags = DEBUG_PROCESS
		startupinfo = STARTUPINFO()
		process_information = PROCESS_INFORMATION()
 
		startupinfo.dwFlags = 0x1
		startupinfo.wShowWindow = 0x0
		startupinfo.cb = sizeof(startupinfo)
 
		if kernel32.CreateProcessW(path_to_exe, #UNICODE API
									None,	# NULL
									None,
									None,
									False,
									creation_flags,
									None,
									None,
									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())

觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> Python灰帽子byref(process_information)
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: Python 标签: , ,
  1. 2011年7月16日16:23 | #1

    不错,不错,继续关注,python也是我打算要学的一门语言呀

    [回复]

  2. 2011年7月16日18:21 | #2

    @the5fire的技术博客
    嘿嘿 我现在只是空余时间学习python,看一看。到时候可以一起交流哦

    [回复]

  3. PJ
    2011年7月17日12:34 | #3

    Python3.0以后,字符串默认是UNICODE编码。
    试试这个,转成ascii码应该就没问题了。
    kernel32.CreateProcessA(path_to_exe.encode(‘ascii’)

    [回复]

  4. 2011年7月18日08:52 | #4

    @PJ
    可以,多谢指点 [em018]

    [回复]

  5. 2011年7月20日00:38 | #5

    前段时间看过一点python,语法还没看完呢… 我还是先学Perl吧..

    [回复]

  6. 2011年7月20日09:23 | #6

    @leetom
    呵呵 脚本吧 学一门应该就好了吧,我就看python了

    [回复]

  7. backend
    2011年9月2日15:05 | #7

    你用的是Python 3.x吧?
    和Python 2.x及更早版本不同,从Python 3.x开始默认字符串都是Unicode编码,因此用CreateProcessA会出问题。

    [回复]

    代码疯子 回复:

    @backend, 是啊,下的是最新的。没接触过python的, [em012]

    [回复]

  8. 2011年10月9日13:56 | #8

    python好东西啊~ linux下自带。俺最近也开始研究鸟,不然太寂寞了。

    [回复]

    代码疯子 回复:

    @ymfoi, 我又好久没看了

    [回复]

  9. nervending
    2011年12月11日16:47 | #9

    我也遇到了这个问题,确实是书上少写了三个参数,我用的是2.6 3.X改动很多,现在的很多书讲的都2.x的

    [回复]

    代码疯子 回复:

    @nervending, 嗯,刚开始学的时候就遇到版本的问题

    [回复]

    nervending 回复:

    @代码疯子, 跑起来了,我在第二个例子中 调用DebugActiveProcess的时候失败 GetLastError() 返回的值是0×32 The request is not supported. 暂时 感觉貌似是权限不够,还在找解决方案,我系统是 Win7 64位的

    [回复]

    代码疯子 回复:

    @nervending, 目前没有用过64位系统。

    [回复]

    yelz 回复:

    @代码疯子, 装64位python就可以,你的应该是32位的。
    不过,后面还会遇到问题,64位上要跑通书上的例子,还是得花些功夫

    [回复]

    JoshuaGhost 回复:

    @nervending, 我遇到的问题与你是一样的,郁闷死了,调查了各种东西还是没有找到问题出在哪,如果你找出了解决方法咱们讨论下如何?
    email:sniperstriker#163.com

    [回复]

    代码疯子 回复:

    @JoshuaGhost, 可以参考下这里的讨论 http://advdbg.org/forums/5088/PrintPost.aspx

    [回复]

  10. yelz
    2012年1月25日10:52 | #10

    比如GetThreadContext这个函数,调用时,得自己定义64位格式下的context结构,不能用书上的。

    [回复]

    代码疯子 回复:

    @yelz, 是32位的系统

    [回复]

    ksp 回复:

    @yelz, 我做到這裏,試圖改過context結構,把dword換成c_ulonglong,但還是不可以,也找不到相關的資料。勞煩告知具體應該怎麼改

    [回复]

  11. puzzled
    2012年3月18日12:43 | #11

    [em016] 为什么我的这段程序执行就要问题,我的系统是win7 64bit
    [*] Error:0x0000007b.
    同样的代码,我以前用的是python3.2才开始学,结果买的书是讲python2的果断下了python2还是有问题,求指导,我待会儿到虚拟机xp去跑一下

    [回复]

  12. puzzled
    2012年3月18日12:43 | #12

    [em016] 为什么我的这段程序执行就要问题,我的系统是win7 64bit
    [*] Error:0x0000007b.
    同样的代码,我以前用的是python3.2才开始学,结果买的书是讲python2的果断下了python2还是有问题,求指导,我待会儿到虚拟机xp去跑一下

    [回复]

  13. puzzled
    2012年3月18日12:43 | #13

    [em016] 为什么我的这段程序执行就要问题,我的系统是win7 64bit
    [*] Error:0x0000007b.
    同样的代码,我以前用的是python3.2才开始学,结果买的书是讲python2的果断下了python2还是有问题,求指导,我待会儿到虚拟机xp去跑一下

    [回复]

  14. puzzled
    2012年3月18日12:43 | #14

    [em016] 为什么我的这段程序执行就要问题,我的系统是win7 64bit
    [*] Error:0x0000007b.
    同样的代码,我以前用的是python3.2才开始学,结果买的书是讲python2的果断下了python2还是有问题,求指导,我待会儿到虚拟机xp去跑一下

    [回复]

    代码疯子 回复:

    @puzzled, 文件名、目录名或卷标语法不正确。 你确定你的路径没有问题吗?

    [回复]

  15. puzzled
    2012年3月19日10:06 | #15

    [em021] 第一个问题解决了,不过我还是用的CreateProcessA,就如你上面说的一样是因为书上参数给错了,不过这本书的下一个代码我总是调不通 [em017] ,算了,我还是去把最基础学一下再来看这个,你调通了吗,能留下你的联系方式,我们交流下吗 [em011]

    [回复]

  16. puzzled
    2012年3月19日10:07 | #16

    这个网站,这种交流方式,真的喜欢不需要注册 [em003]

    [回复]

    代码疯子 回复:

    @puzzled, 加QQ吧 我也没仔细看这本书 0x1D78F913 转成10进制就是我的QQ了

    [回复]

  17. 2013年3月27日07:10 | #17

    ..成功了.. 随便问下博主,,你的python有试过在android上跑吗?

    [回复]

    代码疯子 回复:

    @Voll, 没有在Android上试过

    [回复]

  18. 2013年7月30日17:09 | #18

    中文版的书少了个参数None.

    [回复]

  19. 我是大缺弦
    2015年5月28日10:31 | #19

    谢谢!解决了我的问题!

    [回复]

  20. walker
    2016年4月27日11:14 | #20

    太感谢了,解决了我的问题

    [回复]