@@ -90,7 +90,7 @@ <h1>Source code for windows.hooks</h1><div class="highlight"><pre>
9090
9191< div class ="viewcode-block " id ="IATHook "> < a class ="viewcode-back " href ="../../iat_hook.html#windows.hooks.IATHook "> [docs]</ a > < span class ="k "> class</ span > < span class ="nc "> IATHook</ span > < span class ="p "> (</ span > < span class ="nb "> object</ span > < span class ="p "> ):</ span >
9292 < span class ="sd "> """Look at my hook <3"""</ span >
93- < span class ="n " > yolo</ span > < span class =" o " > = </ span > < span class =" p " > []</ span >
93+ < span class ="c1 " > # yolo = []</ span >
9494
9595 < span class ="k "> def</ span > < span class ="nf "> __init__</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> IAT_entry</ span > < span class ="p "> ,</ span > < span class ="n "> callback</ span > < span class ="p "> ,</ span > < span class ="n "> types</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ):</ span >
9696 < span class ="k "> if</ span > < span class ="n "> types</ span > < span class ="ow "> is</ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
@@ -101,10 +101,16 @@ <h1>Source code for windows.hooks</h1><div class="highlight"><pre>
101101 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> callback_types</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> transform_arguments</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> original_types</ span > < span class ="p "> )</ span >
102102 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> entry</ span > < span class ="o "> =</ span > < span class ="n "> IAT_entry</ span >
103103 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> callback</ span > < span class ="o "> =</ span > < span class ="n "> callback</ span >
104+ < span class ="c1 "> ## No more circular ref -> but stub is destroyed -> segv :(</ span >
104105 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> stub</ span > < span class ="o "> =</ span > < span class ="n "> ctypes</ span > < span class ="o "> .</ span > < span class ="n "> WINFUNCTYPE</ span > < span class ="p "> (</ span > < span class ="o "> *</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> callback_types</ span > < span class ="p "> )(</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> hook_callback</ span > < span class ="p "> )</ span >
105- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> stub_addr</ span > < span class ="o "> =</ span > < span class ="n "> ctypes</ span > < span class ="o "> .</ span > < span class ="n "> cast</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> stub</ span > < span class ="p "> ,</ span > < span class ="n "> PVOID</ span > < span class ="p "> )</ span > < span class ="o "> .</ span > < span class ="n "> value</ span >
106+ < span class ="c1 "> # stub = ctypes.WINFUNCTYPE(*self.callback_types)(self.hook_callback)</ span >
107+ < span class ="c1 "> # self.stub_addr = ctypes.cast(stub, PVOID) # Same problem as keep stub... (GC..)</ span >
108+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> stub_addr</ span > < span class ="o "> =</ span > < span class ="n "> ctypes</ span > < span class ="o "> .</ span > < span class ="n "> cast</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> stub</ span > < span class ="p "> ,</ span > < span class ="n "> PVOID</ span > < span class ="p "> )</ span > < span class ="o "> .</ span > < span class ="n "> value</ span > < span class ="c1 "> # Same problem as keep stub... (GC..)</ span >
109+ < span class ="c1 "> # IAT_entry.stub = stub</ span >
110+ < span class ="nb "> print</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> stub_addr</ span > < span class ="p "> )</ span >
106111 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> realfunction</ span > < span class ="o "> =</ span > < span class ="n "> ctypes</ span > < span class ="o "> .</ span > < span class ="n "> WINFUNCTYPE</ span > < span class ="p "> (</ span > < span class ="o "> *</ span > < span class ="n "> types</ span > < span class ="p "> )(</ span > < span class ="n "> IAT_entry</ span > < span class ="o "> .</ span > < span class ="n "> nonhookvalue</ span > < span class ="p "> )</ span >
107112 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> is_enable</ span > < span class ="o "> =</ span > < span class ="kc "> False</ span >
113+ < span class ="c1 "> # import pdb;pdb.set_trace()</ span >
108114 < span class ="c1 "> #IATHook.yolo.append(self)</ span >
109115
110116 < span class ="k "> def</ span > < span class ="nf "> transform_arguments</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> types</ span > < span class ="p "> ):</ span >
@@ -119,14 +125,17 @@ <h1>Source code for windows.hooks</h1><div class="highlight"><pre>
119125< div class ="viewcode-block " id ="IATHook.enable "> < a class ="viewcode-back " href ="../../iat_hook.html#windows.hooks.IATHook.enable "> [docs]</ a > < span class ="k "> def</ span > < span class ="nf "> enable</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ):</ span >
120126 < span class ="sd "> """Enable the IAT hook: you MUST keep a reference to the IATHook while the hook is enabled"""</ span >
121127 < span class ="k "> with</ span > < span class ="n "> utils</ span > < span class ="o "> .</ span > < span class ="n "> VirtualProtected</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> entry</ span > < span class ="o "> .</ span > < span class ="n "> addr</ span > < span class ="p "> ,</ span > < span class ="n "> ctypes</ span > < span class ="o "> .</ span > < span class ="n "> sizeof</ span > < span class ="p "> (</ span > < span class ="n "> PVOID</ span > < span class ="p "> ),</ span > < span class ="n "> PAGE_EXECUTE_READWRITE</ span > < span class ="p "> ):</ span >
122- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> entry</ span > < span class ="o "> .</ span > < span class ="n "> value</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> stub_addr</ span > </ div >
123- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> is_enable</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span >
128+ < span class ="nb "> print</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> stub_addr</ span > < span class ="p "> )</ span >
129+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> entry</ span > < span class ="o "> .</ span > < span class ="n "> value</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> stub_addr</ span >
130+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> is_enable</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > </ div >
131+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> entry</ span > < span class ="o "> .</ span > < span class ="n "> enabled</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span >
124132
125133< div class ="viewcode-block " id ="IATHook.disable "> < a class ="viewcode-back " href ="../../iat_hook.html#windows.hooks.IATHook.disable "> [docs]</ a > < span class ="k "> def</ span > < span class ="nf "> disable</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ):</ span >
126134 < span class ="sd "> """Disable the IAT hook"""</ span >
127135 < span class ="k "> with</ span > < span class ="n "> utils</ span > < span class ="o "> .</ span > < span class ="n "> VirtualProtected</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> entry</ span > < span class ="o "> .</ span > < span class ="n "> addr</ span > < span class ="p "> ,</ span > < span class ="n "> ctypes</ span > < span class ="o "> .</ span > < span class ="n "> sizeof</ span > < span class ="p "> (</ span > < span class ="n "> PVOID</ span > < span class ="p "> ),</ span > < span class ="n "> PAGE_EXECUTE_READWRITE</ span > < span class ="p "> ):</ span >
128- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> entry</ span > < span class ="o "> .</ span > < span class ="n "> value</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> entry</ span > < span class ="o "> .</ span > < span class ="n "> nonhookvalue</ span > </ div >
129- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> is_enable</ span > < span class ="o "> =</ span > < span class ="kc "> False</ span >
136+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> entry</ span > < span class ="o "> .</ span > < span class ="n "> value</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> entry</ span > < span class ="o "> .</ span > < span class ="n "> nonhookvalue</ span >
137+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> is_enable</ span > < span class ="o "> =</ span > < span class ="kc "> False</ span > </ div >
138+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> entry</ span > < span class ="o "> .</ span > < span class ="n "> enabled</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span >
130139
131140 < span class ="k "> def</ span > < span class ="nf "> hook_callback</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="o "> *</ span > < span class ="n "> args</ span > < span class ="p "> ):</ span >
132141 < span class ="n "> adapted_args</ span > < span class ="o "> =</ span > < span class ="p "> []</ span >
@@ -145,9 +154,10 @@ <h1>Source code for windows.hooks</h1><div class="highlight"><pre>
145154 < span class ="k "> return</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> callback</ span > < span class ="p "> (</ span > < span class ="o "> *</ span > < span class ="n "> adapted_args</ span > < span class ="p "> ,</ span > < span class ="n "> real_function</ span > < span class ="o "> =</ span > < span class ="n "> real_function</ span > < span class ="p "> )</ span >
146155
147156 < span class ="c1 "> # Use this tricks to prevent garbage collection of hook ?</ span >
148- < span class ="c1 "> #def __del__(self):</ span >
149- < span class ="c1 "> # pass</ span >
150-
157+ < span class ="c1 "> # That's dirty..</ span >
158+ < span class ="c1 "> # def __del__(self):</ span >
159+ < span class ="c1 "> # print("HAHAHA {0}".format(self.is_enable))</ span >
160+ < span class ="c1 "> # print("HELLO")</ span >
151161
152162< span class ="c1 "> ## New simple hook API based on winproxy</ span >
153163< span class ="k "> def</ span > < span class ="nf "> setup_hook</ span > < span class ="p "> (</ span > < span class ="n "> target</ span > < span class ="p "> ,</ span > < span class ="n "> hook</ span > < span class ="p "> ,</ span > < span class ="n "> dll_to_hook</ span > < span class ="p "> ):</ span >
0 commit comments