Frequently asked questions and answers around JEB.
Licensing#
Where is the end-user license agreement?#
The up-to-date end-user license agreement for JEB can be found here.
Can I generate license keys for additional machines?#
Yes, as long as the additional machines are operated by the licensee, they may install JEB on them. Contact licensing to request the ability to generate additional keys. We handle those requests promptly.
Can I revoke license keys?#
Yes, JEB license keys can be deprecated. Contact licensing to request key revocation. We handle those requests promptly.
I need to reinstall JEB on a different machine. Should I generate a new license key?#
Yes, because keys are specific to a user account. If you need to (re)install a non-floating build or the Controller for a floating build on a new system, make sure to generate a key for that system.
If you are planning to copy configuration files over, remove the .LicenseKey
entry of jeb-client.cfg
and generate a new key upon first run.
Why did JEB prompt me to generate a new key even though I have not changed my computer?#
A key is derived from multiple machine identifiers, such as the operating system serial number. Those identifiers are supposedly stable, but may change on some occasions or situations, e.g. after a major OS upgrade, or when a security product or low-level software tool modifies or provides different values for those ids. In such instances, JEB will not be able to match the current license key with its expected value, and therefore, will ask for the user to generate a new key.
How do I check my license type, license identifier, or license key?#
On the command-line: execute JEB with the -c --license
switches, eg:
$ jeb_wincon.bat -c --license
In the GUI client: open the menu entry Help, About.
How do floating licenses work?#
Floating licenses work on a per-seat basis, as opposed to other license types that work on a per-user basis. Example:
- A floating build valid for 3 seats allows any 3 users within your organization concurrently.
- A non-floating build valid for 3 users allows 3 fixed, determined users to use JEB. No other user shall use it.
Therefore, floating builds provide great flexibility for organizations where many users are planning to use JEB irregularly and/or at different times (e.g., teams split across various regions).
Please refer to this Manual entry to learn about setting up floating Controller and Clients.
What happens when my license subscription expires?#
JEB licenses are subscription-based:
- Past the expiration date, your software will continue to work and you will be able to open existing JDB2 projects.
- However you will not be able to create new projects if your license is expired.
Do subscriptions renew automatically?#
No. We do not perform auto-payments or auto-renewals. Please email sales when you need to renew a subscription.
Do you offer subscriptions valid for more than one year?#
Yes, we do offer custom subscriptions for up to 3 years. Email us at sales for details.
Do you offer perpetual licenses?#
No, we do not offer perpetual licenses at this point. However, we recommend you email sales and let us know your specific needs if you need licenses valid for more than 3 years: we always strive to accommodate customers' needs.
Do you provide professional support?#
We do offer an additional support plan for JEB Pro and JEB Pro Floating licenses. Refer to the Buy page for details.
Do you offer large volume subscriptions?#
Yes, we do have plans for large enterprise and government. Those plans include the possibility to generate large amount of license keys. Reach out to sales for additional details.
We developed internal tools built around JEB. Can other users in my organization use them without breaking the EULA?#
Yes. As long as your JEB subscription is valid, users in your organization may access and use data produced by JEB.
Do you provide discounts for university students?#
Yes! We give a 30% discount on all our licenses to students enrolled in undergraduate or graduate programs, for non-profit research work. Please place your order using your student email address, and let us know you request the discount in the Notes box of the order form. We will apply the discount when we issue you the invoice.
Can I receive a PayPal invoice if I do not have a PayPal account?#
If you wish to pay by card (Visa, Mastercard, etc.), we will issue you a PayPal invoice. In most cases, those invoices can be paid regardless of whether you have a PayPal account or not. Follow these steps:
- Open the PayPal invoice link located in the email sent from sales@pnfsoftware.com
- Find the text message "Select payment method", and click on the PayPal button under or next to that message
- A pop-up window will open, and you should see a button "Pay with Debit or Credit Card" that will allow you to pay by card without logging in or signing up for a PayPal account
Do you accept cryptocurrency such as Bitcoin or Ethereum as a payment method?#
No, we do not accept cryptocurrency as a payment method.
Java#
Which version of Java shall I use to run JEB UI client?#
JEB 4.x GUI requires a JDK 8.
Starting from JEB 5, the GUI client requires JDK 17. We do not recommend going beyond JDK 17 at this point, as some components of JEB rely on the SecurityManager
to operate.
If you have installed multiple versions of Java, make sure to set the JAVA_HOME
environment variable to the JDK of your choice.
The JEB client can always be started directly by executing jebc.jar
on the command line: java -jar bin/app/jebc.jar
Which version of Java shall I use to run non-UI clients?#
All components of JEB require a JDK 17 to run.
We do not recommend using JDK above version 17 at this point, as some components of JEB rely on the SecurityManager
to operate.
Which vendor/build of the JDK should I use?#
We recommend Oracle builds or OpenJDK builds are preferred.
It seems some UI problems were caused by custom builds, such as JetBrains's JDK. Other problems, including slowdowns and crashes during intensive processing, were reported by users using AdoptOpenJDK. macOS users have reported several issues when using Homebrew-installed JDKs. For those reasons, we strongly recommend to use Oracle/OpenJDK.
I am encountering strange problems on Windows, what can I do?#
The native launcher (jeb.exe
) is called by jeb_wincon.bat
by default on Windows. It does not play well with third-party JDKs, such as AdoptOpenJDK. To avoid problems, use -j
to avoid using the native launcher: jeb_wincon.bat -j
. Alternatively, you may use an Oracle JDK.
Why does JEB complains that it "requires a Java runtime environment", although I have one installed?#
Your java
binary should be accessible from the PATH
environment variable or a JAVA_HOME
environment variable should exist and point to your Java installation folder (bin/).
Make sure to install a 64-bit Java environment
A common source of problems are 64-bit systems having a 32-bit JRE accessible from the PATH
or JAVA_HOME
. You may have different versions of Java installed, but always make sure that paths refer to one that matches your system specifications.
How can I increase the maximum amount of memory usable by JEB?#
Create or edit the jvmopt.txt
file at the root of your JEB folder.
To specify an absolute maximum amount of memory, use -Xmx<Value><SizeUnit>
. Example: -Xmx8G
: allow JEB to use up to 8 Gb of memory.
To specify a relative maximum amount of memory, use -XX:MaxRAMPercentage=<Ratio>
. Example: -XX:MaxRAMPercentage=75.0
: allow JEB to use at most 75% of your RAM.
The settings in jvmopt.txt
must be on a single line. After modifying this file, restart JEB with your usual start-up script. On start-up, a message in the logger output will reflect the updated capability:
Warning
Do not edit the configuration files buried in bin/app/... or bin/jeb.app/... folders. The memory settings in those files are automatically pulled from jvmopt.txt.
Why am I seeing "WARNING: System::setSecurityManager has been called by xxx" in the console when decompiling Android code?#
The JEB's dex decompiler sandbox relies on the Java SecurityManager
, a standard JDK component that was deprecated for removal in Java 17. If you are using JDK 17 (the recommended JDK version to run JEB), you may ignore the warning: although the SecurityManager is deprecated, it is still enabled by default.
However, the SecurityManager was disabled by default in Java 18. If you must use a JDK 18 or above, the workaround is to pass -Djava.security.manager=allow
on the command line when starting JEB:
- Edit or create
jvmopt.txt
file in your JEB folder. This file must contain a single line with additional space-separated Java options. - Add the following option:
-Djava.security.manager=allow
(important: this option is reserved for JDK 17+, it should never be used with older JDK)
I use JDK 21, and the Dex decompiler's emulator does not seem to work as well as it did with JDK 17. Anything I can do?#
Yes, you may. However, if you use the Dex decompiler, to ensure full caps of the emulator, you will want to add that bit to your jvmopt.txt
file (keep in mind, this file is a one-liner):
--add-opens java.base/java.lang=ALL-UNNAMED
Overall, your file should contain at least the following:
-Djava.security.manager=allow --add-opens java.base/java.lang=ALL-UNNAMED
Program#
On which platforms can I run JEB?#
The UI desktop client can be run on Windows (x64, arm64), Linux (x64, arm64), and macOS (x64, arm64) with a JDK 17.
(Similarly, the JEB back-end components, which can be used separately to build other clients or analysis pipelines, run on all systems for which a JDK 17+ is available.)
What do I need to run JEB?#
The only external dependency is a Java JDK.
Can I run multiple instances of JEB?#
Yes, multiple instances of JEB can be operated concurrently.
How can I redirect JEB logs to files on disk?#
Command-line runners, such as the floating license Controller or a script runner, can easily write log output to files. (Note that other clients, such as the UI desktop client, can do that via scripting - refer to GlobalLog.)
Use the --logfile=...
flag. Consult the Usage info for additional details on that switch ("--help"
)
Example: Start a JEB Controller on Windows and log all INFO-level (or above) output to "controller.log.N" files (max. 5 rotating files, max. 2 Mb of log per file):
jeb_wincon.bat -c --controller --logfiles=controller.log,INFO,5,2
If I access Internet via a proxy, can I still use JEB?#
Proxy settings can be stored at those two locations:
- The UI client's settings, stored in
jeb-client.cfg
. If you are using the UI desktop client, they can be modified via the Options panel. - In headless mode, set the proxy settings in
jeb-engines.cfg
instead.
In each aforementioned configuration file, the network proxy data is stored as a key-value pair having the following format:
.NetworkProxy = type|hostname|port|<username>|<password>|<whitelist>
- Allowed types: http, socks.
- 'username'/'password' can be left blank if your proxy does not require authentication
- 'whitelist' is an optional, comma-separated list of wildcard hostnames/IPs to which JEB should always attempt to direct-connect (no proxy)
A few examples of valid proxy strings:
- http|10.0.0.123|8080
- http|10.0.0.123|8080||
- http|10.0.0.123|8080|||
- http|10.0.0.123|8080|||*.pnfsoftware.com
- socks|proxy0.intranet.com|8088|user|pass|*.pnfsoftware.com
Warning
Do not forget the leading dot in .NetworkProxy
!
Does JEB run natively on Apple Silicon?#
JEB can run natively on Arm64-powered macOS systems (Apple Mx chips). The Rosetta conversion system is not needed.
Why can't JEB clients no longer connect to a JEB floating controller using SSL?#
This problem is only relevant
1) with JEB <= 4.2 and
2) for which the controller uses a JDK >= April 2021 and
3) for which the controller is set up to use SSL/HTTPS to communicate with floating clients (i.e. the .ControllerProtocol
value is set to 1
).
On April 20 2021, Oracle shipped JDKs deprecating the TLS v1/v1.1 protocols (e.g. JDK 8u291 onward, JDK 11.0.11 onward, etc.), which JEB floating clients <=4.2 require when connecting to a JEB controller.
With default Java settings, the floating controller will simply reject such clients. You have 3 options:
- The solution is to upgrade JEB to 4.2.1/4.3 or above (recommended).
- A workaround is to tweak the Java settings on the controller: edit your
java.security
file (located in your JDK folder). You will see that "TLSv1" is located in thejdk.tls.disabledAlgorithms
entry. Remove it from this entry and add it to thejdk.tls.legacyAlgorithms
one. This will allow your JEB controller to accept incoming client requests. - Another workaround is to use a slightly older Java build on the controller, for which TLSv1 is not deprecated.
UI#
Can JEB messages be localized to my (non-English) locale?#
You may change the locale to one of the 10 supported languages (other than English) via the Edit, Language menu. See the Settings for details. However, support for non-English strings is limited to a subset of JEB messages.
I am trying to debug an Android application, why is my device not found?#
JEB relies on the Android Debug Bridge (adb
) to debug Android applications. Make sure to:
- install the Android SDK (or at least have a stand-alone, working adb binary accessible from your
PATH
- some Linux distributions ship adb and other SDK platform tools in separate, leaner packages) - have the SDK path referenced in one of the following environment variables:
ANDROID_SDK_ROOT
(preferred) orANDROID_HOME
(legacy).
To troubleshoot your system, you may enable Developer Mode in your JEB options and examine the logger output. You will see lines like the following indicating how and where JEB is attempting to find adb
:
[adb] ANDROID_HOME: Environment variable added to list of candidate Android SDK locations
[adb] ANDROID_SDK_ROOT: Environment variable NOT found
[adb] PATH: added to list of searched folders: (redacted)
[adb] Searching for 'adb.exe' in folders, by order: (redacted)
[adb] Found and using: C:\Users\nicol\AppData\Local\Android\sdk\platform-tools\adb.exe
Inside "Find text" widgets or filter fields, why are my regular expressions invalid or not working?#
JEB uses Java-style regular expressions, not PCRE, Boost, or other type of regex. Although the differences are minimal and subtle, complex regular expressions need to be carefully crafted and abide by the Java Pattern standard (refer to the "Comparison to Perl 5" section specifically). Refer to that section for details.
I am using Ubuntu 16.04 LTS, why does the GUI client behave strangely?#
If you are using Ubuntu 16 with a recent version of JEB, the following error message may be reported in the console:
WARNING: GTK+ version too old (micro mismatch)
WARNING: SWT requires GTK 3.20.0
WARNING: Detected: 3.18.9
When trying to use menus and widgets, unexpected errors will likely happen, including program termination.
The reason is JEB 3.20+ UI framework (SWT) does not work properly with GTK 3.18-, used by Ubuntu 16: recent SWT builds require GTK 3.20+. In order to upgrade GTK without upgrading your entire distro to Ubuntu 18 or Ubuntu 20, you may use the following commands:
sudo add-apt-repository ppa:gnome3-team/gnome3-staging
sudo add-apt-repository ppa:gnome3-team/gnome3
sudo apt update
sudo apt upgrade
On Linux, why I am seeing GTK error messages in the console?#
Most of those messages are harmless. If you are suspecting issues, please email support.
However, you may see the following message: "HoverWidget can not be loaded due to xxxxxxx because there is no underlying browser available. Please ensure that WebKit with its GTK 3.x bindings is installed (WebKit2 API level is preferred). Additionally, please note that GTK4 does not currently have Browser support. Is libwebkitgtk-1.0-0 package installed?". It indicates that some pop-up overlays will not work until you install libwebkit2gtk
:
# find what version is available on your distro
apt-cache search libwebkit2gtk
# install the package (e.g. here, version 4.0.37)
sudo apt install libwebkit2gtk-4.0.37
I am using an old version of Ubuntu (18, 16), why does JEB crash or behave strangely?#
A workaround is to start JEB with that environment variable set to avoid strange problems:
GTK_DEBUG=no-pixel-cache
The easiest way to set this up once and for all is to export GTK_DEBUG=no-pixel-cache
and then run jeb_linux.sh
.
I am experiencing UI glitches on my system, what can I do?#
JEB version 5.x ships with updated versions of the base UI libraries (SWT and JFace) used by JEB's GUI client. It appears that, on some exotic Linux systems, strange issues can manifest, such as disappearing fragments or scrolling problems.
Users may try to downgrade the UI libraries to an older version in an attempt to workaround the issue, until a fix is in place:
- navigate to https://pnfsoftware.com/jeb/ui-packages/
- open the sub-directory of the UI toolkit you wish to downgrade JEB to (see the list in INFO.txt)
- download
jface.jar
and theswt.jar
file that matches the your system - drop them in the
JEB/bin/app/
folder (overwrite the existing files)
I am experiencing UI glitches on macOS, what can I do?#
If you are encountering strange UI glitches, verify the version and vendor of your JDK.
Some problems were reported by users with the Homebrew
-provided JDK (a log entry 'Homebrew AA.B.C...' would be displayed on start-up). We recommend a clean install of the latest Oracle JDK 17.
The GUI looks small on my HDPI monitor. What can I do about it?#
Currently, there are two external Java properties to control how SWT (the UI toolkit) sizes native widgets.
The first option controls font rendering on macOS specifically. The Java property is named org.eclipse.swt.internal.carbon.smallFonts
. Note that it is passed by default in the macOS start-up script. If needed, you may remove it from jeb_macos.sh
.
The second set of properties is swt.autoScale
and swt.autoScale.method
. For example, you may set the scaling value to 200% by adding -Dswt.autoScale=200
in your JEB start-up script. Example of a modified jeb_linux.sh
:
...
"$JAVA" $JVMOPT -Dswt.autoScale=200 -jar "$BASEDIR/bin/app/jebc.jar" "$@"
You will find more details about SWT auto-scaling properties on that page.
The GUI crashes on Windows 7#
Starting with version 5.13 (May 2024), the UI libraries used by JEB appear to have issues when running on Windows 7 x64. In order to work, you will need to revert to the UI libs that shipped with JEB 5.12. Follow the instructions here.
Updating#
I work in a limited-connectivity environment, how can I update the software manually?#
The procedure is:
- Check your registered email address for a JEB update email ("JEB xxx is available...")
- Download the software archive
- Copy the archive to the root of your JEB folder and rename the file to
update.zip
- Create a text file named
update.pwd
and write the update password (provided in the email) in this file - Start JEB as normal, the update will be installed automatically
How do I update from JEB n to JEB n+1?#
At the time of writing, you must install JEB n+1 (e.g. JEB 4) in a separate location. The auto-updater will only notify you that a JEB n+1 build is available for you to install. Check your email to download and install that new version.
Can I update from the command-line?#
Yes, you can run:
$ <jeb_startup_script> -c --check-update
After the update is downloaded, execute JEB normally.
How can I update my license without updating the whole program?#
You may update your licensing details without performing a full update. The steps are:
- Download your latest software archive (link in the JEB software update email).
- Copy the archive file
bin/app/jeb-license.txt
to your JEB'sbin/app/
folder (overwrite the existing file).
JEB just auto-updated and I am now experiencing strange runtime issues, what can I do?#
If the issues you are experiencing are showing up after a software update, at seemingly random times during program execution, and involve error messages like "Error invoking method" or "Failed to launch JVM", it is likely that your last JEB update did not fully complete.
Try to execute your start-up script (eg, on Windows, jeb_wincon.bat
) instead of any native launcher you may have been previously using (such as an OS desktop task bar shortcut).
If the issue is recurring, please email Support.
Scripting#
Can I execute a JEB Python script from the command line?#
Yes. Here's how to use the built-in script runner. You will need a Pro license.
- Make sure your JEB scripts/ folder contains the
jython-xxx.jar
. - Execute your JEB startup script with
--srv2
and--script
parameters, as well as optional script arguments after--
Example on Windows:
$ jeb_wincon.bat -c --srv2 --script=SampleScript.py -- foo bar
Use -c --help
to learn about other options.
API
Command-line arguments (in the example above: foo
, bar
) can be retrieved via IClientContext.
Extensions
Alternate ways exist to run scripts or plugins in headless contexts. Read through this guide and associated sample code if you want to know more about writing your own front-end clients.
Can I write back-end extensions (plugins, contributions, etc.) in Python?#
Yes. Currently, back-end extensions that may be written as Python scripts include engines plugins and dexdec IR plugin.
Other#
Is there a public bug tracker or feature tracker?#
Although there is not, we are quite responsive when it comes to answering users' queries. Here's how to reach out:
- Join us on Slack and ask your question or make suggestions on #general
- For private inquiries, email us at Support
- You may also message us on the JEB Google Groups (although we don't use it much these days as it was superseded by the Slack channel)
- And of course, you can also reach out to us on Tweeter @jebdec