@@ -127,116 +127,133 @@ public string Assembler(string instructions)
127127 }
128128
129129 #region Registers
130- private void AppendPointers ( object [ ] pointers )
130+
131+ private void AppendRegisters ( API . Registers registers )
131132 {
132133 List < string > list = new List < string > ( ) ;
133- string [ ] registers = { "EIP: " , "ESP: " , "EBP: " } ;
134+ string [ ] regs = { "EAX: " , "EBX: " , "ECX: " , "EDX: " } ;
135+ object [ ] r = { registers . eax , registers . ebx , registers . ecx , registers . edx } ;
136+
134137 var main = Main . ReturnInstance ( ) ;
135138
136- for ( int i = 0 ; i < pointers . Length ; i ++ )
139+
140+ for ( int i = 0 ; i < regs . Length ; i ++ )
137141 {
138- int toHex = Convert . ToInt32 ( pointers [ i ] ) ;
142+ int toHex = Convert . ToInt32 ( r [ i ] ) ;
139143 string hex = toHex . ToString ( "X8" ) ;
140- list . Add ( registers [ i ] + hex ) ;
144+ list . Add ( regs [ i ] + hex ) ;
141145 }
142146
143147 string str = string . Join ( " " , list ) ;
144- main . pointersBox . Text = str ;
148+ main . registersBox . Text = str ;
145149 }
146150
147- private void AppendIndexes ( object [ ] indexes )
151+ private void AppendIndexes ( API . Registers registers )
148152 {
149153 List < string > list = new List < string > ( ) ;
150- string [ ] registers = { "EDI: " , "ESI: " } ;
154+ string [ ] indexes = { "EDI: " , "ESI: " } ;
155+ object [ ] index = { registers . edi , registers . esi } ;
156+
151157 var main = Main . ReturnInstance ( ) ;
152158
153- for ( int i = 0 ; i < indexes . Length ; i ++ )
159+ for ( int i = 0 ; i < indexes . Length ; i ++ )
154160 {
155- int toHex = Convert . ToInt32 ( indexes [ i ] ) ;
161+ int toHex = Convert . ToInt32 ( index [ i ] ) ;
156162 string hex = toHex . ToString ( "X8" ) ;
157- list . Add ( registers [ i ] + hex ) ;
163+ list . Add ( indexes [ i ] + hex ) ;
158164 }
159165
160166 string str = string . Join ( " " , list ) ;
161167 main . indexesBox . Text = str ;
162168 }
163169
164- private void AppendRegisters ( object [ ] registers , object [ ] pregs , string toClear )
170+ private void AppendPointers ( API . Registers registers )
165171 {
166172 List < string > list = new List < string > ( ) ;
167- string [ ] regs = { "EAX: " , "EBX: " , "ECX: " , "EDX: " } ;
173+ string [ ] pointers = { "EIP: " , "ESP: " , "EBP: " } ;
174+ object [ ] pointer = { registers . eip , registers . esp , registers . ebp } ;
175+
168176 var main = Main . ReturnInstance ( ) ;
169177
170- for ( int i = 0 ; i < registers . Length ; i ++ )
178+ for ( int i = 0 ; i < pointers . Length ; i ++ )
171179 {
172- if ( ( int ) registers [ i ] == 0 && ( int ) pregs [ i ] != 0 )
173- {
174- int toHex = Convert . ToInt32 ( pregs [ i ] ) ;
175- string hex = toHex . ToString ( "X8" ) ;
176- list . Add ( regs [ i ] + hex ) ;
177- }
178- else if ( ( int ) registers [ i ] != 0 && ( int ) pregs [ i ] != 0 )
179- {
180- if ( ( int ) registers [ i ] != 0 )
181- {
182- int toHex = Convert . ToInt32 ( registers [ i ] ) ;
183- string hex = toHex . ToString ( "X8" ) ;
184- list . Add ( regs [ i ] + hex ) ;
185- }
186- else
187- {
188- int toHex = Convert . ToInt32 ( pregs [ i ] ) ;
189- string hex = toHex . ToString ( "X8" ) ;
190- list . Add ( regs [ i ] + hex ) ;
191- }
192- }
193- else
194- {
195- int toHex = Convert . ToInt32 ( registers [ i ] ) ;
196- string hex = toHex . ToString ( "X8" ) ;
197- list . Add ( regs [ i ] + hex ) ;
198- }
180+ int toHex = Convert . ToInt32 ( pointer [ i ] ) ;
181+ string hex = toHex . ToString ( "X8" ) ;
182+ list . Add ( pointers [ i ] + hex ) ;
199183 }
200184
201185 string str = string . Join ( " " , list ) ;
202- main . registersBox . Text = str ;
186+ main . pointersBox . Text = str ;
203187 }
204188
205- private void Appender ( API . Registers registers , API . Registers prevRegs , string toClear )
189+ private string Clear ( string instruction )
206190 {
207- object [ ] pointers = { registers . eip , registers . esp , registers . ebp } ;
208- object [ ] indexes = { registers . edi , registers . esi } ;
191+ string [ ] split = instruction . Split ( new char [ ] { ',' , ' ' } ) ;
209192
210- object [ ] regs = { registers . eax , registers . ebx , registers . ecx , registers . edx } ;
211- object [ ] pregs = { prevRegs . eax , prevRegs . ebx , prevRegs . ecx , prevRegs . edx } ;
193+ if ( split [ 0 ] == "xor" && split [ 1 ] == split [ 2 ] )
194+ return split [ 1 ] ;
212195
213- AppendPointers ( pointers ) ;
214- AppendIndexes ( indexes ) ;
215- AppendRegisters ( regs , pregs , toClear ) ;
196+ return null ;
216197 }
217198
218- private string ClearCheck ( string instruction )
199+ // Absolute pain
200+ private API . Registers Configure ( API . Registers registers , API . Registers prevRegisters , string instruction )
219201 {
220- string [ ] split = instruction . Split ( new char [ ] { ' ' , ',' } , StringSplitOptions . RemoveEmptyEntries ) ;
202+ string reg = Clear ( instruction ) ;
203+
204+ if ( registers . eax != 0 ) prevRegisters . eax = registers . eax ;
205+ else if ( registers . ebx != 0 ) prevRegisters . ebx = registers . ebx ;
206+ else if ( registers . ecx != 0 ) prevRegisters . ecx = registers . ecx ;
207+ else if ( registers . edx != 0 ) prevRegisters . edx = registers . edx ;
208+ else if ( registers . esi != 0 ) prevRegisters . esi = registers . esi ;
209+ else if ( registers . edi != 0 ) prevRegisters . edi = registers . edi ;
210+ else if ( registers . ebp != 0 ) prevRegisters . ebp = registers . ebp ;
221211
222- if ( split [ 0 ] == "xor" && split [ 1 ] == split [ 2 ] ) // Clearing register
212+
213+ prevRegisters . eip = registers . eip ;
214+ prevRegisters . esp = registers . esp ;
215+
216+ switch ( reg )
223217 {
224- return split [ 1 ] ;
218+ case "eax" :
219+ prevRegisters . eax = 0 ;
220+ break ;
221+ case "ebx" :
222+ prevRegisters . ebx = 0 ;
223+ break ;
224+ case "ecx" :
225+ prevRegisters . ecx = 0 ;
226+ break ;
227+ case "edx" :
228+ prevRegisters . edx = 0 ;
229+ break ;
230+ case "edi" :
231+ prevRegisters . edi = 0 ;
232+ break ;
233+ case "esi" :
234+ prevRegisters . esi = 0 ;
235+ break ;
236+ case "ebp" :
237+ prevRegisters . ebp = 0 ;
238+ break ;
239+
240+ default :
241+ break ;
225242 }
226243
227- return null ;
244+ return prevRegisters ;
228245 }
229246
230247 public unsafe void SetRegisters ( string instruction , API . PROCESS_INFORMATION pi )
231248 {
232249 IntPtr pointer = API . GetRegisters ( instruction , & pi ) ;
233250 API . Registers registers = Marshal . PtrToStructure < API . Registers > ( pointer ) ;
234251
235- string toClear = ClearCheck ( instruction ) ;
236-
237- Appender ( registers , Main . prevRegs , toClear ) ;
252+ Main . registers = Configure ( registers , Main . registers , instruction ) ;
238253
239- Main . prevRegs = registers ;
254+ AppendRegisters ( Main . registers ) ;
255+ AppendIndexes ( Main . registers ) ;
256+ AppendPointers ( Main . registers ) ;
240257 }
241258 #endregion
242259 }
0 commit comments