From 4e41298bb4f6451045c085f866e787eecb4e0a3f Mon Sep 17 00:00:00 2001 From: Nukem Date: Sat, 11 Jul 2015 16:41:00 -0400 Subject: [PATCH] DBG: Separate my analysis into analysis_nukem.cpp (along with command) --- x64_dbg_dbg/analysis_nukem.cpp | 23 +++++++++++++++++++++++ x64_dbg_dbg/analysis_nukem.h | 5 +++++ x64_dbg_dbg/instruction.cpp | 12 ++++++++++++ x64_dbg_dbg/instruction.h | 1 + x64_dbg_dbg/x64_dbg.cpp | 1 + x64_dbg_dbg/x64_dbg_dbg.vcxproj | 2 ++ x64_dbg_dbg/x64_dbg_dbg.vcxproj.filters | 6 ++++++ 7 files changed, 50 insertions(+) create mode 100644 x64_dbg_dbg/analysis_nukem.cpp create mode 100644 x64_dbg_dbg/analysis_nukem.h diff --git a/x64_dbg_dbg/analysis_nukem.cpp b/x64_dbg_dbg/analysis_nukem.cpp new file mode 100644 index 00000000..96779d09 --- /dev/null +++ b/x64_dbg_dbg/analysis_nukem.cpp @@ -0,0 +1,23 @@ +#include "analysis_nukem.h" +#include "BasicBlock.h" +#include "LinearPass.h" +#include "FunctionPass.h" +#include "console.h" + +void Analyse_nukem(uint base, uint size) +{ + dputs("Starting analysis (Nukem)..."); + DWORD ticks = GetTickCount(); + + uint end = base + size; + + BBlockArray blocks; + + LinearPass* pass1 = new LinearPass(base, end, blocks); + pass1->Analyse(); + + FunctionPass* pass2 = new FunctionPass(base, end, blocks); + pass2->Analyse(); + + dprintf("Analysis finished in %ums!\n", GetTickCount() - ticks); +} \ No newline at end of file diff --git a/x64_dbg_dbg/analysis_nukem.h b/x64_dbg_dbg/analysis_nukem.h new file mode 100644 index 00000000..c20eba7a --- /dev/null +++ b/x64_dbg_dbg/analysis_nukem.h @@ -0,0 +1,5 @@ +#pragma once + +#include "_global.h" + +void Analyse_nukem(uint base, uint size); \ No newline at end of file diff --git a/x64_dbg_dbg/instruction.cpp b/x64_dbg_dbg/instruction.cpp index 1f9dfe10..6e5d0467 100644 --- a/x64_dbg_dbg/instruction.cpp +++ b/x64_dbg_dbg/instruction.cpp @@ -28,6 +28,7 @@ #include "filereader.h" #include "functionanalysis.h" #include "controlflowanalysis.h" +#include "analysis_nukem.h" static bool bRefinit = false; @@ -1899,6 +1900,17 @@ CMDRESULT cbInstrCapstone(int argc, char* argv[]) return STATUS_CONTINUE; } +CMDRESULT cbInstrAnalyseNukem(int argc, char* argv[]) +{ + SELECTIONDATA sel; + GuiSelectionGet(GUI_DISASSEMBLY, &sel); + uint size = 0; + uint base = MemFindBaseAddr(sel.start, &size); + Analyse_nukem(base, size); + GuiUpdateAllViews(); + return STATUS_CONTINUE; +} + CMDRESULT cbInstrAnalyse(int argc, char* argv[]) { SELECTIONDATA sel; diff --git a/x64_dbg_dbg/instruction.h b/x64_dbg_dbg/instruction.h index 8cafb549..a9e8eeee 100644 --- a/x64_dbg_dbg/instruction.h +++ b/x64_dbg_dbg/instruction.h @@ -67,6 +67,7 @@ CMDRESULT cbInstrYaramod(int argc, char* argv[]); CMDRESULT cbInstrLog(int argc, char* argv[]); CMDRESULT cbInstrCapstone(int argc, char* argv[]); +CMDRESULT cbInstrAnalyseNukem(int argc, char* argv[]); CMDRESULT cbInstrAnalyse(int argc, char* argv[]); CMDRESULT cbInstrVisualize(int argc, char* argv[]); CMDRESULT cbInstrMeminfo(int argc, char* argv[]); diff --git a/x64_dbg_dbg/x64_dbg.cpp b/x64_dbg_dbg/x64_dbg.cpp index 0d1269f6..743d0f6c 100644 --- a/x64_dbg_dbg/x64_dbg.cpp +++ b/x64_dbg_dbg/x64_dbg.cpp @@ -189,6 +189,7 @@ static void registercommands() dbgcmdnew("yara", cbInstrYara, true); //yara test command dbgcmdnew("yaramod", cbInstrYaramod, true); //yara rule on module dbgcmdnew("analyse\1analyze\1anal", cbInstrAnalyse, true); //secret analysis command + dbgcmdnew("analyse_nukem", cbInstrAnalyseNukem, true); //secret analysis command #2 //undocumented dbgcmdnew("bench", cbDebugBenchmark, true); //benchmark test (readmem etc) diff --git a/x64_dbg_dbg/x64_dbg_dbg.vcxproj b/x64_dbg_dbg/x64_dbg_dbg.vcxproj index f1e3cfde..7b323e4e 100644 --- a/x64_dbg_dbg/x64_dbg_dbg.vcxproj +++ b/x64_dbg_dbg/x64_dbg_dbg.vcxproj @@ -22,6 +22,7 @@ + @@ -86,6 +87,7 @@ + diff --git a/x64_dbg_dbg/x64_dbg_dbg.vcxproj.filters b/x64_dbg_dbg/x64_dbg_dbg.vcxproj.filters index 43712536..118349a1 100644 --- a/x64_dbg_dbg/x64_dbg_dbg.vcxproj.filters +++ b/x64_dbg_dbg/x64_dbg_dbg.vcxproj.filters @@ -273,6 +273,9 @@ Source Files\Analysis + + Source Files\Analysis + @@ -626,5 +629,8 @@ Header Files\Analysis + + Header Files\Analysis + \ No newline at end of file