Skip to content

Commit c6f3825

Browse files
committed
Showing registers in real time is fully working
1 parent 08e38a7 commit c6f3825

File tree

3 files changed

+81
-65
lines changed

3 files changed

+81
-65
lines changed

Shellcodev/Core/AssemblyHandler.cs

Lines changed: 76 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

Shellcodev/Core/Instruction.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,6 @@ public Instruction(string instruction)
136136

137137
tempBytes = handler.Assembler(instruction);
138138
main.ByteAppender(tempBytes);
139-
140-
141139
}
142140
}
143141
}

Shellcodev/Forms/Main.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ namespace Shellcodev.Forms
99
public partial class Main : Form
1010
{
1111
private static int previousIndex;
12+
1213
public static API.PROCESS_INFORMATION pi;
13-
public static API.Registers prevRegs;
14+
public static API.Registers registers;
1415

1516
private static Main instance;
1617
public static Main ReturnInstance()
@@ -21,7 +22,7 @@ public static Main ReturnInstance()
2122
//TODO: Show registers value at runtime (finished). Fix bugs
2223
// https://github.com/asmjit/asmjit/issues/27
2324

24-
private API.PROCESS_INFORMATION InitProcess()
25+
private void InitProcess() //API.PROCESS_INFORMATION I
2526
{
2627
API.STARTUPINFO si = new API.STARTUPINFO();
2728
pi = new API.PROCESS_INFORMATION();
@@ -42,7 +43,6 @@ private API.PROCESS_INFORMATION InitProcess()
4243
MessageBox.Show("ERROR! CreateProcess Failed");
4344
this.Close();
4445
}
45-
return pi;
4646
}
4747

4848
public Main()
@@ -57,7 +57,8 @@ public Main()
5757

5858
// Stabilization of registers
5959
handler.SetRegisters("xor eax,eax", pi);
60-
handler.SetRegisters("xor eax,eax", pi);
60+
handler.SetRegisters("xor ebx,ebx", pi);
61+
handler.SetRegisters("xor ecx,ecx", pi);
6162
}
6263

6364
public void ByteAppender(string bytes)

0 commit comments

Comments
 (0)