Skip to content

Commit

Permalink
Start moving models implementation to C++
Browse files Browse the repository at this point in the history
  • Loading branch information
Ole André Vadla Ravnås committed Sep 26, 2014
1 parent c6fdb62 commit cba99f0
Show file tree
Hide file tree
Showing 15 changed files with 205 additions and 770 deletions.
13 changes: 11 additions & 2 deletions cryptoshark.pro
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
TEMPLATE = app

QT += qml quick sql widgets
CONFIG += c+11

QTPLUGIN.bearer = -
QTPLUGIN.imageformats = -
QTPLUGIN.qmltooling = -

SOURCES += \
main.cpp \
nativepointer.cpp
nativepointer.cpp \
models.cpp \
models/functions.cpp \
models/modules.cpp \
router.cpp

RESOURCES += qml.qrc

Expand All @@ -21,7 +26,11 @@ QMAKE_INFO_PLIST = Info.plist
include(deployment.pri)

HEADERS += \
nativepointer.h
nativepointer.h \
models.h \
models/functions.h \
models/modules.h \
router.h

unix {
PARTS = $$[QT_INSTALL_LIBS] libQt5Core.prl
Expand Down
23 changes: 23 additions & 0 deletions main.cpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,27 @@
#include "models.h"
#include "nativepointer.h"
#include "router.h"

#include <QApplication>
#include <QQmlApplicationEngine>
#include <QtQml>

static QObject *createRouterSingleton(QQmlEngine *engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine);
Q_UNUSED(scriptEngine);

return new Router();
}

static QObject *createModelsSingleton(QQmlEngine *engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine);
Q_UNUSED(scriptEngine);

return new Models();
}

static QObject *createNativePointerSingleton(QQmlEngine *engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine);
Expand All @@ -19,6 +37,11 @@ int main(int argc, char *argv[])
#endif
QApplication app(argc, argv);

qRegisterMetaType<Modules *>("Modules *");
qRegisterMetaType<Functions *>("Functions *");

qmlRegisterSingletonType<NativePointer>("CryptoShark", 1, 0, "Router", createRouterSingleton);
qmlRegisterSingletonType<NativePointer>("CryptoShark", 1, 0, "Models", createModelsSingleton);
qmlRegisterSingletonType<NativePointer>("CryptoShark", 1, 0, "NativePointer", createNativePointerSingleton);

QQmlApplicationEngine engine;
Expand Down
59 changes: 19 additions & 40 deletions main.qml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import CryptoShark 1.0

import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Dialogs 1.2
Expand All @@ -6,7 +8,6 @@ import Frida 1.0

import "components"
import "session"
import "models.js" as Models

// qmlimportscanner needs to see this one for static linking:
import QtQuick.PrivateWidgets 1.1
Expand All @@ -19,33 +20,16 @@ ApplicationWindow {

Component.onCompleted: {
processDialog.open();

/*
Models.open({name: "1337-hello"}, function () {
funcDialog.models = Models;
var module = Models.modules.allWithCalls().items[0];
var functions = Models.functions.allInModule(module);
var items = functions.items;
for (var i = 0; i !== items.length; i++) {
if (items[i].name.indexOf("sleep") !== -1) {
funcDialog.address = items[i].address;
break;
}
}
funcDialog.open();
});
*/
}

function attach(process) {
if (_process !== null && process.pid === _process.pid) {
return;
}
_process = process;
Models.open(process, function () {
_models = Models;
Frida.localSystem.inject(agent, process.pid);
});
Models.open(process.name);
_models = Models;
Frida.localSystem.inject(agent, process.pid);
}

function detach() {
Expand Down Expand Up @@ -166,16 +150,6 @@ ApplicationWindow {
id: errorDialog
}

Timer {
Component.onCompleted: {
Models.scheduler.configure(this);
}

onTriggered: {
Models.scheduler.tick();
}
}

ListModel {
id: _threadsModel
}
Expand All @@ -196,6 +170,16 @@ ApplicationWindow {
property var _requests: Object()
property var _nextRequestId: 1

Component.onCompleted: {
Router.attach(this);
Router.message.connect(this._onMessage);
}

onError: {
errorDialog.text = message;
errorDialog.open();
}

function follow(threadId, callback) {
_request('thread:follow', {id: threadId}, callback);
}
Expand Down Expand Up @@ -249,11 +233,7 @@ ApplicationWindow {
}
}

onError: {
errorDialog.text = message;
errorDialog.open();
}
onMessage: {
function _onMessage(sender, object, data) {
if (object.type === 'send') {
var id = object.payload.id;
if (id) {
Expand All @@ -267,8 +247,7 @@ ApplicationWindow {
var payload = stanza.payload;
switch (stanza.name) {
case 'modules:update':
Models.modules.metadataProvider = this;
Models.modules.update(payload);
_models.modules.update(payload);
break;
case 'threads:update':
_onThreadsUpdate(payload);
Expand All @@ -277,10 +256,10 @@ ApplicationWindow {
_onThreadUpdate(payload);
break;
case 'thread:summary':
Models.functions.update(payload);
_models.functions.update(payload);
break;
case 'function:log':
Models.functions.log(payload);
_models.functions.log(payload);
break;
default:
console.log('Unhandled: ' + JSON.stringify(stanza));
Expand Down
17 changes: 17 additions & 0 deletions models.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#include "models.h"

Models::Models(QObject *parent) :
QObject(parent),
m_modules(new Modules(this)),
m_functions(new Functions(this))
{
}

void Models::open(QString name)
{
Q_UNUSED(name);
}

void Models::close()
{
}
34 changes: 34 additions & 0 deletions models.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#ifndef MODELS_H
#define MODELS_H

#include "models/functions.h"
#include "models/modules.h"

#include <QObject>

class Models : public QObject
{
Q_OBJECT
Q_DISABLE_COPY(Models)
Q_PROPERTY(Modules *modules READ modules CONSTANT)
Q_PROPERTY(Functions *functions READ functions CONSTANT)

public:
explicit Models(QObject *parent = 0);

Q_INVOKABLE void open(QString name);
Q_INVOKABLE void close();

Modules *modules() const { return m_modules; }
Functions *functions() const { return m_functions; }

signals:

public slots:

private:
Modules *m_modules;
Functions *m_functions;
};

#endif // MODELS_H
Loading

0 comments on commit cba99f0

Please sign in to comment.