Reversense (Dexcalibur2) is a fully rewriting and rethinking of Dexcalibur. Reversense is a binary intelligence platform that automates the reverse engineering of mobile and embedded applications.
TypeScript
1,175
1,708 commits
updated Sep 18, 2026
Current git master branch is 2.0.0
Reversense (Dexcalibur2) is a fully rewriting and rethinking of Dexcalibur. It is a new project which aims to provide a better user experience, and a better coverage, suitable for intelligence and offensive security.
Reversense is a binary intelligence platform that automates the reverse engineering of mobile and embedded applications. It analyzes applications in their real execution context and supports a wide range of target languages, architectures, and operating systems.
Instead of scattering work across disconnected tools, Reversense aggregates static analysis, dynamic instrumentation, emulation, and scanning into a single universal representation of the target — and lets teams explore it together.
Do you want share something or do you need some help ? Join our official chats :
: the prefered way to give a response
Telegram - Alternative for whose are not familiar with Discord
For Professional use, support & modules : www.reversense.com
Mobile and embedded applications are everywhere, yet their internal behavior stays opaque: what data they process, whether they are vulnerable or malicious, and how they defend themselves. Traditional approaches run into recurring walls:
Reversense operates in four phases:
Manual or batch target selection (or directly from a device), authenticated download from a store/server/terminal, allocation of one or more devices, and automatic or manual configuration of the target OS to match fine hardware contexts (TV, watches, IoT). Project access control by user, team, or organization.
Exhaustive data extraction from all files and archives; a universal abstraction that brings machine code, binaries, graphical components, scripts, dumps, network traces, and system calls into one place. Combined static analysis, partial emulation, and symbolic execution. Native Radare2 integration and a Merlin search engine to explore the representation and find code by its execution behavior.
Automatic generation of hooks (Java methods, Objective-C, native functions, instructions, interrupts, instances) in a few clicks. A KeyPoints scheduler marks moments in the app lifecycle to load/unload hooks and trigger actions (memory dumps, screen recording, custom scenarios). Multi-thread and inter-process observation, multi-terminal scenarios for protocol analysis, device-fingerprint control, and a fuzzing engine. Dynamic cross-references are built automatically during execution.
One-click SAST / DAST / IAST / SCA batteries, organized by theme against an editable assurance model. Scanners behave like a real user, building a test plan and producing explorable results plus artifacts (screenshots, input and traffic recordings). Coverage includes permissions, SELinux policy, OWASP MASTG, SBOM, and detection of 90+ types of personal data across multiple states.
Automatic on-the-fly decompilation with static analysis and AST update for dynamically loaded code. Ready-to-use bypass tactics for common RASP (anti-hook, anti-root, anti-emulator, …). Code synthesis via concrete and symbolic execution to generate simplified representations or find bypass options.
One project, many terminals, many analysts, without conflicts. Markers, tags, and Merlin queries can be kept private or shared with the team. Traces and the hook configuration that produced them can be pooled and visualized across users.
A single interface to allocate and manage physical or virtual terminals, locally or in a farm. Virtual patching of terminal properties (Reversense generates the required low-level hooks). Access controls and quotas so terminals can be reserved for teams or projects.
Vulnerability research · threat intelligence · personal-data-flow analysis · deobfuscation and malicious-behavior detection · trojanization · security- function bypass · re-engineering and feature extraction · firmware reverse engineering · cryptographic-asset inventory and SBOMs · API identification · integration with an AI-driven system.
Start the server and visit the home page
# TODO: replace with the real installation steps
git clone https://github.com/YOUR_USER/reversense.git
cd reversense
# ...
# TODO: minimal end-to-end example (load a target, run a scan, open results)
Full documentation: https://reversenseorg.github.io/rs-doc/
Show Dexcalibur 0.7 (old) demo video : Demo: Less than 1 minute to hook 61 methods ? Not a problem. (youtube)
Contributions are welcome. Please read CONTRIBUTING.md before opening an issue or a pull request.
Reversense company is not a consulting firm, but professional services are available to tailor the platform to your needs: training on the platform and on reverse engineering, complete SBOM extraction, cryptographic-function inventory (CBOM), fuzzing consulting, application network-flow mapping, deobfuscation and protection-bypass support, custom scan repositories, and preparation of specific environments (e.g. Tizen).
Reversense is a French company founded in 2020 and based in Toulouse, specializing in offensive cybersecurity, application security, and AI. Its mission is to give security professionals the tools to automatically audit the most complex applications as needs evolve.
Prior to the first run, please create $HOME/.dexcalibur/ folder where global settings will be stored
Frida Version : 16.1.4
NODE_ENV=production DXC_SCHEMA=http DXC_HOSTNAME="127.0.0.1:8080" node ./dist/dexcalibur.js --gui=home,pro --dry
When Dexcalibur is installed, it generates an administrator account with random username and password.
This account is stored locally, into $HOME/.dexcalibur folder until the database is fully configured, then the local admin account is stored into DB.
This user account is tagged "local" instead of "federated", and can be disabled later by server administrator or restricted to be accessed only over a specific IP address.
Copy following code into $HOME/.dexcalibur
{
"discoverUri":"http://127.0.0.1:8080/realms/dxc-stagging",
"client_id":"dxcengine_api",
"client_secret":"<REDACTED>>",
"redirectUris":[
"http://127.0.0.1:8080/api-auth/cb"
],
"postLogoutRedirectUris":[
"http://127.0.0.1:8080/api-logout"
],
"responseType":["code"]
}
Some tests require environment variable to work properly. Find it below :
| Name | Type | Description | Example |
|---|---|---|---|
| DXC_MONGO_URL | string | MongoDB uri | |
| DXC_MONGO_PORT | number | MongoDB listening port | |
| DXC_BINWALK_PATH | path | Local path of binwalk binary | /opt/homebrew/bin/binwalk |
Some unit tests are skipped if such vars are not defined :
| Name | Test |
|---|---|
| DXC_BINWALK_PATH | BinwalkRunner.test.ts |
Run test :
npm run test
db.getCollection('project').updateMany({ '_attr.owner': { $regex: /^16/ }},{ $set: { _attr: { owner: { _n: 'owner', _v: [ '0:fd49eb00-ff8b-4a67-a437-75dd3f2f7517' ] }, tester: { _n: 'tester', _v: [ '0:fd49eb00-ff8b-4a67-a437-75dd3f2f7517' ] }} }})
db.getCollection('project')
.updateMany({
'_attr.owner': { $regex: /^16/ }
},{
$set: {
_attr: {
owner: { _n: 'owner', _v: [ 'USER_UUID' ] },
tester: { _n: 'tester', _v: [ 'USER_UUID' ] }
}
}
});
db.getCollection('project').updateMany({'_attr.owner': { $regex: /^16/ }},{ $set: {_attr: {owner: { _n: 'owner', _v: [ '0:380110fd-5dd4-468c-a1e5-9c5b38bc14bc' ] },tester: { _n: 'tester', _v: [ '0:380110fd-5dd4-468c-a1e5-9c5b38bc14bc' ] }}}});
| ENV | Description | Required | Format |
|---|---|---|---|
| DXC_VDM_HOST | Uri of remote VDM | uri | |
| DXC_VDM_PORT | Port for remote VDM | string | |
| DXC_NODE_RKNAME | Name of the property holding the registration key | string | |
| DXC_NODE_REG_KEY | Path of the file containing the hash of the registration key | string | |
| DXC_NODE_REG | Name of the property holding the registration key | boolean | |
| DXC_NODE_HEAP_SZ | Max memory allowed for heap of slave nodes | number | |
| DXC_HOSTNAME | Public hostname where the service canbe reach (URL) | uri | |
| DXC_MASTER_URI | URI of master node | uri | |
| DXC_MASTER_SSL | Enforce SSL between slave nodes and master nodes | boolean | |
| DXC_PRIV_IP | IP address or name of the node | uri | |
| DXP_SLAVE_HTTP_PORT | Static HTTP port for slave node | number | |
| DXP_SLAVE_HTTPS_PORT | Static WS port for slave node | number | |
| DXP_HC_TIMEOUT | Response timeout (ms) for HealthCheck requests from master to slaves. Default : 100000 | number |
You must configure a global environment variable DXC_DEV_WS pointing to the development workspace directory, in your bashrc file.
With something like:
export DXC_DEV_WS=$HOME/dxc
Then makefile and others script will use this variable.
/*
networkActivity:NetworkTransaction[] = [
{ server:{ ip:"216.34.12.98", countryCode:'US'},
type:'req',
protocol:'http',
method:'GET',
url:'https://firebase-settings.crashlytics.com/spi/v2/platforms/android/gmp/1:907869380789:android:305455082b687916/settings',
body:{ size:0 },
time:now-200000,
source:SOURCES.SMITM
},
{ server:{ ip:"216.34.12.98", countryCode:'US'},
type:'req',
protocol:'https',
method:'POST',
url:'https://crashlyticsreports-pa.googleapis.com/v1/firelog/legacy/batchlog',
body:{ size:0 }, time:now-200500, source:SOURCES.SMITM },
{ type:'rep',
protocol:'http',
method:'GET',
url:'',
body:{ format:'json', data:JSON.stringify({rooted:true}), size: 17 }, time:now-200520, source:SOURCES.SMITM },
{ server:{ ip:"132.1.4.15", countryCode:'ES'}, type:'req', protocol:'https', method:'GET', url:'', body:{ size:0 }, time:now-200600, source:SOURCES.IAST },
];*/
![]() |
|---|
| They offered a license for All Products <3 |
There is actually few documentation and training resources about Dexcalibur. If you successfully used Dexcalibur to win CTF challenge or to find vulnerability, i highly encourage you to share your experience.
Blog post : https://swarm.ptsecurity.com/fork-bomb-for-flutter/
TypeScript
82.2%
HTML
16.2%
Reversense (Dexcalibur2) is a fully rewriting and rethinking of Dexcalibur. Reversense is a binary intelligence platform that automates the reverse engineering of mobile and embedded applications.
TypeScript
1,175
1,708 commits
updated Sep 18, 2026
Current git master branch is 2.0.0
Reversense (Dexcalibur2) is a fully rewriting and rethinking of Dexcalibur. It is a new project which aims to provide a better user experience, and a better coverage, suitable for intelligence and offensive security.
Reversense is a binary intelligence platform that automates the reverse engineering of mobile and embedded applications. It analyzes applications in their real execution context and supports a wide range of target languages, architectures, and operating systems.
Instead of scattering work across disconnected tools, Reversense aggregates static analysis, dynamic instrumentation, emulation, and scanning into a single universal representation of the target — and lets teams explore it together.
Do you want share something or do you need some help ? Join our official chats :
: the prefered way to give a response
Telegram - Alternative for whose are not familiar with Discord
For Professional use, support & modules : www.reversense.com
Mobile and embedded applications are everywhere, yet their internal behavior stays opaque: what data they process, whether they are vulnerable or malicious, and how they defend themselves. Traditional approaches run into recurring walls:
Reversense operates in four phases:
Manual or batch target selection (or directly from a device), authenticated download from a store/server/terminal, allocation of one or more devices, and automatic or manual configuration of the target OS to match fine hardware contexts (TV, watches, IoT). Project access control by user, team, or organization.
Exhaustive data extraction from all files and archives; a universal abstraction that brings machine code, binaries, graphical components, scripts, dumps, network traces, and system calls into one place. Combined static analysis, partial emulation, and symbolic execution. Native Radare2 integration and a Merlin search engine to explore the representation and find code by its execution behavior.
Automatic generation of hooks (Java methods, Objective-C, native functions, instructions, interrupts, instances) in a few clicks. A KeyPoints scheduler marks moments in the app lifecycle to load/unload hooks and trigger actions (memory dumps, screen recording, custom scenarios). Multi-thread and inter-process observation, multi-terminal scenarios for protocol analysis, device-fingerprint control, and a fuzzing engine. Dynamic cross-references are built automatically during execution.
One-click SAST / DAST / IAST / SCA batteries, organized by theme against an editable assurance model. Scanners behave like a real user, building a test plan and producing explorable results plus artifacts (screenshots, input and traffic recordings). Coverage includes permissions, SELinux policy, OWASP MASTG, SBOM, and detection of 90+ types of personal data across multiple states.
Automatic on-the-fly decompilation with static analysis and AST update for dynamically loaded code. Ready-to-use bypass tactics for common RASP (anti-hook, anti-root, anti-emulator, …). Code synthesis via concrete and symbolic execution to generate simplified representations or find bypass options.
One project, many terminals, many analysts, without conflicts. Markers, tags, and Merlin queries can be kept private or shared with the team. Traces and the hook configuration that produced them can be pooled and visualized across users.
A single interface to allocate and manage physical or virtual terminals, locally or in a farm. Virtual patching of terminal properties (Reversense generates the required low-level hooks). Access controls and quotas so terminals can be reserved for teams or projects.
Vulnerability research · threat intelligence · personal-data-flow analysis · deobfuscation and malicious-behavior detection · trojanization · security- function bypass · re-engineering and feature extraction · firmware reverse engineering · cryptographic-asset inventory and SBOMs · API identification · integration with an AI-driven system.
Start the server and visit the home page
# TODO: replace with the real installation steps
git clone https://github.com/YOUR_USER/reversense.git
cd reversense
# ...
# TODO: minimal end-to-end example (load a target, run a scan, open results)
Full documentation: https://reversenseorg.github.io/rs-doc/
Show Dexcalibur 0.7 (old) demo video : Demo: Less than 1 minute to hook 61 methods ? Not a problem. (youtube)
Contributions are welcome. Please read CONTRIBUTING.md before opening an issue or a pull request.
Reversense company is not a consulting firm, but professional services are available to tailor the platform to your needs: training on the platform and on reverse engineering, complete SBOM extraction, cryptographic-function inventory (CBOM), fuzzing consulting, application network-flow mapping, deobfuscation and protection-bypass support, custom scan repositories, and preparation of specific environments (e.g. Tizen).
Reversense is a French company founded in 2020 and based in Toulouse, specializing in offensive cybersecurity, application security, and AI. Its mission is to give security professionals the tools to automatically audit the most complex applications as needs evolve.
Prior to the first run, please create $HOME/.dexcalibur/ folder where global settings will be stored
Frida Version : 16.1.4
NODE_ENV=production DXC_SCHEMA=http DXC_HOSTNAME="127.0.0.1:8080" node ./dist/dexcalibur.js --gui=home,pro --dry
When Dexcalibur is installed, it generates an administrator account with random username and password.
This account is stored locally, into $HOME/.dexcalibur folder until the database is fully configured, then the local admin account is stored into DB.
This user account is tagged "local" instead of "federated", and can be disabled later by server administrator or restricted to be accessed only over a specific IP address.
Copy following code into $HOME/.dexcalibur
{
"discoverUri":"http://127.0.0.1:8080/realms/dxc-stagging",
"client_id":"dxcengine_api",
"client_secret":"<REDACTED>>",
"redirectUris":[
"http://127.0.0.1:8080/api-auth/cb"
],
"postLogoutRedirectUris":[
"http://127.0.0.1:8080/api-logout"
],
"responseType":["code"]
}
Some tests require environment variable to work properly. Find it below :
| Name | Type | Description | Example |
|---|---|---|---|
| DXC_MONGO_URL | string | MongoDB uri | |
| DXC_MONGO_PORT | number | MongoDB listening port | |
| DXC_BINWALK_PATH | path | Local path of binwalk binary | /opt/homebrew/bin/binwalk |
Some unit tests are skipped if such vars are not defined :
| Name | Test |
|---|---|
| DXC_BINWALK_PATH | BinwalkRunner.test.ts |
Run test :
npm run test
db.getCollection('project').updateMany({ '_attr.owner': { $regex: /^16/ }},{ $set: { _attr: { owner: { _n: 'owner', _v: [ '0:fd49eb00-ff8b-4a67-a437-75dd3f2f7517' ] }, tester: { _n: 'tester', _v: [ '0:fd49eb00-ff8b-4a67-a437-75dd3f2f7517' ] }} }})
db.getCollection('project')
.updateMany({
'_attr.owner': { $regex: /^16/ }
},{
$set: {
_attr: {
owner: { _n: 'owner', _v: [ 'USER_UUID' ] },
tester: { _n: 'tester', _v: [ 'USER_UUID' ] }
}
}
});
db.getCollection('project').updateMany({'_attr.owner': { $regex: /^16/ }},{ $set: {_attr: {owner: { _n: 'owner', _v: [ '0:380110fd-5dd4-468c-a1e5-9c5b38bc14bc' ] },tester: { _n: 'tester', _v: [ '0:380110fd-5dd4-468c-a1e5-9c5b38bc14bc' ] }}}});
| ENV | Description | Required | Format |
|---|---|---|---|
| DXC_VDM_HOST | Uri of remote VDM | uri | |
| DXC_VDM_PORT | Port for remote VDM | string | |
| DXC_NODE_RKNAME | Name of the property holding the registration key | string | |
| DXC_NODE_REG_KEY | Path of the file containing the hash of the registration key | string | |
| DXC_NODE_REG | Name of the property holding the registration key | boolean | |
| DXC_NODE_HEAP_SZ | Max memory allowed for heap of slave nodes | number | |
| DXC_HOSTNAME | Public hostname where the service canbe reach (URL) | uri | |
| DXC_MASTER_URI | URI of master node | uri | |
| DXC_MASTER_SSL | Enforce SSL between slave nodes and master nodes | boolean | |
| DXC_PRIV_IP | IP address or name of the node | uri | |
| DXP_SLAVE_HTTP_PORT | Static HTTP port for slave node | number | |
| DXP_SLAVE_HTTPS_PORT | Static WS port for slave node | number | |
| DXP_HC_TIMEOUT | Response timeout (ms) for HealthCheck requests from master to slaves. Default : 100000 | number |
You must configure a global environment variable DXC_DEV_WS pointing to the development workspace directory, in your bashrc file.
With something like:
export DXC_DEV_WS=$HOME/dxc
Then makefile and others script will use this variable.
/*
networkActivity:NetworkTransaction[] = [
{ server:{ ip:"216.34.12.98", countryCode:'US'},
type:'req',
protocol:'http',
method:'GET',
url:'https://firebase-settings.crashlytics.com/spi/v2/platforms/android/gmp/1:907869380789:android:305455082b687916/settings',
body:{ size:0 },
time:now-200000,
source:SOURCES.SMITM
},
{ server:{ ip:"216.34.12.98", countryCode:'US'},
type:'req',
protocol:'https',
method:'POST',
url:'https://crashlyticsreports-pa.googleapis.com/v1/firelog/legacy/batchlog',
body:{ size:0 }, time:now-200500, source:SOURCES.SMITM },
{ type:'rep',
protocol:'http',
method:'GET',
url:'',
body:{ format:'json', data:JSON.stringify({rooted:true}), size: 17 }, time:now-200520, source:SOURCES.SMITM },
{ server:{ ip:"132.1.4.15", countryCode:'ES'}, type:'req', protocol:'https', method:'GET', url:'', body:{ size:0 }, time:now-200600, source:SOURCES.IAST },
];*/
![]() |
|---|
| They offered a license for All Products <3 |
There is actually few documentation and training resources about Dexcalibur. If you successfully used Dexcalibur to win CTF challenge or to find vulnerability, i highly encourage you to share your experience.
Blog post : https://swarm.ptsecurity.com/fork-bomb-for-flutter/
TypeScript
82.2%
HTML
16.2%