You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+41-25Lines changed: 41 additions & 25 deletions
Original file line number
Diff line number
Diff line change
@@ -3,76 +3,93 @@
3
3
</p>
4
4
5
5
# Ghidra Deep Links
6
+
6
7
A cross-platform plugin for Ghidra that provides deep linking support. This enables the generation of clickable `disas://` links that can be included in 3rd party applications. Example use cases include:
8
+
7
9
* Direct linking from research notes or reports to relevant binary locations.
8
10
* Sharing an interesting section address with peers over Slack, Discord, Teams etc.
9
11
* Including links in vulnerability write-ups or tutorials to direct readers to the exact address of an issue.
12
+
* Creating draw.io diagrams for documenting program structure with direct links to corresponding locations.
10
13
11
14
The linking mechanism will work across different project structures and with both shared and non-shared Ghidra projects.
12
15
13
-
# IDA support
16
+
##IDA support
14
17
15
18
Don't use Ghidra? Not a problem...
16
19
17
-
We have collaborated with the team behind Heimdallr, a plugin that provides deep linking support for IDA, on a new platform-agnostic URI schema so that links generated in Ghidra Deep Links can be opened by Heimdallr and vice versa. This assumes the exact same binary is loaded on both platforms. This is great as now teams can use their prefered disassembler while being able to use the same external notes and reference links. Check out Heimdallr over at: https://github.com/interruptlabs/heimdallr-ida
20
+
We have collaborated with the team behind Heimdallr, a plugin that provides deep linking support for IDA, on a new platform-agnostic URI schema so that links generated in Ghidra Deep Links can be opened by Heimdallr and vice versa. This assumes the exact same binary is loaded on both platforms. This is great as now teams can use their prefered disassembler while being able to use the same external notes and reference links. Check out Heimdallr over at: <https://github.com/interruptlabs/heimdallr-ida>
21
+
22
+
We invite other developers to adopt the `disas://` schema outlined in [URL format](#-url-format) to enable more cross-application compatibility.
18
23
19
-
We invite other developers to adopt the `disas://` schema outlined in [URL format](#url-format) to enable more cross-application compatibility.
24
+
## ▶️ Usage
20
25
21
-
# ▶️ Usage
22
-
With a CodeBrowser tool open, right click on a line in the listing view which will present a new context menu items, "Copy Deep Link"
26
+
With a CodeBrowser tool open, right click on a line in the listing view which will present new context menu items:
23
27
24
-

28
+

25
29
26
-
Click on this menu item and a `disas://` link will be added to the clipboard. This can be shared by pasting like any normal link.
30
+
Click on the *Copy Deep Link* item and a `disas://` link will be added to the clipboard. This can be shared by pasting like any normal link.
27
31
28
32
When you (or somebody else) clicks on the link the referenced binary will open in a CodeBrowser session and the memory address from the link will be jumped to.
29
33
30
34
> ⚠️ Currently the link handler does not distinguish between projects, and (on non-linux platforms) it cannot open Ghidra by itself. Therefore you will need to have Ghidra open and the project containing the binary referenced in the link open.
31
35
32
-
You can use the "Copy Markdown Deep Link" content menu item to copy a fully formatted link, where the symbol name or address is the title of the link and the `disas://` is the target.
36
+
You can use the *Copy Markdown Deep Link* context menu item to copy a fully formatted Markdown link, where the symbol name or address is the title of the link and the `disas://` URL is the target.
37
+
38
+
### Creating draw.io objects
39
+
40
+
The *Copy draw.io Deep Link* context menu item populates your clipboard with a [draw.io](https://draw.io) object. Pasting this into draw.io will add an object to your diagram, labelled with the symbol name or address of the location where you right-clicked. This object will have both the text and the object as a whole linked with the `disas://` URL to the original binary location. Here's what it will look like when pasted into your draw.io diagram:
41
+
42
+

43
+
44
+
If you save your diagram as an SVG image and open it in a browser, you will now be able to click on this object and Ghidra will navigate to the original location. This makes it easy to create diagrams visually documenting the relationship between important locations in your binary, and allowing easy navigation around them.
45
+
46
+
Top tip: use draw.io's [Editable SVG image](https://www.drawio.com/blog/xml-in-png) functionality to create an SVG file that you can load directly in draw.io.
47
+
48
+
## ⚙️ Installation
33
49
34
-
# ⚙️ Installation
35
50
### Linux
36
-
1. Download and install the latest release of the ghidra-deep-links extension from https://github.com/foundryzero/ghidra-deep-links/releases
51
+
52
+
1. Download and install the latest release of the ghidra-deep-links extension from <https://github.com/foundryzero/ghidra-deep-links/releases>
37
53
38
54
2. Install the `disas://` handler by executing the following:
39
55
40
56
(Before curling and executing random scripts from the internet it is a good idea to validate they don't do anything malicious. Please review the contents of this script before execution at `install.sh`)
3. Alternatively, clone this repo and run `install-offline.sh`.
46
63
47
-
3. Follow the instructions in [Plugin Activation](#plugin-activation) to complete the install.
48
-
64
+
4. Follow the instructions in [Plugin Activation](#plugin-activation) to complete the install.
49
65
50
66
### Windows
51
67
52
-
1. Download and install the latest release of the ghidra-deep-links extension from https://github.com/foundryzero/ghidra-deep-links/releases
68
+
1. Download and install the latest release of the ghidra-deep-links extension from <https://github.com/foundryzero/ghidra-deep-links/releases>
53
69
54
70
2. Install the `disas://` handler by executing the following in a PowerShell window:
55
71
56
72
(Before executing random PowerShell scripts from the internet it is a good idea to validate they don't do anything malicious. Please review the contents of this script before execution at `install.ps1`)
3. Alternatively, clone this repo and run `install-offline.ps1`.
62
79
63
80
4. Follow the instructions in [Plugin Activation](#plugin-activation) to complete the install.
64
81
65
-
66
82
### Mac
67
83
68
-
1. Download and install the latest release of the ghidra-deep-links extension from https://github.com/foundryzero/ghidra-deep-links/releases
84
+
1. Download and install the latest release of the ghidra-deep-links extension from <https://github.com/foundryzero/ghidra-deep-links/releases>
69
85
70
86
2. Additionally download `GhidraDeepLinksHandler.dmg` from the above releases page, mount the dmg and install the handler app as normal (drag to Applications)
71
87
72
88
3. Run the following to disable Gatekeeper on the handler app.
73
-
89
+
74
90
(This is required as we do not code sign our releases. Please review the code at `os/mac`. This can be compiled from source by following the steps in `.github/workflows/mac_app.yml`)
@@ -82,11 +99,11 @@ You can use the "Copy Markdown Deep Link" content menu item to copy a fully form
82
99
83
100
1. From the Ghidra project browser click `File -> Install Extensions`. Click the green `+` button and select the extension downloaded from the releases page (Don't extract the zip archive).
84
101
85
-

102
+

86
103
87
104
2. In the main ghidra window (the one that shows your project files), go to `File -> Configure -> Utility` and enable`ghidra-deep-links`.
88
105
89
-

106
+

90
107
91
108
3. In a CodeBrowser window, go to `File -> Configure -> Utility` and enable`DeepLinksToolPlugin`.
92
109
@@ -96,12 +113,11 @@ You can use the "Copy Markdown Deep Link" content menu item to copy a fully form
@@ -114,10 +130,10 @@ If `<path>` cannot be found or does not match `<hash>`, the entire project will
114
130
115
131
Please consider adopting this schema when you want to create links to a location in a binary.
116
132
117
-
# ⚠️ Caveats & Known Issues
133
+
## ⚠️ Caveats & Known Issues
118
134
119
135
*`disas://` links cannot be opened from Snap applications.
120
-
* If multiple instances of ghidra are open, only the first will recieve the link requests.
136
+
* If multiple instances of ghidra are open, only the first will receive the link requests.
121
137
* Currently the link handler does not distinguish between projects, and (on non-linux platforms) it cannot open Ghidra by itself. Therefore you will need to have Ghidra open and the project containing the binary referenced in the link open.
122
138
* When the link handler falls back to lookup by hash links may take a few seconds to open on projects with many (i.e. hundreds of) binaries.
123
139
* On Windows a Powershell window may briefly flash open on each link press.
0 commit comments