bool init_plugin(void *self) { printf("Initializing taint plugin\n"); plugin_ptr = self; panda_cb pcb; panda_enable_memcb(); panda_disable_tb_chaining(); pcb.guest_hypercall = guest_hypercall_callback; panda_register_callback(self, PANDA_CB_GUEST_HYPERCALL, pcb); pcb.before_block_exec_invalidate_opt = before_block_exec_invalidate_opt; panda_register_callback(self, PANDA_CB_BEFORE_BLOCK_EXEC_INVALIDATE_OPT, pcb); /* pcb.replay_handle_packet = handle_packet; panda_register_callback(plugin_ptr, PANDA_CB_REPLAY_HANDLE_PACKET, pcb); */ panda_arg_list *args = panda_get_args("taint2"); tainted_pointer = !panda_parse_bool(args, "no_tp"); inline_taint = panda_parse_bool(args, "inline"); if (inline_taint) { printf("taint2: Inlining taint ops by default.\n"); } else { printf("taint2: Instructed not to inline taint ops.\n"); } if (panda_parse_bool(args, "binary")) mode = TAINT_BINARY_LABEL; if (panda_parse_bool(args, "word")) granularity = TAINT_GRANULARITY_WORD; optimize_llvm = panda_parse_bool(args, "opt"); panda_require("callstack_instr"); assert(init_callstack_instr_api()); return true; }
bool init_plugin(void *self) { panda_require("taint2"); assert(init_taint2_api()); panda_require("callstack_instr"); assert (init_callstack_instr_api()); PPP_REG_CB("taint2", on_taint_change, taint_change); taint2_track_taint_state(); return true; }
bool init_plugin(void *self) { panda_require("callstack_instr"); assert (init_callstack_instr_api()); panda_require("taint2"); assert (init_taint2_api()); panda_cb pcb; pcb.after_block_exec = tbranch_after_block_exec; panda_register_callback(self, PANDA_CB_AFTER_BLOCK_EXEC, pcb); return true; }
bool init_plugin(void *self) { init_callstack_instr_api(); panda_cb pcb = { .before_block_exec = before_block_exec }; panda_register_callback(self, PANDA_CB_BEFORE_BLOCK_EXEC, pcb); panda_arg_list *args = panda_get_args("printstack"); blockpc = panda_parse_ulong(args, "pc", 0); if (blockpc == 0) return false; return true; }
bool init_plugin(void *self) { panda_require("callstack_instr"); assert (init_callstack_instr_api()); panda_require("taint2"); assert (init_taint2_api()); panda_arg_list *args = panda_get_args("tainted_instr"); summary = panda_parse_bool_opt(args, "summary", "only print out a summary of tainted instructions"); if (summary) printf ("tainted_instr summary mode\n"); else printf ("tainted_instr full mode\n"); /* panda_cb pcb; pcb.after_block_exec = tbranch_after_block_exec; panda_register_callback(self, PANDA_CB_AFTER_BLOCK_EXEC, pcb); */ PPP_REG_CB("taint2", on_branch2, tbranch_on_branch_taint2); PPP_REG_CB("taint2", on_non_const_eip, tbranch_on_branch_taint2); return true; }
bool init_plugin(void *self) { panda_cb pcb; printf("Initializing plugin correlatetaps\n"); if(!init_callstack_instr_api()) return false; // Need this to get EIP with our callbacks panda_enable_precise_pc(); // Enable memory logging panda_enable_memcb(); pcb.virt_mem_write = mem_write_callback; panda_register_callback(self, PANDA_CB_VIRT_MEM_WRITE, pcb); return true; }
/* void on_taint_change(Addr a, uint64_t size){ uint32_t num_tainted = 0; for (uint32_t i=0; i<size; i++){ a.off = i; num_tainted += (taint2_query(a) != 0); } if (num_tainted > 0) { printf("In taint change!\n"); } } */ bool init_plugin(void *self) { #if defined(TARGET_I386) && !defined(TARGET_X86_64) //printf("Initializing plugin dwarf_taint\n"); //panda_arg_list *args = panda_get_args("dwarf_taint"); panda_require("callstack_instr"); assert(init_callstack_instr_api()); panda_require("pri"); assert(init_pri_api()); //panda_require("pri_dwarf"); //assert(init_pri_dwarf_api()); panda_require("taint2"); assert(init_taint2_api()); //assert(init_file_taint_api()); PPP_REG_CB("pri", on_before_line_change, on_line_change); //PPP_REG_CB("pri", on_fn_start, on_fn_start); //PPP_REG_CB("taint2", on_taint_change, on_taint_change); //taint2_track_taint_state(); #endif return true; }