mirror of https://github.com/geohot/qira
jenk names, git repo broke wtf
This commit is contained in:
parent
78f7ee1c21
commit
3f36de6d10
|
@ -24,6 +24,18 @@ import os
|
|||
# function stack frames
|
||||
# decompilation
|
||||
|
||||
@socketio.on('gettagsa', namespace='/qira')
|
||||
@socket_method
|
||||
def gettagsa(arr):
|
||||
ret = []
|
||||
for i in arr:
|
||||
i = fhex(i)
|
||||
if len(program.tags[i]) != 0:
|
||||
# a bit of a hack, this is so javascript can display it
|
||||
program.tags[i]['address'] = ghex(i)
|
||||
ret.append(program.tags[i])
|
||||
emit('tagsa', ret)
|
||||
|
||||
@socketio.on('gettags', namespace='/qira')
|
||||
@socket_method
|
||||
def gettags(start, length):
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
regcolors = ['#59AE3F', '#723160', '#2A80A2', '#9E66BD', '#BC8D6B', '#3F3EAC', '#BC48B8', '#6B7C76', '#5FAC7F', '#A69B71', '#874535', '#AD49BF', '#73356F', '#55A4AC', '#988590', '#505C62', '#404088', '#56726B', '#BAAC62', '#454066', '#BCAEAA', '#4E7F6A', '#3960B5', '#295231', '#3B37A5', '#6A9191', '#976394', '#7F957D', '#B7AFBD', '#BD4A70', '#A35169', '#2F2D95', '#8879A8', '#8D3A8E', '#636E7C', '#82688D', '#9FA893', '#2A6885', '#812C87', '#568E71', '#6FA0B2', '#7B7928', '#57BD86', '#6BBC9A', '#807FB3', '#922AAD', '#AB5D98', '#9C943A', '#796880', '#294870', '#528054', '#4ABBA2', '#87437B', '#AA4E73', '#2893AC', '#5AA383', '#A5714D', '#648186', '#68BA37', '#466A89', '#5CB871', '#3D8267', '#28B930', '#5E6C6F', '#5C6772', '#389E58', '#34B69B', '#3CA46A', '#4F4691', '#4D48A1', '#836CB1', '#2B6948', '#4F42BB', '#549B68', '#69B563', '#B39F5C', '#A37841', '#7858B4', '#577244', '#2B7DAD'];
|
||||
regcolors = ['#60AE3F', '#723160', '#2A80A2', '#9E66BD', '#BC8D6B', '#3F3EAC', '#BC48B8', '#6B7C76', '#5FAC7F', '#A69B71', '#874535', '#AD49BF', '#73356F', '#55A4AC', '#988590', '#505C62', '#404088', '#56726B', '#BAAC62', '#454066', '#BCAEAA', '#4E7F6A', '#3960B5', '#295231', '#3B37A5', '#6A9191', '#976394', '#7F957D', '#B7AFBD', '#BD4A70', '#A35169', '#2F2D95', '#8879A8', '#8D3A8E', '#636E7C', '#82688D', '#9FA893', '#2A6885', '#812C87', '#568E71', '#6FA0B2', '#7B7928', '#57BD86', '#6BBC9A', '#807FB3', '#922AAD', '#AB5D98', '#9C943A', '#796880', '#294870', '#528054', '#4ABBA2', '#87437B', '#AA4E73', '#2893AC', '#5AA383', '#A5714D', '#648186', '#68BA37', '#466A89', '#5CB871', '#3D8267', '#28B930', '#5E6C6F', '#5C6772', '#389E58', '#34B69B', '#3CA46A', '#4F4691', '#4D48A1', '#836CB1', '#2B6948', '#4F42BB', '#549B68', '#69B563', '#B39F5C', '#A37841', '#7858B4', '#577244', '#2B7DAD'];
|
||||
|
||||
function p(a) { console.log(a); }
|
||||
//function DA(a) { p("DA: "+a); }
|
||||
|
@ -59,72 +59,6 @@ Deps.autorun(function() { DA("history");
|
|||
|
||||
// ** end history ***
|
||||
|
||||
var escapeHTML = (function () {
|
||||
'use strict';
|
||||
var chr = { '"': '"', '&': '&', '<': '<', '>': '>' };
|
||||
return function (text) {
|
||||
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
|
||||
};
|
||||
}());
|
||||
|
||||
function highlight_addresses(a) {
|
||||
// no XSS :)
|
||||
var d = escapeHTML(a);
|
||||
var re = /0x[0123456789abcdef]+/g;
|
||||
var m = d.match(re);
|
||||
if (m !== null) {
|
||||
// make matches unique?
|
||||
m = m.filter(function (v,i,a) { return a.indexOf(v) == i });
|
||||
m.map(function(a) {
|
||||
var cl = get_data_type(a);
|
||||
if (cl == "") {
|
||||
d = d.replace(a, "<span class='hexnumber'>"+a+"</span>");
|
||||
} else {
|
||||
d = d.replace(a, "<span class='"+cl+"'>"+a+"</span>");
|
||||
}
|
||||
});
|
||||
}
|
||||
// does this work outside templates?
|
||||
return d;
|
||||
}
|
||||
|
||||
function highlight_instruction(a) {
|
||||
var ret = highlight_addresses(a);
|
||||
|
||||
// dim colors
|
||||
function fc(a) {
|
||||
var df = 1.4;
|
||||
// heard of loops?
|
||||
var r = a.substr(1,2);
|
||||
var g = a.substr(3,2);
|
||||
var b = a.substr(5,2);
|
||||
r = Math.floor(parseInt(r, 16)/df);
|
||||
g = Math.floor(parseInt(g, 16)/df);
|
||||
b = Math.floor(parseInt(b, 16)/df);
|
||||
return "#"+hex2(r)+hex2(g)+hex2(b);
|
||||
}
|
||||
|
||||
// highlight registers
|
||||
if (arch !== undefined) {
|
||||
for (var i = 0; i < arch[0].length; i++) {
|
||||
var rep = '<span style="color: '+fc(regcolors[i])+'" class="data_'+hex(i*arch[1])+'">'+arch[0][i]+'</span>';
|
||||
ret = ret.replace(arch[0][i], rep);
|
||||
|
||||
var rep = '<span style="color: '+fc(regcolors[i])+'" class="data_'+hex(i*arch[1])+'">'+arch[0][i].toLowerCase()+'</span>';
|
||||
ret = ret.replace(arch[0][i].toLowerCase(), rep);
|
||||
}
|
||||
}
|
||||
|
||||
// highlight opcode
|
||||
var i = 0;
|
||||
for (i = 0; i < ret.length; i++) {
|
||||
if (ret[i] == ' ' || ret[i] == '\t') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return '<span class="op">' + ret.substr(0, i) + '</span>' + ret.substr(i)
|
||||
}
|
||||
|
||||
function get_data_type(v) {
|
||||
if (typeof v == "number") throw "numbers no longer supported here";
|
||||
// haxx
|
||||
|
|
|
@ -0,0 +1,93 @@
|
|||
var escapeHTML = (function () {
|
||||
'use strict';
|
||||
var chr = { '"': '"', '&': '&', '<': '<', '>': '>' };
|
||||
return function (text) {
|
||||
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
|
||||
};
|
||||
}());
|
||||
|
||||
function highlight_addresses(a) {
|
||||
// no XSS :)
|
||||
var d = escapeHTML(a);
|
||||
var re = /0x[0123456789abcdef]+/g;
|
||||
var m = d.match(re);
|
||||
if (m !== null) {
|
||||
// make matches unique?
|
||||
m = m.filter(function (v,i,a) { return a.indexOf(v) == i });
|
||||
m.map(function(a) {
|
||||
var cl = get_data_type(a);
|
||||
if (cl == "") {
|
||||
d = d.replace(a, "<span class='hexnumber'>"+a+"</span>");
|
||||
} else {
|
||||
if (cl == "datainstruction") {
|
||||
cl += " iaddr iaddr_"+a;
|
||||
}
|
||||
d = d.replace(a, "<span class='"+cl+"'>"+a+"</span>");
|
||||
}
|
||||
});
|
||||
}
|
||||
// does this work outside templates?
|
||||
return d;
|
||||
}
|
||||
|
||||
function highlight_instruction(a) {
|
||||
var ret = highlight_addresses(a);
|
||||
|
||||
// dim colors
|
||||
function fc(a) {
|
||||
var df = 1.4;
|
||||
// heard of loops?
|
||||
var r = a.substr(1,2);
|
||||
var g = a.substr(3,2);
|
||||
var b = a.substr(5,2);
|
||||
r = Math.floor(parseInt(r, 16)/df);
|
||||
g = Math.floor(parseInt(g, 16)/df);
|
||||
b = Math.floor(parseInt(b, 16)/df);
|
||||
return "#"+hex2(r)+hex2(g)+hex2(b);
|
||||
}
|
||||
|
||||
// highlight registers
|
||||
if (arch !== undefined) {
|
||||
for (var i = 0; i < arch[0].length; i++) {
|
||||
var rep = '<span style="color: '+fc(regcolors[i])+'" class="data_'+hex(i*arch[1])+'">'+arch[0][i]+'</span>';
|
||||
ret = ret.replace(arch[0][i], rep);
|
||||
|
||||
var rep = '<span style="color: '+fc(regcolors[i])+'" class="data_'+hex(i*arch[1])+'">'+arch[0][i].toLowerCase()+'</span>';
|
||||
ret = ret.replace(arch[0][i].toLowerCase(), rep);
|
||||
}
|
||||
}
|
||||
|
||||
// highlight opcode
|
||||
var i = 0;
|
||||
for (i = 0; i < ret.length; i++) {
|
||||
if (ret[i] == ' ' || ret[i] == '\t') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return '<span class="op">' + ret.substr(0, i) + '</span>' + ret.substr(i)
|
||||
}
|
||||
|
||||
stream = io.connect(STREAM_URL);
|
||||
|
||||
function on_tagsa(tags) { DS("tagsa");
|
||||
//p(tags);
|
||||
for (var i=0;i<tags.length;i++) {
|
||||
$(".iaddr_"+tags[i]['address']).each(function() {
|
||||
if (tags[i]['name'] !== undefined) {
|
||||
$(this).addClass("name");
|
||||
$(this).html(tags[i]['name']);
|
||||
}
|
||||
});
|
||||
}
|
||||
} stream.on('tagsa', on_tagsa);
|
||||
|
||||
function replace_names() {
|
||||
var addrs = [];
|
||||
$(".iaddr").each(function() {
|
||||
var l = this.className.split(" ").filter(function(x) { return x.substr(0,6) == "iaddr_"; });
|
||||
if (l.length != 1) return;
|
||||
addrs.push(l[0].split("_")[1]);
|
||||
});
|
||||
stream.emit('gettagsa', addrs);
|
||||
}
|
||||
|
|
@ -28,8 +28,12 @@ function do_ida_socket(callme) {
|
|||
Deps.autorun(function() { DA("send setaddress to ida");
|
||||
var iaddr = Session.get('iaddr');
|
||||
do_ida_socket(function() {
|
||||
cmd = 'setaddress '+iaddr
|
||||
ws.send(cmd);
|
||||
cmd = 'setaddress '+iaddr;
|
||||
try {
|
||||
ws.send(cmd);
|
||||
} catch(err) {
|
||||
// nothing
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ stream = io.connect(STREAM_URL);
|
|||
// arch is public data
|
||||
arch = undefined;
|
||||
function on_arch(msg) { DS("arch");
|
||||
p(msg);
|
||||
//p(msg);
|
||||
arch = msg;
|
||||
} stream.on("arch", on_arch);
|
||||
|
||||
|
@ -38,13 +38,14 @@ function on_instructions(msg) { DS("instructions");
|
|||
'<div class="change '+(ins.slice ? "halfhighlight": "")+' clnum clnum_'+ins.clnum+'">'+ins.clnum+'</div> '+
|
||||
// hacks, hexdumpdatainstruction for dblclick handler
|
||||
'<span class="hexdumpdatainstruction iaddr iaddr_'+ins.address+'">'+ins.address+'</span> '+
|
||||
'<span class="name">'+ins.name+'</span> '+
|
||||
//'<span class="name">'+ins.name+'</span> '+
|
||||
'<div class="instructiondesc">'+highlight_instruction(ins.instruction)+'</div> '+
|
||||
'<span class="comment">'+(ins.comment !== undefined ? ins.comment : "")+'</span>'+
|
||||
'</div>';
|
||||
}
|
||||
$('#idump').html(idump);
|
||||
rehighlight();
|
||||
replace_names();
|
||||
} stream.on('instructions', on_instructions);
|
||||
|
||||
Deps.autorun(function() { DA("emit getinstructions");
|
||||
|
|
|
@ -76,5 +76,6 @@ function on_tags(addrs) { DS("tags");
|
|||
graph.render();
|
||||
|
||||
rehighlight();
|
||||
replace_names();
|
||||
} stream.on('tags', on_tags);
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
<script type="text/javascript" src="/client/compatibility/base.js"></script>
|
||||
<script type="text/javascript" src="/client/compatibility/bignum.js"></script>
|
||||
<script type="text/javascript" src="/client/compatibility/socket.io.min.js"></script>
|
||||
<script type="text/javascript" src="/client/compatibility/highlight.js"></script>
|
||||
<script type="text/javascript" src="/client/controls.js"></script>
|
||||
<script type="text/javascript" src="/client/ida.js"></script>
|
||||
<script type="text/javascript" src="/client/idump.js"></script>
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
}
|
||||
|
||||
.name {
|
||||
color: purple;
|
||||
color: purple !important;
|
||||
background-color: #aaaaaa;
|
||||
}
|
||||
.comment {
|
||||
|
|
Loading…
Reference in New Issue