Skip to content

Commit f32ee4f

Browse files
committed
Migrate from old repository and port to newest IDA.
1 parent a0f773c commit f32ee4f

15 files changed

+21559
-0
lines changed

README.md

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# IDA Graph Exporter
2+
3+
## What?
4+
5+
Plugin for IDA Pro that allows to export a function as rendered in the graph view to a vectorized SVG. The native plugin retrieves all relevant information from the currently focused graph view and stores them into a JSON. The JSON is then to be processed `json2svg.py` to produce an SVG. Compiled versions of the plugin for IDA Versions 7.0 to 8.2 can be found on the [Release page](https://github.com/kirschju/ida-graph-exporter/releases).
6+
7+
The native code ships (amalgamated) copies of [miniz 3.0.2](https://github.com/richgel999/miniz) and [jsoncpp 1.9.5](https://github.com/open-source-parsers/jsoncpp) for compression and JSON serialization.
8+
9+
## How?
10+
11+
1. Compile the source in this repository (you need the Hex-Rays SDK to do that) or download a precompiled plugin matching (closely) your IDA Pro version from the
12+
[Release page](https://github.com/kirschju/ida-graph-exporter/releases).
13+
2. Copy both `IdaGraph.dll` and `IdaGraph64.dll` into the `plugins` directory of your local IDA Pro installation and reload IDA.
14+
3. Open the control flow graph that is to be exported in a graph viewer tab and export it to JSON via `Edit -> Plugins -> Graph Exporter`.
15+
4. Convert the JSON to SVG using `json2svg.py <output.json>`. The output file name is the same as the input plus an `.svg` suffix.
16+
5. Optional: To convert the SVG to PDF, I use `rsvg-convert -f pdf -o <output.pdf> <input.svg>`
17+
18+
## Example
19+
20+
Screenshot of some function taken from an `/usr/bin/id` binary:
21+
22+
![Screenshot of Control Flow Graph](example/id_screenshot.png)
23+
24+
Exported SVG:
25+
26+
![Exported SVG showing Control Flow Graph](example/id.json.pdf.svg)
27+
28+
Converting from SVG to PDF:
29+
30+
![Converted PDF showing Control Flow Graph](example/id.json.pdf)

cpp/IdaGraph/IdaGraph.vcxproj

+222
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup Label="ProjectConfigurations">
4+
<ProjectConfiguration Include="Debug|Win32">
5+
<Configuration>Debug</Configuration>
6+
<Platform>Win32</Platform>
7+
</ProjectConfiguration>
8+
<ProjectConfiguration Include="Release_32|Win32">
9+
<Configuration>Release_32</Configuration>
10+
<Platform>Win32</Platform>
11+
</ProjectConfiguration>
12+
<ProjectConfiguration Include="Release_32|x64">
13+
<Configuration>Release_32</Configuration>
14+
<Platform>x64</Platform>
15+
</ProjectConfiguration>
16+
<ProjectConfiguration Include="Release|Win32">
17+
<Configuration>Release</Configuration>
18+
<Platform>Win32</Platform>
19+
</ProjectConfiguration>
20+
<ProjectConfiguration Include="Debug|x64">
21+
<Configuration>Debug</Configuration>
22+
<Platform>x64</Platform>
23+
</ProjectConfiguration>
24+
<ProjectConfiguration Include="Release|x64">
25+
<Configuration>Release</Configuration>
26+
<Platform>x64</Platform>
27+
</ProjectConfiguration>
28+
</ItemGroup>
29+
<PropertyGroup Label="Globals">
30+
<VCProjectVersion>15.0</VCProjectVersion>
31+
<ProjectGuid>{2CEE095B-E2CC-40C6-9FB9-477B6E54C26D}</ProjectGuid>
32+
<RootNamespace>IdaGraph</RootNamespace>
33+
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
34+
</PropertyGroup>
35+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
36+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
37+
<ConfigurationType>DynamicLibrary</ConfigurationType>
38+
<UseDebugLibraries>true</UseDebugLibraries>
39+
<PlatformToolset>v141</PlatformToolset>
40+
<CharacterSet>MultiByte</CharacterSet>
41+
</PropertyGroup>
42+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
43+
<ConfigurationType>Application</ConfigurationType>
44+
<UseDebugLibraries>false</UseDebugLibraries>
45+
<PlatformToolset>v141</PlatformToolset>
46+
<WholeProgramOptimization>true</WholeProgramOptimization>
47+
<CharacterSet>MultiByte</CharacterSet>
48+
</PropertyGroup>
49+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_32|Win32'" Label="Configuration">
50+
<ConfigurationType>Application</ConfigurationType>
51+
<UseDebugLibraries>false</UseDebugLibraries>
52+
<PlatformToolset>v141</PlatformToolset>
53+
<WholeProgramOptimization>true</WholeProgramOptimization>
54+
<CharacterSet>MultiByte</CharacterSet>
55+
</PropertyGroup>
56+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
57+
<ConfigurationType>DynamicLibrary</ConfigurationType>
58+
<UseDebugLibraries>true</UseDebugLibraries>
59+
<PlatformToolset>v141</PlatformToolset>
60+
<CharacterSet>MultiByte</CharacterSet>
61+
</PropertyGroup>
62+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
63+
<ConfigurationType>DynamicLibrary</ConfigurationType>
64+
<UseDebugLibraries>false</UseDebugLibraries>
65+
<PlatformToolset>v141</PlatformToolset>
66+
<WholeProgramOptimization>true</WholeProgramOptimization>
67+
<CharacterSet>MultiByte</CharacterSet>
68+
</PropertyGroup>
69+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_32|x64'" Label="Configuration">
70+
<ConfigurationType>DynamicLibrary</ConfigurationType>
71+
<UseDebugLibraries>false</UseDebugLibraries>
72+
<PlatformToolset>v141</PlatformToolset>
73+
<WholeProgramOptimization>true</WholeProgramOptimization>
74+
<CharacterSet>MultiByte</CharacterSet>
75+
</PropertyGroup>
76+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
77+
<ImportGroup Label="ExtensionSettings">
78+
</ImportGroup>
79+
<ImportGroup Label="Shared">
80+
</ImportGroup>
81+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
82+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
83+
</ImportGroup>
84+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
85+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
86+
</ImportGroup>
87+
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_32|Win32'" Label="PropertySheets">
88+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
89+
</ImportGroup>
90+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
91+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
92+
</ImportGroup>
93+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
94+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
95+
</ImportGroup>
96+
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_32|x64'" Label="PropertySheets">
97+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
98+
</ImportGroup>
99+
<PropertyGroup Label="UserMacros" />
100+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
101+
<TargetName>$(ProjectName)64</TargetName>
102+
</PropertyGroup>
103+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
104+
<ClCompile>
105+
<WarningLevel>Level4</WarningLevel>
106+
<Optimization>Disabled</Optimization>
107+
<SDLCheck>true</SDLCheck>
108+
<AdditionalIncludeDirectories>C:\Users\user\source\idasdk\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
109+
<PreprocessorDefinitions>__NT__;__IDP__;__X64__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
110+
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
111+
</ClCompile>
112+
<Link>
113+
<OutputFile>$(OutDir)\$(ProjectName).dll</OutputFile>
114+
<AdditionalDependencies>C:\Users\user\source\idasdk\lib\x64_win_vc_32\ida.lib;%(AdditionalDependencies)</AdditionalDependencies>
115+
<AdditionalOptions>/EXPORT:PLUGIN %(AdditionalOptions)</AdditionalOptions>
116+
</Link>
117+
</ItemDefinitionGroup>
118+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
119+
<ClCompile>
120+
<WarningLevel>Level3</WarningLevel>
121+
<Optimization>Disabled</Optimization>
122+
<SDLCheck>true</SDLCheck>
123+
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
124+
</ClCompile>
125+
<Link>
126+
<OutputFile>$(OutDir)\$(ProjectName).dll</OutputFile>
127+
<AdditionalDependencies>C:\Users\user\source\idasdk\lib\x64_win_vc_64\ida.lib;%(AdditionalDependencies)</AdditionalDependencies>
128+
<AdditionalOptions>/EXPORT:PLUGIN %(AdditionalOptions)</AdditionalOptions>
129+
</Link>
130+
</ItemDefinitionGroup>
131+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
132+
<ClCompile>
133+
<WarningLevel>Level3</WarningLevel>
134+
<Optimization>MaxSpeed</Optimization>
135+
<FunctionLevelLinking>true</FunctionLevelLinking>
136+
<IntrinsicFunctions>true</IntrinsicFunctions>
137+
<SDLCheck>true</SDLCheck>
138+
</ClCompile>
139+
<Link>
140+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
141+
<OptimizeReferences>true</OptimizeReferences>
142+
</Link>
143+
</ItemDefinitionGroup>
144+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_32|Win32'">
145+
<ClCompile>
146+
<WarningLevel>Level3</WarningLevel>
147+
<Optimization>MaxSpeed</Optimization>
148+
<FunctionLevelLinking>true</FunctionLevelLinking>
149+
<IntrinsicFunctions>true</IntrinsicFunctions>
150+
<SDLCheck>true</SDLCheck>
151+
</ClCompile>
152+
<Link>
153+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
154+
<OptimizeReferences>true</OptimizeReferences>
155+
</Link>
156+
</ItemDefinitionGroup>
157+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
158+
<ClCompile>
159+
<WarningLevel>Level3</WarningLevel>
160+
<Optimization>MaxSpeed</Optimization>
161+
<FunctionLevelLinking>true</FunctionLevelLinking>
162+
<IntrinsicFunctions>true</IntrinsicFunctions>
163+
<SDLCheck>true</SDLCheck>
164+
<ControlFlowGuard>Guard</ControlFlowGuard>
165+
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
166+
<DisableLanguageExtensions>false</DisableLanguageExtensions>
167+
<AdditionalOptions>
168+
</AdditionalOptions>
169+
</ClCompile>
170+
<Link>
171+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
172+
<OptimizeReferences>true</OptimizeReferences>
173+
<OutputFile>$(OutDir)\$(ProjectName)64.dll</OutputFile>
174+
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;C:\Users\user\source\idasdk\lib\x64_win_vc_64\ida.lib;%(AdditionalDependencies)</AdditionalDependencies>
175+
<AdditionalOptions>/EXPORT:PLUGIN %(AdditionalOptions)</AdditionalOptions>
176+
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
177+
</Link>
178+
</ItemDefinitionGroup>
179+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_32|x64'">
180+
<ClCompile>
181+
<WarningLevel>Level3</WarningLevel>
182+
<Optimization>MaxSpeed</Optimization>
183+
<FunctionLevelLinking>true</FunctionLevelLinking>
184+
<IntrinsicFunctions>true</IntrinsicFunctions>
185+
<SDLCheck>true</SDLCheck>
186+
<ControlFlowGuard>Guard</ControlFlowGuard>
187+
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
188+
<DisableLanguageExtensions>false</DisableLanguageExtensions>
189+
<AdditionalOptions>/wd4146</AdditionalOptions>
190+
</ClCompile>
191+
<Link>
192+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
193+
<OptimizeReferences>true</OptimizeReferences>
194+
<OutputFile>$(OutDir)\$(ProjectName).dll</OutputFile>
195+
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;C:\Users\user\source\idasdk\lib\x64_win_vc_32\ida.lib;%(AdditionalDependencies)</AdditionalDependencies>
196+
<AdditionalOptions>/EXPORT:PLUGIN %(AdditionalOptions)</AdditionalOptions>
197+
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
198+
</Link>
199+
</ItemDefinitionGroup>
200+
<ItemGroup>
201+
<ClCompile Include="ida_graph.cpp">
202+
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\Users\user\source\idasdk\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
203+
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level3</WarningLevel>
204+
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">__NT__;__IDP__;__X64__;__EA64__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
205+
<RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MultiThreadedDebugDLL</RuntimeLibrary>
206+
<RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MultiThreadedDebugDLL</RuntimeLibrary>
207+
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\Users\user\source\idasdk\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
208+
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_32|x64'">C:\Users\user\source\idasdk\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
209+
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">__NT__;__IDP__;__X64__;__EA64__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
210+
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_32|x64'">__NT__;__IDP__;__X64__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
211+
</ClCompile>
212+
<ClCompile Include="jsoncpp.cpp">
213+
<RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MultiThreadedDebugDLL</RuntimeLibrary>
214+
</ClCompile>
215+
<ClCompile Include="miniz.c">
216+
<RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MultiThreadedDebugDLL</RuntimeLibrary>
217+
</ClCompile>
218+
</ItemGroup>
219+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
220+
<ImportGroup Label="ExtensionTargets">
221+
</ImportGroup>
222+
</Project>

cpp/IdaGraph/IdaGraph.vcxproj.filters

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup>
4+
<Filter Include="Source Files">
5+
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
6+
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
7+
</Filter>
8+
<Filter Include="Header Files">
9+
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
10+
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
11+
</Filter>
12+
<Filter Include="Resource Files">
13+
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
14+
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
15+
</Filter>
16+
</ItemGroup>
17+
<ItemGroup>
18+
<ClCompile Include="ida_graph.cpp">
19+
<Filter>Source Files</Filter>
20+
</ClCompile>
21+
<ClCompile Include="jsoncpp.cpp">
22+
<Filter>Source Files</Filter>
23+
</ClCompile>
24+
<ClCompile Include="miniz.c">
25+
<Filter>Source Files</Filter>
26+
</ClCompile>
27+
</ItemGroup>
28+
</Project>

cpp/IdaGraph/IdaGraph.vcxproj.user

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
4+
<LocalDebuggerCommand>C:\Users\user\ida_70\ida64.exe</LocalDebuggerCommand>
5+
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
6+
</PropertyGroup>
7+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
8+
<LocalDebuggerCommand>C:\Users\user\ida_70\ida64.exe</LocalDebuggerCommand>
9+
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
10+
</PropertyGroup>
11+
</Project>

0 commit comments

Comments
 (0)