Hvui User Manual
Hvui User Manual
user manual
Table of Contents
About this manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1. Getting started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Starting HVUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Getting the latest revision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2. Working with files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1. What are worklists, and commits? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Adding files to the vault. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3. Modifying files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4. Committing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5. Synchronizing files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6. Viewing the history of a file. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.7. Opening files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.8. Deleting files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.9. Reverting changes to files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.10. Renaming and Moving Files or Folders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.11. Copying Files or Folders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.12. Finding a file in the vault . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.13. Font styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3. Inspecting changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1. IDA’s diff mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3. Using IDA as a diffing tool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.4. Merging concurrent modifications (conflicts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4. IDA Teams general concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1. Collaboration in the reverse-engineering field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2. Revision control, for reverse-engineering projects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.3. Resolving conflicts in a file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.4. What is a "site"? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.5. hvignore (and .hvignore) files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.6. The registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.7. Passwords storage in the OS’s keychain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.8. Managing permissions on a vault . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5. Tour of hvui’s widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.1. Vault files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2. Local files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3. Worklists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.4. Commits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.5. Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.6. Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.7. Log window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.8. File history. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.9. User interface actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6. Miscellaneous information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.1. Simplified site creation on first connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.2. Technical information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Copyright (c) 2024 Hex-Rays SA
Page 1 of 63
Copyright (c) 2024 Hex-Rays SA
This manual assumes that the reader has an understanding of the IDA Teams general concepts.
Although Hex-Rays Vault will host any file you want, its primary use-case is to allow users to keep a
TIP history, and allow collaborative work on, IDA databases (i.e., .idb and .i64 files.) Throughout this manual,
we will be using the terms "idbs" and "files" interchangeably.
Page 2 of 63
Copyright (c) 2024 Hex-Rays SA
This guide assumes that such a server is running, accessible, and an account is available:
Host vaultserver
Port 65433
User name joe
User password secret
Checking the checkbox at the bottom of the form, will cause HVUI to store credentials in the registry,
NOTE
password(s) will be stored in the OS’s keychain.
Page 3 of 63
Copyright (c) 2024 Hex-Rays SA
If this is the first time a login is performed from this machine, the user will have to specify a directory where files will be
locally stored:
This will create a site (that is, a mapping of the server files on the local disk) for use on this computer.
After accepting the dialog, you will be presented with the main view:
Page 4 of 63
Copyright (c) 2024 Hex-Rays SA
Notice the #0/1 suffixes: it means we currently have revision number 0 (i.e., no revision at all) of those files.
Let’s sync those files to their latest revision, from the server:
Page 5 of 63
Copyright (c) 2024 Hex-Rays SA
Page 6 of 63
Copyright (c) 2024 Hex-Rays SA
This chapter will go a bit further, and introduce the most common, day-to-day operations users will want to perform on
their files.
2.1.1. worklist
A worklist holds files that have been
• modified,
• marked for addition or
• deletion,
• …
Those modifications are local to the user’s site. They will only be made available for everyone after the user commits the
worklist.
2.1.2. commit
Once a worklist is committed, it becomes a commit, and makes its modifications available for everyone.
In comparison to a worklist, a commit holds "published" modifications, and any user syncing to that commit will benefit
from those.
Let’s look at a concrete example illustrating worklists and commits: adding a file to the Hex-Rays Vault!
Page 7 of 63
Copyright (c) 2024 Hex-Rays SA
That file will now be added to the current worklist (one will be created if needed):
Page 8 of 63
Copyright (c) 2024 Hex-Rays SA
For this new file to become available for everyone, the user will need to "commit" the worklist:
Page 9 of 63
Copyright (c) 2024 Hex-Rays SA
Once the worklist is committed, it becomes a commit, and the modifications are then available for everyone:
Notice how our commit isn’t the first one in the system: another user submitted a commit before us — it’s
TIP
that commit that added the files we’ve seen in the getting-started portion of this guide.
Page 10 of 63
Copyright (c) 2024 Hex-Rays SA
Just like with the adding, the file will now show in a worklist:
Page 11 of 63
Copyright (c) 2024 Hex-Rays SA
…and just like with the adding, whatever modification you make to the file, will only be visible to coworkers after
committing that worklist.
Page 12 of 63
Copyright (c) 2024 Hex-Rays SA
2.4. Committing
Files that have been checked out (e.g. for modification) or opened for adding will go into a worklist until they are
committed, which then turns the worklist into a commit. A worklist can be committed to make its changes available to
other users: right-click, commit
Page 13 of 63
Copyright (c) 2024 Hex-Rays SA
Page 14 of 63
Copyright (c) 2024 Hex-Rays SA
Page 15 of 63
Copyright (c) 2024 Hex-Rays SA
Page 16 of 63
Copyright (c) 2024 Hex-Rays SA
From the "History of …" widget, you can view any revision of a file.
It’s also possible to synchronize files to older revisions, from this widget.
Page 17 of 63
Copyright (c) 2024 Hex-Rays SA
When asked to do that, HVUI will retrieve that older revision of the file from the server. This is what will now be present on
your filesystem.
Page 18 of 63
Copyright (c) 2024 Hex-Rays SA
Out-of-the-box, HVUI associates .idb and .i64 files with IDA. In addition to that, it provides a default "fallback" "*"
association that will cause matching files to be opened in IDA.
Users can specify their file extension associations via a form available from the View menu.
Page 19 of 63
Copyright (c) 2024 Hex-Rays SA
Just like other file actions, the change (deletion) needs to be committed for its effects to be visible on the server.
Page 20 of 63
Copyright (c) 2024 Hex-Rays SA
It is also possible to use "Revert if unchanged" to only revert files that were checked out without actual changes. This is
especially useful when used on a selection of files or a directory.
Page 21 of 63
Copyright (c) 2024 Hex-Rays SA
Page 22 of 63
Copyright (c) 2024 Hex-Rays SA
Page 23 of 63
Copyright (c) 2024 Hex-Rays SA
You can navigate between the search results by using Next search result and Previous search result, located next to Find
in vault… both in the toolbar, and in the "Search" menu.
Page 24 of 63
Copyright (c) 2024 Hex-Rays SA
A gray font denotes a file that is not in the vault. It has been added or renamed and not yet commited.
A bold font means that this file is being worked on, or has been changed.
An italic font means that it’s not the latest version of this file.
Some combinations are possible, for example a file being resolved (not latest version and being worked on) will have a
bold and italic font style. The combination gray (not in vault) and italic (not latest version) is for example not possible.
Page 25 of 63
Copyright (c) 2024 Hex-Rays SA
Page 26 of 63
Copyright (c) 2024 Hex-Rays SA
Page 27 of 63
Copyright (c) 2024 Hex-Rays SA
Shows the "untouched" version of the database (i.e., the one without your changes)
Page 28 of 63
Copyright (c) 2024 Hex-Rays SA
Page 29 of 63
Copyright (c) 2024 Hex-Rays SA
Notice how both panels have a little area at the bottom, that is labeled "Details".
Details are available on certain steps of the diffing process, and provide additional information about the change that is
currently displayed.
Page 30 of 63
Copyright (c) 2024 Hex-Rays SA
• Previous chunk
• Center chunk
• Next chunk
• Proceed to the next step
• Toggle 'Details'
Using actions in the toolbar, you can now iterate through the differences between the two databases, with each change
shown in context as if viewed through a normal IDA window.
The ability to view changes in context was a major factor in the decision to use IDA itself as the diffing/merging tool for
IDA Teams.
Previous chunk
Move to the previous change
Center chunk
Re-center the panels to show the current chunk (useful if you navigated around to get more context)
Next chunk
Move to the next change
Toggle 'Details'
Toggle the visibility of the "Details" widgets in the various panels (note that some steps do not provide details, so even if
the "Details" are requested, they might not be currently visible.)
Page 31 of 63
Copyright (c) 2024 Hex-Rays SA
3.2. Terminology
It is important to note the difference between the terms "diff" and "merge".
This document will sometimes use the two terms interchangeably. This is because to IDA, a diff is just a specialized
merge. Both diffing and merging are handled by IDA’s "merge mode", which involves up to 3 databases, one of which can
be modified to contain the result of the merge.
A diff is simply a merge operation that involves only 2 databases, neither of which are modified.
This is why often times you will see the term "merge" used in the context of a diff. In this case "merge" is referring to
IDA’s "merge mode", rather than the process of merging multiple databases together into a combined database.
IDA databases are not so simple. A change in one place in an idb will often have an impact on another place. For
example, if a structure mystruct changed between two databases, it will have an impact not only on the name of the
structure, but on cross-references to structure members, function prototypes, etc.
This is why IDA’s merge mode is split into a strict series of "steps":
Within a single step it is possible to go forward & backward between different chunks. But because of possible inter-
dependencies between steps, it is not possible to move backwards between steps, you can only go forward:
Since IDA’s diff mode is just a variation of its merge mode, diffing databases is also subject to this sequential application
of steps in order to view certain bits of information. That is why, in some steps (e.g., the "Disassembly/Items") IDA might
not report some changes that were performed at another level.
For instance, if a user marked a function as noret, the listings that will be shown in "Disassembly/Items" step, will not
advertise that there was a change at that place (even though the "Attributes: noreturn" is visible in the left-hand
listing), only the changes to the instructions (and data, …) are visible in the current step:
Page 32 of 63
Copyright (c) 2024 Hex-Rays SA
Page 33 of 63
Copyright (c) 2024 Hex-Rays SA
The changes applied during the "diff" process are only temporary. Exiting IDA (at any moment) will not
NOTE
alter the files being compared.
Page 34 of 63
Copyright (c) 2024 Hex-Rays SA
Page 35 of 63
Copyright (c) 2024 Hex-Rays SA
When a conflict is encountered, you’ll have the ability to pick, for all conflicts, which change should be kept (yours, or the
other). Every time you pick a change (and thus resolve a conflict), IDA will proceed with the merging, applying all the non-
conflicting changes it can, until the next conflict - if any. When all conflicts are resolved, you can leave IDA, and the new
resulting file is ready to be submitted.
Page 36 of 63
Copyright (c) 2024 Hex-Rays SA
In order to achieve that, different groups of people have come up with different strategies, the most common ones being:
• "live" propagation of changes from one IDA session, to other sessions (this requires all IDA instances are either
directly connected, or talk to a server, at all time)
• extracting some of the important bits of work done on an .idb, and applying those to another one — in fact, we at
Hex-Rays have also been providing a tool that enables this type of workflow: the lumina server.
While those solutions have interesting properties, they also typically suffer from significant drawbacks as well:
So we took a step back and looked at how things are done in other places, and in particular in the field of software
engineering, where collaboration over a piece of software is typically achieved by using revision control.
That is why one of the key features of IDA Teams, is software engineering-inspired revision control, applied to reverse-
engineering
NOTE Plans for IDA Teams span well beyond just revision control, but this was our first, significant milestone.
• On the server-side, we will find a new component: the The Hex-Rays Vault server
• On the client side, we will find that an IDA Teams installation now install a few additional binaries: a pair of clients to
connect to the server
It should be made available to all members of a team destined to work on common projects.
The server comes with its own installer, and an "admin guide" explaining how to tune the installation & perform common
tasks.
In addition to the regular IDA binaries, that new installer will alse place two clients to connect to the Hex-Rays Vault
server:
Users interact with the server using those tools, which lets them get a good view over who contributed what, and offer
functionality for organizing their work in the most efficient way possible.
Page 37 of 63
Copyright (c) 2024 Hex-Rays SA
Online vs Offline
Users have all the freedom to organize their work the way they see fit: they don’t have to be connected at all times, and
will only need to be able to connect to the server when it is time to publish their changes so they are available for others
to benefit from.
When the two sets of modifications do not overlap, merging is trivial - at least conceptually. But when they do overlap,
they produce conflict(s).
Since IDA Teams focuses on collaboration over IDA database files, the rest of this section will focus on the different
strategies that are available for resolving conflicts among those.
IDA Teams comes with multiple strategies to help in conflict resolution of IDA database files:
If any conflict is discovered, bail out of the merge process, and don’t modify the local database.
If a conflict is discovered, assume that the "local" change (i.e., the current user’s change) is the correct one, and apply
that.
Once all merging is done and conflicts are resolved, write those to the local database and exit IDA
If a conflict is discovered, assume that the "remote" change (i.e., the change made by another user) is the correct one,
and apply that.
Once all merging is done and conflicts are resolved, write those to the local database and exit IDA
This will launch IDA in an interactive, 3-pane mode, allowing the user to decide how to resolve each conflict.
Once all merging is done and conflicts are resolved, exit IDA and write the changes to the local database.
Page 38 of 63
Copyright (c) 2024 Hex-Rays SA
• A site name
• A host name
• The path to a folder on the filesystem (a.k.a., "root directory")
• Path filters (optional)
The vault server cannot manage files located outside the root directory. However, this limitation is straightforward to
overcome: create a symbolic link (or, on Windows, a junction point) from the root directory to the directory of your choice.
This will make the target of the symbolic link visible as part of the root directory.
The vault server keeps track of each site’s state: what files have been downloaded to the local disk, what files have been
checked out for editing, etc. This simplifies the housekeeping tasks, especially for big repositories with millions of files.
Even for them, downloading the latest files or reconciling the local disk with the server, are almost instantaneous.
The host name is a security feature that prevents from using a site on a wrong computer. Since the server keeps track of
the files downloaded to each site, using a wrong site may lead to an inconsistent mapping between the server and local
disk. However, if the user does not want this protection, it is possible to erase the host name in the site definition.
Page 39 of 63
Copyright (c) 2024 Hex-Rays SA
Site filters provide a mechanism that lets users restrict the set of files their IDA Teams client works with. Users who want
to work on some specific projects can set a filter that restricts the visibility only to selected subdirectories.
Each site has its own filters, that con be modified at any time. Filters do not directly affect any files on the local disk, or
on the server: they are strictly about visibility.
Site filters are meant simplify a user’s life by letting them focus on specific projects. Since they can
WARNING be modified by users, they should not be considered a security measure: that would be the role of
the permissions system, which can only be managed by Hex-Rays Vault server administrators.
The purpose of site filters is to create a subset of the full set of files provided by the server. Site filters
NOTE don’t directly affect what locally-available files (i.e., present in the site’s rootdir, but not tracked by the
server) are visible by IDA Teams clients.
There is another mechanism to specify what files should not be added to the vault. See .hvignore for more info.
Examples
An empty filter
$ cat empty_filter.txt
$
$ cat only_malware.txt
malware/
$
$ cat hide_pentest.txt
!pentesting/
$
Show all files but those from the pentesting team, except their produced documents
$ cat hide_pentest_but_docs.txt
!pentesting/
pentesting/research_docs/
$
Page 40 of 63
Copyright (c) 2024 Hex-Rays SA
When found, those files' contents will be appended to the main file’s contents.
• On Windows, the Windows Credential Store is used (therefore requiring Windows 7 or newer)
• On macOS, the macOS Keychain is used
• On Linux, the "Secret service" is used (through libsecret-1)
The permission file is a text file that contains the permission table. The file consists of lines that grant or deny access to
certain path patterns in the vault. The syntax for an entry is the following:
Possible PERMISSION values are: list, read and write. read includes list, write includes read (and thus also includes
list).
deny user * list //secret/ # nobody can see //secret. this line is superfluous
# because everything is denied by default.
grant user hughes write //secret/ # but hughes can write to secret and its subdirs
grant user john read //secret/ # and john can read the entire directory.
deny user * list //secret/supersecret # supersecret is not visible to anyone
grant user hughes write //secret/supersecret # but hughes can modify it (john cannot)
grant user * write //local_files/ # everyone can work with 'local_files'
deny group remote list //local_files/ # except that the 'remote' group cannot see 'local_files'
An empty permission table means that no permissions are enforced rendering all files accessible by everyone. As soon
as a non-empty permission table is specified, all access is denied to everyone by default.
Path patterns may refer to (yet) unexisting files. Users and groups too may refer to unexisting users and groups.
The order of the permission file is important as the last lines will take precedence over the preceding lines (if there are
conflicts).
Admins are not affected by the permission table, they are granted all access.
Page 41 of 63
Copyright (c) 2024 Hex-Rays SA
Since its contents can be very similar to what is shown in the "Local files" (depending on whether user’s site is using site
filters or not), it has been given differentiating background color, in the hope of not confusing it with that other widget.
Page 42 of 63
Copyright (c) 2024 Hex-Rays SA
5.1.1. Actions
Page 43 of 63
Copyright (c) 2024 Hex-Rays SA
• Interactive merge
• Use local, discard remote…
• Use remote, discard local…
• Diff against the local file
• Diff against previous revision
• File history
• Find in vault…
• Next search result
• Previous search result
• Refresh
• Show deleted files
• Show in Vault files/Show in Local files
Page 44 of 63
Copyright (c) 2024 Hex-Rays SA
Note that this widget honors the hvignore file that’s placed in the installation directory next to hvui, and also any
.hvignore file found in the directory structure.
5.2.1. Actions
• Get the latest revision
• Scan and commit
• Checkout for edit
• Add to vault
• Checkout for delete
• Checkout for move/rename…
• Checkout for copy…
• Revert…
• Revert if unchanged
• Open
• Open the containing folder // local only
• Auto resolve (if no conflicts)…
• Auto resolve, prefer local…
• Auto resolve, prefer remote…
• Interactive merge
• Use local, discard remote…
• Use remote, discard local…
• Diff against the local file
• Diff against previous revision
Page 45 of 63
Copyright (c) 2024 Hex-Rays SA
• File history
• Find in vault…
• Next search result
• Previous search result
• Refresh
• Show deleted files
• Show in Vault files/Show in Local files
Page 46 of 63
Copyright (c) 2024 Hex-Rays SA
5.3. Worklists
The "Worklists" widget groups all the modifications that are still pending (and are thus not yet visible to other users)
Those changes are grouped by "Worklist" (i.e., topic). A typical worklist will hold files that are related, and will be made
available to all once a worklist is committed.
It is possible to move file(s) from a worklist to another, by "drag & drop"'ing them, "cut & paste"'ing them, or using the
Migrate to another worklist… action.
By default, this widget will only show the current user’s worklists, but can be made to show everyone’s worklists, in read-
only mode: the current user will still only be able to modify (or commit) his/her own worklists.
5.3.1. Actions
• Open
• Commit…
• Add new worklist…
• Edit worklist…
• Revert…
• Revert if unchanged
• Delete worklist…
• View worklist…
• Auto resolve (if no conflicts)…
• Auto resolve, prefer local…
• Auto resolve, prefer remote…
• Interactive merge
• Use local, discard remote…
• Use remote, discard local…
• Diff against the local file
• Migrate to another worklist…
• File history
• Refresh
• Show other users' worklists
Page 47 of 63
Copyright (c) 2024 Hex-Rays SA
5.4. Commits
The "commits" widget shows a list of previous commits made to the server, in a concise and condensed way.
NOTE The amount of entries displayed by this widget can be configured through the "Options" dialog.
5.4.1. Actions
• Details… (on "Commits" widget)
• Sync to this revision
5.4.2. Commit
Using the "commits" widget, it is possible to inspect what changes were previously submitted to the vault in a particular
commit.
Page 48 of 63
Copyright (c) 2024 Hex-Rays SA
Actions
• Open this revision
• Sync to this revision
• Diff against previous revision
• Checkout for copy…
• File history
Page 49 of 63
Copyright (c) 2024 Hex-Rays SA
5.5. Sites
The "Sites" widget provides the ability for a user (or an admin) to administrate users' sites.
Non-admin users will only be able to modify their own site(s), while an admin will have the ability to do so for all users'
sites.
If you find yourself using more than one site on any specific machine, you will likely have to resort to the Use this site… to
switch between them.
5.5.1. Actions
• Add new site…
• Edit site…
• Delete site…
• Use this site…
Page 50 of 63
Copyright (c) 2024 Hex-Rays SA
5.6. Users
The "Users" widget lists all knows users of the Hex-Rays Vault server.
Users with administrator rights will, in addition, be able to add, remove, modify users - and modify anyone’s password.
5.6.1. Actions
• Add new user…
• Edit user…
• Delete user…
• Set password…
Page 51 of 63
Copyright (c) 2024 Hex-Rays SA
The logging area is helpful in providing feedback about different types of events:
5.7.1. Actions
The logging area provides typical text-manipulating functions (copying, searching, …) as well as the ability to turn
timestamps on/off.
Page 52 of 63
Copyright (c) 2024 Hex-Rays SA
The "File history" widget shows all changes ever commited to a single file.
5.8.1. Actions
• Open this revision
• Sync to this revision
• Checkout for copy…
• Details… (on "Commits" widget)
• Diff against previous revision
• Diff against…
Page 53 of 63
Copyright (c) 2024 Hex-Rays SA
All actions are available from the toplevel menubar’s submenus. Those whose operating conditions are not met, will
appear disabled.
Contrary to the toplevel menubar’s submenus, context menus (AKA: popup menus, right-click menus, …)
NOTE will not feature actions that are disabled. Those menus are created on-the-fly, and it’s best not to pollute
them with unnecessary noise.
This effectively updates all local copies of the files, except for those that are currently opened for edition, addition or
deletion: those will be left untouched in order to not risk losing user modifications made to them.
Page 54 of 63
Copyright (c) 2024 Hex-Rays SA
5.9.2. Commit…
Prompts the user for a commit description, and submits the files that are part of the current worklist, to the server.
Once successfully committed, a worklist will disappear and a new entry will be added to the list of commits.
Committed changes (modifications, additions and deletions) are available for all users that can access those files.
Unless you explicitly tell it not to (by checking the "Do not show this dialog anymore" checkbox), this action will first offer
the possibility to refine what exactly the scan should be looking for:
Spotting new or deleted files is fairly straightforward, but when it comes to existing files, hvui will also perform a md5
checksum comparison.
If differences are found, hvui will prepare a new worklist with those.
This is especially useful if one had to work on some files while no connection to the server was available (e.g., on a
plane).
Page 55 of 63
Copyright (c) 2024 Hex-Rays SA
If a file is opened and has been modified, those yet-unsubmitted modifications will not be part of the
NOTE
diff: only those between the two recorded revisions, will be visible.
• either the current revision, any revision number, or to the local file on disk
• the path to the file (it is therefore possible to diff entirely unrelated files together)
They will be added to the worklist number 1 (which will be created if it doesn’t exist), and will turn bold, to draw attention
to them.
They will be added to the worklist number 1 (which will be created if it doesn’t exist), and will turn bold, to draw attention
to them.
Page 56 of 63
Copyright (c) 2024 Hex-Rays SA
They will be added to the worklist number 1 (which will be created if it doesn’t exist), and will turn bold, to draw attention
to them.
This is the equivalent of executing Checkout for copy…, followed by Checkout for delete.
The copied files will be added to the worklist number 1 (which will be created if it doesn’t exist).
The file is retrieved from the server, and downloaded into a temporary location. It is cleaned after the
NOTE
application exits.
5.9.15. Revert…
Reverts the selection - that is: remove from the worklist(s), and restore the current revision from the server.
NOTE This action will lose all changes made to the selected file(s), and thus will first prompt for confirmation.
Files that have not been modified, will be reverted. Those that have been, will remain untouched.
Since this is a safe operation (in the sense that no data can be lost), this action will not ask for confirmation.
Page 57 of 63
Copyright (c) 2024 Hex-Rays SA
5.9.17. Open
For each entry in the selection, launch the associated "View" application.
If no association is present for a specific file extension (or if the file does not have an extension), the default *
association will be used.
However, hvui only knows how to handle a successful merge operation when IDA is used. Consequently, only the last 2
operations will be available for non-.idb/.i64 files.
The first thing that happens is that the last revision of the file is retrieved from the server (and stored in a temporary
location).
Then (for all but Use local, discard remote… and Use remote, discard local…) IDA will be launched in a special mode, and
with different set of parameters that depend on the exact nature of the operation.
This is a safe operation in the sense that, should there be any conflict, it will not touch the local file.
Page 58 of 63
Copyright (c) 2024 Hex-Rays SA
Interactive merge
Perform the "resolve actions" prolog, then launch IDA interactively: the user will be presented with a 3-panel IDA instance,
where it will be possible to manually pick either the local, or the remote change, for each conflict.
Once the user is done and exits IDA saving the resulting database, the file will be considered resolved.
If a match is found, it will be selected in the Vault files widget. It is then possible to move forward/backward in the search
results.
5.9.24. Refresh
Clears the local caches of all the data that was retrieved from the local filesystem & the Hex-Rays Vault server, and force
a refresh of all widgets.
Page 59 of 63
Copyright (c) 2024 Hex-Rays SA
When a file is deleted in revision #N, its revisions up to #N-1 are still kept on the server (but not visible by default.)
This offers the opportunity to view (and possibly resurrect) such deleted files.
While logged in as a non-administrator, you won’t have the choice but to associate the site to the current user. However,
when logged in as an administrator, it is necessary to provide the user’s name as well.
Naturally, deleting a site will also delete the worklists that were associated with that site. The commits that were made
from that site will not be deleted.
This can be useful if you have more than one site on your machine.
Switching to a site requires that the client host matches that of the current machine, and that the site belongs to the user
who’s currently logged-in.
Page 60 of 63
Copyright (c) 2024 Hex-Rays SA
Deleting a user also deletes the worklists that belonged to the user. The commits made by that user won’t be impacted.
This action can only be performed on worklists that belong to the current user.
Page 61 of 63
Copyright (c) 2024 Hex-Rays SA
To make it easier to get started using hvui, the first time a user connects to the Hex-Rays Vault server, the application will
propose a a simplified site creation dialog, that will query only the "root directory".
It is of course still possible to alter that site later, through the "Sites" widget.
Page 62 of 63
Copyright (c) 2024 Hex-Rays SA
Page 63 of 63