今天的学习点是调用ctypes的createProcess函数来启动程序。
主要包括数据类型的映射和结构的映射等。
按书中的代码边抄边理解了之后,调用calc.exe,出现结果:
[*] Error: 0x00000002.
查了错误表,说是没找到文件。
机智的我把path_to_exe打出来:
C:\Windows\WinSxS\amd64_microsoft-windows-calc_31bf3856ad364e35_10.0.10586.0_none_36439993c5132b2e\calc.exe
[*] Error: 0x00000002.
发现有的反斜杠转义了,有的没有呢。
突然想到上一篇的宽字符问题,于是把my_debugger里的CreateProcessA改成CreateProcessW,来来来,给你宽宽宽。
这下路径倒是对了,但是又出了新的错误:
C:\Windows\WinSxS\amd64_microsoft-windows-calc_31bf3856ad364e35_10.0.10586.0_none_36439993c5132b2e\calc.exe
[*] Error: 0x00000032.
楞尼玛。。查这个32错误说是不支持的网络之类的。但是这个计算器程序根本不需要网络啊。
后来在stackoverflow上发现,说这个调64位程序就会异常,要调32位的,也就是在syswow64里面的那个计算器。
果然调那个就返回正确的样子了:
[*] We have successfully launched the process!
[*] PID: 8888
然而该怎么调64位的程序呢?