Skip to content

Commit

Permalink
Added option to output Binary Ninja script.
Browse files Browse the repository at this point in the history
  • Loading branch information
fuzyll committed Apr 13, 2017
1 parent ae43242 commit 772034f
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 0 deletions.
43 changes: 43 additions & 0 deletions export.cc
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,49 @@ export_bin2ida(std::string &fname, Binary *bin, std::list<DisasmSection> *disasm
return 0;
}

int
export_bin2binja(std::string &fname, Binary *bin, std::list<DisasmSection> *disasm, CFG *cfg)
{
FILE *f;
uint64_t entry;
size_t i;

f = fopen(fname.c_str(), "w");
if(!f) {
print_err("cannot open file '%s' for writing", fname.c_str());
return -1;
}

fprintf(f, "\"\"\"\n");
fprintf(f, "Script generated by %s\n", NUCLEUS_VERSION);
fprintf(f, "\"\"\"\n");
fprintf(f, "\n");
fprintf(f, "import binaryninja\n");
fprintf(f, "\n");
fprintf(f, "def mark_functions():\n");
fprintf(f, " functions = [\n");
i = 0;
for(auto &func: cfg->functions) {
if(func.entry.empty()) continue;
entry = func.entry.front()->start;
if(!(i % 5)) fprintf(f, " ");
fprintf(f, "0x%jx, ", entry);
if(!(++i % 5)) fprintf(f, "\n");
}
fprintf(f, " ]\n");
fprintf(f, " for f in bv.functions:\n");
fprintf(f, " bv.remove_function(f)\n");
fprintf(f, " for f in functions:\n");
fprintf(f, " print 'nucleus: defining function 0x%%x' %% (f)\n");
fprintf(f, " bv.add_function(f):\n");
fprintf(f, "\n");
fprintf(f, "mark_functions()\n");

fclose(f);

return 0;
}


int
export_cfg2dot(std::string &fname, CFG *cfg)
Expand Down
1 change: 1 addition & 0 deletions export.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "cfg.h"

int export_bin2ida (std::string &fname, Binary *bin, std::list<DisasmSection> *disasm, CFG *cfg);
int export_bin2binja (std::string &fname, Binary *bin, std::list<DisasmSection> *disasm, CFG *cfg);
int export_cfg2dot (std::string &fname, CFG *cfg);

#endif /* NUCLEUS_EXPORT_H */
Expand Down
3 changes: 3 additions & 0 deletions nucleus.cc
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ main(int argc, char *argv[])
if(!options.exports.ida.empty()) {
(void)export_bin2ida(options.exports.ida, &bin, &disasm, &cfg);
}
if(!options.exports.binja.empty()) {
(void)export_bin2binja(options.exports.binja, &bin, &disasm, &cfg);
}
if(!options.exports.dot.empty()) {
(void)export_cfg2dot(options.exports.dot, &cfg);
}
Expand Down
6 changes: 6 additions & 0 deletions options.cc
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ print_usage(char *prog)
printf(" : export CFG to graphviz dot file\n");
printf(" -i <file>\n");
printf(" : export binary info to IDA Pro script\n");
printf(" -n <file>\n");
printf(" : export binary info to Binary Ninja script\n");
printf(" -v : verbose\n");
printf(" -w : disable warnings\n");
printf(" -h : help\n");
Expand Down Expand Up @@ -164,6 +166,10 @@ parse_options(int argc, char *argv[])
options.exports.ida = std::string(optarg);
break;

case 'n':
options.exports.binja = std::string(optarg);
break;

case 'd':
options.strategy_function.name = std::string(optarg);
break;
Expand Down

0 comments on commit 772034f

Please sign in to comment.