ich habe vor in die Welt von Python einzutauchen, doch bin sehr früh auf den Boden gekommen...
Bin einigermaßen mit Java und C# vertraut und habe mir das Buch Gray Hat Python zugelegt, da es mich schon immer in Richtung Programmanalyse/Reverse Engineering gezogen hat(the matrix has you neo *g*).
Bevor ich auf mein Problem eingehe beschreibe ich allerdings meine Entwicklungsumgebung einwenig. Vielleicht ist ja da der Wurm drin x)
Habe mir Eclipse(Version 3.5.2) mit PyDev(Version 1.5.9) und Python(Version 2.5) angeschafft.
Nun bin ich beim Entwerfen eines eigenen Debuggers angekommen, aber habe einige Probleme mit dem im Buch angegebenen Beispielcode:
my_debugger_defines.py
Code: Alles auswählen
from ctypes import *
# Microsoft Typen auf ctypes abbilden
WORD = c_ushort
DWORD = c_ulong
LPBYTE = POINTER(c_ubyte)
LPTSTR = POINTER(c_char)
HANDLE = c_void_p
# Konstanten
DEBUG_PROCES = 0x00000001
CREATE_NEW_CONSOLE = 0x00000001
# Strukturen->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),
]
Code: Alles auswählen
from ctypes import *
from my_debugger_defines import *
kernel32 = windll.kernel32
class debuger():
def _init_(self):
pass
def load(self,path_to_exe):
#dwCreation-Flag bestimmt, wie der Prozess zu erzeugen ist
#creation_flags = CREATE_NEW_CONSOLE setzen
creation_flags = DEBUG_PROCESS
#Strukturen instanziieren
startupinfo = STARTUPINFO()
process_information = PROCESS_INFORMATION()
#nun den gestarteten Prozess in einem seperaten Fenster darstellen
startupinfo.dwFlags = 0x1
startupinfo.wShowWindow = 0x0
#initialisieren der cb-Variablen der STARTUPINFO Structure
startupinfo.cb = sizeof(startupinfo)
if kernel32.CreateProcessA(path_to_exe,
None,
None,
None,
None,
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()
Code: Alles auswählen
import my_debugger
debugger = my_debugger.debugger()
debugger.load("C:\\WINDOWS\\system32\\calc.exe")
Das Gleiche Problem tritt nochmal in Zeile 18 auf ("process_information = PROCESS_INFORMATION()").
Und ja ihr könnt es sicher schon denken... nochmal das Problem in der my_test.py:
In Zeile 3 "Undefined variable from import: debugger".
Schon ewig viel gegoogled/gelesen/rumgebastelt, aber nichts wirklich hilfreiches gefunden.
Zum Glück gibt es ja noch viele andere in Python Mächtige die mich hoffentlich ein wenig zurecht weisen können

MfG cn.