Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
agent.message.connect((message, data) => {
if (message.type === 'error') {
console.error('error message from frida'.red)
console.error((message.stack || message).red)
} else if (message.type === 'send') {
// todo
}
})
await agent.load()
socket.emit('ready')
})
const mgr = frida.getDeviceManager()
const connected = new Map()
export function attach(server) {
socket.attach(server)
const wrap = tag => device =>
devices.emit(tag, new Device(device).valueOf())
const added = wrap('DEVICE_ADD')
const removed = wrap('DEVICE_REMOVE')
mgr.added.connect(added)
mgr.removed.connect(removed)
connected.set(server, [added, removed])
}
export function detach(server) {
async function start(Path, Args) {
// Exit on process termination
process.on('SIGTERM', stop);
process.on('SIGINT', stop);
// Attach and load script
device = await frida.getDevice(deviceId);
if (!Args || 0 === Args.length) {
procID = await device.spawn(Path);
} else {
procID = await device.spawn([Path,Args]);
}
session = await device.attach(procID);
session.detached.connect(onDetached);
script = await session.createScript(MonacoCodeEditor.getValue());
// For performance we can't update the text area all the time
// it will lock the UI on big volumes of data. Instead we append
// to an array using a mutex and every X ms we flush the array
// to the text area
script.message.connect(message => {
ChangeLogExclusive(logMutex, 'Append', message.payload);
setTimeout(function () {
async function inject(AttachTo) {
// Exit on process termination
process.on('SIGTERM', stop);
process.on('SIGINT', stop);
// Attach and load script
device = await frida.getDevice(deviceId);
session = await device.attach(AttachTo);
session.detached.connect(onDetached);
script = await session.createScript(MonacoCodeEditor.getValue());
// For performance we can't update the text area all the time
// it will lock the UI on big volumes of data. Instead we append
// to an array using a mutex and every X ms we flush the array
// to the text area
script.message.connect(message => {
ChangeLogExclusive(logMutex, 'Append', message.payload);
setTimeout(function () {
if (RunningLog.length > 0) {
ChangeLogExclusive(logMutex, 'Write', message.payload);
}
}, 500);
});
async function getProcList() {
// Make sure the device list has updated
if (atob(deviceId) != "local") {
for (i = 0; i < 3; i++) {
var dev = await getDeviceList();
if (dev.length > 2) {
break;
}
await sleep(1000);
}
}
let currentDevice = await frida.getDevice(atob(deviceId));
let Applications = await currentDevice.enumerateProcesses();
return Applications;
}
getProcList().then(data => {
async function updateDeviceList() {
// Get dropdown array
var dn = document.getElementById("deviceName");
var currentDevice = dn.options[deviceName.selectedIndex].value;
var dnArr = Array.from(dn.options).map(elem => elem.text);
// Get device array
var dm = frida.getDeviceManager();
var dev = await dm.enumerateDevices();
var devArr = dev.map(elem => elem.id);
// Does the current device still exist?
if (!devArr.includes(currentDevice)) {
// Local is always a valid target
dn.selectedIndex = 0;
deviceId = 'local';
}
// Remove stale entries from the dropdown
dnArr.forEach(function(elem) {
if (!devArr.includes(elem)) {
$(`#deviceName option:contains("${elem}")`).remove()
}
})
process.exit(code ? code : 0);
}
if(process.argv.indexOf("-p") != -1){ var pid = process.argv[process.argv.indexOf("-p") + 1]; }
if(process.argv.indexOf("-v") != -1){ debug = true; }
try {
fs.readFile(filename, function read(err, data) {
if (!err) {
fsscript = data.toString();
} else { quit(1,err); }
});
} catch(e) { quit(1,'Failed loading script!'); }
if (!pid){ process.exit(1);}
frida.attach(pid)
.then(function (session) {
if (debug) console.log('attached:', session);
return session.createScript(fsscript);
})
.then(function (script) {
if(debug) { console.log('script created:', script); }
console.log('Press Ctrl+C to stop logging...');
script.events.listen('message', function (message, data) {
if(data.length >0) {
if (debug) console.log('message from script:', message );
console.log(data.toString('utf8'));
}
});
script.load();
})
.catch(function (error) {
if(process.argv.indexOf("-p") != -1){ var pid = process.argv[process.argv.indexOf("-p") + 1]; }
if(process.argv.indexOf("-v") != -1){ debug = true; }
if(!pid) { console.error('No process defined! Exiting'); process.exit(1); }
try {
fs.readFile(filename, function read(err, data) {
if (!err) {
fsscript = data.toString();
} else { quit(1,err); }
});
} catch(e) { quit(1,'Failed loading Frida script!'); }
if (!pid){ process.exit(1);}
frida.attach(pid)
.then(function (session) {
if (debug) console.log('attached:', session);
return session.createScript(fsscript);
})
.then(function(script) {
if(debug) { console.log('script created:', script); }
if (!script.events){ quit(1,'failed initializing script'); }
console.log('Press Ctrl+C to stop logging...');
script.events.listen('message', function (message, data) {
if(data && data.length >0) {
if(debug) { console.log('GOT DATA:', data.toString('utf8'), message) }
var hep_proto = { "type": "HEP", "version": 3, "payload_type": "SIP", "captureId": hepId, "capturePass": hepPass, "ip_family": 2};
var datenow = new Date().getTime();
hep_proto.time_sec = Math.floor(datenow / 1000);
hep_proto.time_usec = datenow - (hep_proto.time_sec*1000);
hep_proto.srcIp = ipInt(message.payload.src_addr).toIP();
function AttachHook(pid) {
frida.attach(pid)
.then(function (session) {
return session.createScript(injectScript);
})
.then(function (script) {
script.events.listen('message', function (message, data) {
//console.log('HScript:', message, data);
handleMessage(script, message.payload.name, message.payload.data);
});
script.load()
.then(function () {
console.log('Hook script injected.');
})
.catch(function (error) {
console.log('Hook Error:', error.message);
});
})
co(function *() {
session = yield frida.attach(process.argv[2]);
const source = yield load(require.resolve('./agent.js'));
script = yield session.createScript(source);
script.events.listen('message', message => {
console.log(message);
});
yield script.load();
})
.catch(console.error);
co(function *() {
session = yield frida.attach(process.argv[2]);
const source = yield load(
require.resolve('./agent.js'));
script = yield session.createScript(source);
script.events.listen('message', message => {
if (message.type === 'send') {
const stanza = message.payload;
switch (stanza.name) {
case '+ready':
console.log('Waiting for application to call recv()...');
break;
case '+result': {
console.log('Results received:');
const events = stanza.payload.events;
events.forEach(ev => {
const location = ev[0];
const target = ev[1];