rms-runtime-mobile-security
Version:
Runtime Mobile Security (RMS), powered by FRIDA, is a powerful web interface that helps you to manipulate Android and iOS Apps at Runtime
261 lines (218 loc) • 7.71 kB
HTML
<html lang="en">
<head>
{% include 't_head.html' %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.0.4/socket.io.js" integrity="sha512-aMGMvNYu8Ue4G+fHa359jcPb1u+ytAF+P2SCb+PxrjCdO3n3ZTxJ30zuH39rimUggmTwmh2u7wvQsDTHESnmfQ==" crossorigin="anonymous">
</script>
</head>
<body>
<!-- Model View - start -->
<div class="modal fade" id="ModalZoomedView">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="modal-title">Zoomed Console Output</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<!-- Modal Header -->
<!-- Modal body -->
<div class="modal-body">
<div class="col-sm-12">
<textarea id=zoomed_console_output
name=zoomed_console_output></textarea>
</div>
</div>
<!-- Modal body -->
<!-- Modal footer -->
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
<!-- Modal footer -->
</div>
</div>
</div>
<!-- Model View - end -->
<div class="d-flex" id="wrapper">
<!-- Sidebar -->
{% include 't_sidebar.html' %}
<!-- Page Content -->
<div id="page-content-wrapper">
<!-- Navbar -->
{% include 't_navbar.html' %}
<!-- 2 textarea side by side -->
<div class="container-fluid">
<br>
<div class="row">
<div class="col-sm-12">
<h2>Check Console Output 🖥</h2>
</div>
</div> <!-- row -->
<div class="border-top my-3"></div>
<center>
<a role="button"
href="/reset_console_logs?redirect=/console_output"
class="btn btn-danger">
Reset Console Output
</a>
<button class="btn btn-success" id="save_output">
Save Console Output
</button>
</center>
<br>
<div class="row">
<div class="col-sm-6">
<h3 align=center>Call Stack Hooked methods
<button
data-toggle="modal"
data-target="#ModalZoomedView"
data-console-id="call_stack"
class="btn btn-primary btn-sm">
Zoom
</button>
</h3>
<br>
<textarea id=calls_stack name=console_output
class="form-control">{{ called_console_output_str|safe }}</textarea>
</div>
<div class="col-sm-6">
<h3 align=center>I/O Hooked methods
<button
data-toggle="modal"
data-target="#ModalZoomedView"
data-console-id="hook_stack"
class="btn btn-primary btn-sm">
Zoom
</button>
</h3>
<br>
<textarea id=hooks_stack name=console_output
class="form-control">{{ hooked_console_output_str|safe }}</textarea>
</div>
</div>
<br>
<div class="row">
<div class="col-sm-12">
<h3 align=center>
Global Console Output
<button
data-toggle="modal"
data-target="#ModalZoomedView"
data-console-id="global_console"
class="btn btn-primary btn-sm">
Zoom
</button>
</h3>
<br>
<textarea id=global_console_output name=console_output
class="form-control">{{ global_console_output_str|safe }}</textarea>
</div>
</div> <!-- row -->
</div>
</div>
<!-- /#container-fluid -->
</div>
<!-- /#page-content-wrapper -->
</div>
<!-- /#wrapper -->
<!-- Javascript loading -->
{% include 't_js_script.html' %}
{% block scripts %}
<script>
// Console Output TAB
var calls_stack_editor = CodeMirror.fromTextArea(calls_stack, {
lineNumbers: true,
mode: 'javascript',
theme: 'dracula',
readOnly: true
});
calls_stack_editor.setSize("100%",620);
var hooks_stack_editor = CodeMirror.fromTextArea(hooks_stack, {
lineNumbers: true,
mode: 'javascript',
theme: 'dracula',
readOnly: true
});
hooks_stack_editor.setSize("100%",620);
var global_console_editor = CodeMirror.fromTextArea(global_console_output, {
lineNumbers: true,
mode: 'javascript',
theme: 'dracula',
readOnly: true
});
global_console_editor.setSize("100%",300);
var zoomed_console_editor = CodeMirror.fromTextArea(zoomed_console_output, {
lineNumbers: true,
mode: 'javascript',
theme: 'dracula'
});
zoomed_console_editor.setSize("100%",500);
</script>
<script>
//Set cursors always at the bottom
global_console_editor.setCursor(global_console_editor.lineCount(), 0)
hooks_stack_editor.setCursor(hooks_stack_editor.lineCount(), 0)
calls_stack_editor.setCursor(calls_stack_editor.lineCount(), 0)
//const socket = io.connect('//' + document.domain + ':' + location.port + '/console');
const socket = io.connect()
socket.on('call_stack', function(msg) {
if(msg.data.length) {
calls_stack_editor.setValue(calls_stack_editor.getValue()+msg.data);
calls_stack_editor.setCursor(calls_stack_editor.lineCount(), 0)
}
});
socket.on('hook_stack', function(msg) {
if(msg.data.length) {
hooks_stack_editor.setValue(hooks_stack_editor.getValue()+msg.data);
hooks_stack_editor.setCursor(hooks_stack_editor.lineCount(), 0)
}
});
socket.on('global_console', function(msg) {
if(msg.data.length) {
global_console_editor.setValue(global_console_editor.getValue()+msg.data);
global_console_editor.setCursor(global_console_editor.lineCount(), 0)
}
});
</script>
<!-- Save Console Output -->
<script>
$(document).ready(function() {
$('#save_output').click(function(){
$.ajax({
url: "/save_console_logs",
type: "get",
success: function(response) {
if(response.includes("print_done"))
alert("Console logs stored in:\n"+response.replace("print_done - ",""))
else
alert("Error while saving Console logs. \nError info: "+response)
}
});
});
});
</script>
<!-- Save Console Output -->
<script>
$('#ModalZoomedView').on('shown.bs.modal', function (e) {
var console=$(e.relatedTarget).data('console-id');
var textToCopy=""
if(console=="call_stack") textToCopy=calls_stack_editor.getValue()
if(console=="hook_stack") textToCopy=hooks_stack_editor.getValue()
if(console=="global_console") textToCopy=global_console_editor.getValue()
zoomed_console_editor.setValue(textToCopy)
zoomed_console_editor.focus()
zoomed_console_editor.setCursor(0, 0)
zoomed_console_editor.refresh()
})
</script>
<!-- Set current Page as active in the NavBar -->
<script>
$(document).ready(function () {
$(".nav li").removeClass("active");
$('#console_output').addClass('active');
});
</script>
<!-- Set current Page as active in the NavBar -->
{% endblock %}
</body>
</html>