var entityMap = { Machine:{ status : 'Status', locked : 'Locked', name : 'Name', resultserver_ip : 'ResultserverIP', ip : 'IP', label : 'Label', locked_changed_on : 'LockedChangedOn', platform : 'Platform', snapshot : 'Snapshot', interface : 'Interface', status_changed_on : 'StatusChangedOn', id : 'ID', resultserver_port : 'ResultserverPort', tags : 'Tags' }, Task: { category : 'Category', machine : 'Machine', errors : 'Errors', target : 'Target', package : 'Package', sample_id : 'SampleID', guest : 'Guest', custom : 'Custom', owner : 'Owner', priority : 'Priority', platform : 'Platform', options : 'Options', status : 'Status', enforce_timeout : 'EnforceTimeout', timeout : 'Timeout', memory : 'Memory', tags : 'Tags', id : 'ID', added_on : 'AddedOn', completed_on : 'CompletedOn', score : 'Score', monitor : 'Monitor', FileInfo : 'FileInfo' }, FileInfo: { yara : 'yara', sha1 : 'sha1', name : 'name', type : 'type', sha256 : 'sha256', urls : 'urls', crc32 : 'crc32', path : 'path', ssdeep : 'ssdeep', size : 'size', sha512 : 'sha512', md5 : 'md5' } }; var undrscrToCamelCase = function(string){ string = '_'+string; return string.replace(/_([a-z])/g, function (g) { return g[1].toUpperCase(); }); }; //returns single object withing entity (i.e. File[0]) var jsonToEntityObject = function(origObj, newKeys){ var ret = {}; var path; var newField; for(var key in newKeys){ if(newKeys[key]){ ret[newKeys[key]] = dq(origObj, '.'+key); } } return ret; }; //returns entire entity array (i.e. File) var jsonToEntity = function(origObj, newKeys){ var j; var ret; if(!Array.isArray(origObj)){ ret = [jsonToEntityObject(origObj, newKeys)]; return ret; } else if(origObj.length > 0){ //makes sure no empty arrays are pushed ret = []; for(j=0; j 0){ md += tblToMdWithTransform('Task Signatures', result.signatures, undrscrToCamelCase); } return { Type: entryTypes.note, Contents: result, ContentsFormat: formats.json, HumanReadable: md, EntryContext: {'Cuckoo.Task(val.ID && val.ID == obj.ID)': context} }; }; var viewTasks = function(args, params){ ids = argToList(args['id']); var res = []; for(var i in ids){ task_id = ids[i]; entry = viewTask(args, params, task_id); res.push(entry); } return res; }; var viewTask = function(args, params, id){ result = cuckooGet(args, params, 'tasks/view/' + id); return { Type: entryTypes.note, Contents: result, ContentsFormat: formats.json, HumanReadable: tblToMdWithTransform('Task Table', result.task, undrscrToCamelCase), EntryContext: {'Cuckoo.Task(val.ID === obj.ID)' : jsonToEntity(result.task, entityMap.Task)} }; }; var deleteTask = function(args, params){ var res = JSON.parse(cuckooGetRaw(args, params, 'tasks/delete/' + args['id']).Body); return (res.status? res.status : res.message); }; var listTasks = function(args, params){ var result = cuckooGet(args, params, 'tasks/list'); return { Type: entryTypes.note, Contents: res, ContentsFormat: formats.json, HumanReadable: tblToMdWithTransform('Task Table', result.tasks, undrscrToCamelCase), EntryContext: {'Cuckoo.Task' : jsonToEntity(result.tasks, entityMap.Task)} }; }; var listMachines = function(args, params){ var result = cuckooGet(args, params, 'machines/list'); return { Type: entryTypes.note, Contents: res, ContentsFormat: formats.json, HumanReadable: tblToMdWithTransform('Machines Table', result.machines, undrscrToCamelCase), EntryContext: {'Cuckoo.Machine' : jsonToEntity(result.machines, entityMap.Machine)} }; }; var viewMachine = function(args, params){ result = cuckooGet(args, params, 'machines/view/' + args['name']); return { Type: entryTypes.note, Contents: res, ContentsFormat: formats.json, HumanReadable: tblToMdWithTransform('Machines Table', result.machine, undrscrToCamelCase), EntryContext: {'Cuckoo.Machine' : jsonToEntity(result.machine, entityMap.Machine)} }; }; var taskScreenshot = function(args ,params){ var uri = 'tasks/screenshots/' + args['id']; var filename = 'CuckooScreenshots.zip' if (args['screenshot']) { filename = args['screenshot']; uri += '/'+ args['screenshot']; } return cuckooGetFile(args, params, uri, filename); }; // The command input arg holds the command sent from the user. switch (command) { // This is the call made when pressing the integration test button. case 'test-module': var resp = cuckooGetRaw(args, params, 'tasks/list'); if (resp.StatusCode === 200) { return 'ok'; } else if (resp.Status) { return resp.Status; } else { return resp; } break; case 'ck-file'://deprecated case 'cuckoo-create-task-from-file': return createTaskFromFile(args, params); case 'ck-url'://deprecated case 'cuckoo-create-task-from-url': return createTaskFromURL(args, params); case 'ck-report'://deprecated case 'cuckoo-get-task-report': return getTaskReport(args, params); case 'ck-view'://deprecated case 'cuckoo-view-task': return viewTasks(args, params); case 'ck-del'://deprecated case 'cuckoo-delete-task': return deleteTask(args, params); case 'ck-list'://deprecated case 'cuckoo-list-tasks': return listTasks(args, params); case 'ck-machines-list': //deprecated case 'cuckoo-machines-list': return listMachines(args, params); case 'ck-machine-view'://deprecated case 'cuckoo-machine-view': return viewMachine(args, params); case 'ck-scrshot'://deprecated case 'cuckoo-task-screenshot': //unchanged return taskScreenshot(args, params); }