/
Util - Inject O2 into other processes.h2
132 lines (109 loc) · 5.75 KB
/
Util - Inject O2 into other processes.h2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?xml version="1.0"?>
<H2>
<SourceCode>//var topPanel = panel.clear().add_Panel();
var topPanel = "Util - Inject O2 into Other processes v2.0".popupWindow(1200,600);
topPanel.insert_LogViewer();
var processesTreeView = topPanel.title("Current Processes (with MainWindowHandle != 0)").add_TreeView().sort();
var tabPanel = topPanel.insert_Right().add_TabControl();
var selectedProcessTab = tabPanel.add_Tab("Selected Process details").add_Panel();
//var modulesTreeView = tabPanel.add_Tab("Selected Process Modules List").add_TreeView_with_PropertyGrid().sort();
var modulesTreeView = selectedProcessTab.insert_Below("Selected Process Modules List").add_TreeView_with_PropertyGrid(false).sort();
var processScreenshot = modulesTreeView.insert_Left(100).add_PictureBox();
//processesTreeView.splitContainer().splitterDistance(300);
//modulesTreeView.splitContainer().splitterDistance(300);
Process selectedProcess = null;
CheckBox x64_CheckBox = null;
CheckBox runtime40_CheckBox = null;
Action<Process> selectProcess =
(process)=> {
"select process: {0}".info(process.Id);
foreach(var treeNode in processesTreeView.nodes())
if (treeNode.tag<Process>().Id == process.Id)
{
treeNode.selected();
return;
}
};
processesTreeView.afterSelect<Process>(
(process)=> {
selectedProcess = Processes.getProcess(process.Id); //to refresh the values
modulesTreeView.clear();
selectedProcessTab.parent<TabPage>().set_Text("Selected process: {0} (id: {1})".format(process.ProcessName, process.Id));
//modulesTreeView.parent<GroupBox>()
O2Thread.mtaThread(
()=>{
processScreenshot.load(selectedProcess.screenshot_MainWindow() as Image);
selectedProcessTab.add_FlowLayoutPanel_with_DetectedModules(process);
});
try
{
foreach(ProcessModule module in process.Modules)
modulesTreeView.add_Node(module.ModuleName, module);
modulesTreeView.selectFirst();
x64_CheckBox.@checked(process.is64BitProcess());
runtime40_CheckBox.@checked(process.isRuntime_V4());
modulesTreeView.white();
}
catch(Exception ex)
{
ex.log();
x64_CheckBox.@checked(ex.Message == "A 32 bit processes cannot access modules of a 64 bit process.");
runtime40_CheckBox.@checked(false);
modulesTreeView.pink()
.add_Node("Can't access Module list").treeView()
.add_Node("Exception: {0}".format(ex.Message.info()));
}
});
Action refreshProcessList =
()=>{
processesTreeView.clear();
foreach(Process process in Processes.getProcesses())
if (process.MainWindowHandle != IntPtr.Zero && process.ProcessName !="Dbgview") //Dbgview doens't like to send Dbg messages to itself
processesTreeView.add_Node("{0,-40} id: {1}".format(process.ProcessName, process.Id), process);
processesTreeView.selectFirst();
};
Action refreshProcessList_in_1Second =
()=>{
this.sleep(1000);
refreshProcessList();
};
Action injectO2IntoProcess =
()=>{
"Injecting O2 into process '{0}' with id {1}".info(selectedProcess.ProcessName, selectedProcess.Id);
var o2Injector = new API_O2_Injector();
o2Injector.injectIntoProcess(selectedProcess, x64_CheckBox.value(), runtime40_CheckBox.value());
};
processesTreeView.insert_Below_ToolStrip()
.add_Button("Refresh", "view_refresh".formImage(), ()=> refreshProcessList())
.add_Button("Process Properties", "btSettings_Image".formImage(), ()=> processesTreeView.selected().Tag.showInfo())
.add_Button("Bring to front", "preferences_desktop_locale".formImage(), ()=> selectedProcess.process_MainWindow_BringToFront())
.add_Button("Stop Process", "process_stop".formImage(), () => { selectedProcess.stop(); refreshProcessList();});
selectedProcessTab.insert_ToolStrip()
.add_Button("Inject O2 into Process","btExecuteSelectedMethod_Image".formImage(), ()=>injectO2IntoProcess())
.add_CheckBox("x64",ref x64_CheckBox)
.add_CheckBox(".Net 40 runtime",ref runtime40_CheckBox);
var toolStrip = topPanel.insert_Above(30).add_ToolStrip();
toolStrip.add_DropDown("REPL", "document_save_as".formImage())
.add_DropDown_Button("REPL this Form ", ()=> topPanel.parentForm().script_Me("form"))
.add_DropDown_Button("REPL selected Process and API_O2_Injector ",
()=> new API_O2_Injector().script_Me().add_InvocationParameter("process", selectedProcess).code_Insert("//return process;"))
//.add_DropDown_Button("REPL selected Process", ()=> selectedProcess.script_Me())
;
toolStrip.add_DropDown("Open Demo Apps", "face_glasses".formImage())
.add_DropDown_Button("Open LinqPad (C#) " , ()=> { "LinqPad_Installer.cs".executeFirstMethod() ; refreshProcessList_in_1Second(); })
.add_DropDown_Button("Open Calc (C++) " , ()=> { "calc.exe".startProcess() ; refreshProcessList_in_1Second(); });
toolStrip.add_Button("Open DbgViewer.exe (SysInternals)", "btDebugMethod_Image".formImage(), ()=> "DebugView.cs".executeFirstMethod());
toolStrip.insert_Right(160).add_ProcessFinder(selectProcess, selectProcess).append_Label("Click to select process").top(10);
//toolStrip.insert_Left(30).add_ProcessFindings((process)=>{});
//<Ctrl_ProcessFinder>
//O2File:Ctrl_ProcessFinder.cs
//x64_CheckBox = lastLink.append_CheckBox("x64", (value)=>x64= value);
//runtime40_ChexkBox = x64_CheckBox.append_CheckBox(".Net 40 runtime", (value)=> runtime40 = value);
refreshProcessList();
//injectO2IntoProcess();
//using System.Diagnostics
//O2File:API_O2_Injector.cs
//O2File:_Extra_methods_To_Add_to_Main_CodeBase.cs
</SourceCode>
<ReferencedAssemblies />
</H2>