All Projects → miwong → tiro

miwong / tiro

Licence: LGPL-2.1 license
TIRO - A hybrid iterative deobfuscation framework for Android applications

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to tiro

Bap
Binary Analysis Platform
Stars: ✭ 1,385 (+6825%)
Mutual labels:  static-analysis, dynamic-analysis, program-analysis
Pyt
A Static Analysis Tool for Detecting Security Vulnerabilities in Python Web Applications
Stars: ✭ 2,061 (+10205%)
Mutual labels:  static-analysis, program-analysis
R2frida Wiki
This repo aims at providing practical examples on how to use r2frida
Stars: ✭ 168 (+740%)
Mutual labels:  static-analysis, dynamic-analysis
Dg
[LLVM Static Slicer] Various program analyses, construction of dependence graphs and program slicing of LLVM bitcode.
Stars: ✭ 242 (+1110%)
Mutual labels:  static-analysis, program-analysis
Semgrep Rules
Semgrep rules registry
Stars: ✭ 140 (+600%)
Mutual labels:  static-analysis, program-analysis
Mutant
Automated code reviews via mutation testing - semantic code coverage.
Stars: ✭ 1,794 (+8870%)
Mutual labels:  static-analysis, dynamic-analysis
Codeql Go
The CodeQL extractor and libraries for Go.
Stars: ✭ 224 (+1020%)
Mutual labels:  static-analysis, program-analysis
Crab
CoRnucopia of ABstractions: a library for building abstract interpretation-based analyses
Stars: ✭ 102 (+410%)
Mutual labels:  static-analysis, program-analysis
iec-checker
Static analysis of IEC 61131-3 programs
Stars: ✭ 36 (+80%)
Mutual labels:  static-analysis, program-analysis
SDA
SDA is a rich cross-platform tool for reverse engineering that focused firstly on analysis of computer games. I'm trying to create a mix of the Ghidra, Cheat Engine and x64dbg. My tool will combine static and dynamic analysis of programs. Now SDA is being developed.
Stars: ✭ 98 (+390%)
Mutual labels:  static-analysis, dynamic-analysis
aparoid
Static and dynamic Android application security analysis
Stars: ✭ 62 (+210%)
Mutual labels:  static-analysis, dynamic-analysis
Ruby Type Inference
Dynamic definitions and types provider for ruby static analysis
Stars: ✭ 129 (+545%)
Mutual labels:  static-analysis, dynamic-analysis
Malwarelab vm Setup
Setup scripts for my Malware Analysis VMs
Stars: ✭ 126 (+530%)
Mutual labels:  static-analysis, dynamic-analysis
Crab Llvm
Static Analyzer for LLVM bitcode based on Abstract Interpretation
Stars: ✭ 143 (+615%)
Mutual labels:  static-analysis, program-analysis
awesome-malware-analysis
Defund the Police.
Stars: ✭ 9,181 (+45805%)
Mutual labels:  static-analysis, dynamic-analysis
Detect It Easy
Program for determining types of files for Windows, Linux and MacOS.
Stars: ✭ 2,982 (+14810%)
Mutual labels:  static-analysis, program-analysis
Mobile Security Framework Mobsf
Mobile Security Framework (MobSF) is an automated, all-in-one mobile application (Android/iOS/Windows) pen-testing, malware analysis and security assessment framework capable of performing static and dynamic analysis.
Stars: ✭ 10,212 (+50960%)
Mutual labels:  static-analysis, dynamic-analysis
Ikos
Static analyzer for C/C++ based on the theory of Abstract Interpretation.
Stars: ✭ 1,368 (+6740%)
Mutual labels:  static-analysis, program-analysis
Mobileapp Pentest Cheatsheet
The Mobile App Pentest cheat sheet was created to provide concise collection of high value information on specific mobile application penetration testing topics.
Stars: ✭ 3,051 (+15155%)
Mutual labels:  static-analysis, dynamic-analysis
sortcheck
Tool for detecting violations of ordering axioms in qsort/bsearch callbacks.
Stars: ✭ 23 (+15%)
Mutual labels:  dynamic-analysis, program-analysis

TIRO

TIRO is a hybrid iterative deobfuscation framework for Android applications. Its name stands for the four steps: Target, Instrument, Run, and Observe. TIRO's approach uses the idea of targeted execution (see our previous tool, IntelliDroid) to statically identify locations of possible obfuscation and determine the inputs to trigger these code locations. By instrumenting these locations and executing them using the targeting information, run-time deobfuscation information can be gathered and passed back into static analysis to deobfuscate the application and achieve more complete analysis results.

For further details, please see our paper, published in Usenix Security 2018.

Currently, the code in this repository contains the base code for the Target step and is mainly a port of IntelliDroid's static component to the Soot framework. We plan to release code for the other TIRO steps in the future.

Static Analysis

TIRO's static analysis is comprised of the Target and Instrument steps. In the Target step, locations of obfuscation are identified and call paths to those locations are extracted. For each path, TIRO gathers constraints that determine the inputs that must be injected to trigger the path dynamically. We currently use the Z3 constraint solver and convert constraints into the Z3-py and Z3-Java formats.

Requirements

The static analysis component requires Java 8 (JDK 1.8).

Cloning the repository

This repository contains a dependency to the android-platforms repository, which contains the Android framework libraries used by applications. This dependency is a submodule within the project. To clone TIRO with the submodule, run:

git clone --recursive [email protected]:miwong/tiro.git

Alternatively, if you have already cloned TIRO without the submodule, run:

git submodule update --init --recursive

This make take several minutes, as the Android framework libraries are large.

Building and running

This project uses the Gradle build system. Output files are located in the build/ directory. The gradlew script is a wrapper for machines that do not have Gradle already installed. If your development machine already contains Gradle, you can use your own installation by replacing ./gradlew with gradle in the commands below. A network connection is required when compiling the code for the first time so that Gradle can automatically download dependencies.

To build:

./gradlew build

To build and run:

./TIROStaticAnalysis <APK>

By default, TIRO writes the static analysis results into the tiroOutput directory. The -o options allows this to be changed. To see other command-line options, run:

./TIROStaticAnalysis --help

Compatibility with IntelliDroid

Currently, TIRO's static analysis output (i.e. appInfo.json) is not compatible with IntelliDroid. As we release the dynamic component of TIRO, we will also update the dynamic client used in IntelliDroid so that TIRO's constraint extraction can be integrated into dynamic analysis.

Dependency on Soot and FlowDroid

TIRO is built on the Soot static analysis framework. Several modifications were made to Soot's call-graph generation to enhance the call-graph with edges representing Android-specific execution flow (e.g. intents). The modifications are published in a seperate repository here.

Since Android applications are event-driven, the entry-points into an application must be computed to achieve complete analysis. TIRO uses the entry-point discovery implemented in FlowDroid. Minor modifications were made to this entry-point code to extract information required by TIRO's analysis; these changes are stored in static/src/soot/ and static/src/tiro/target/entrypoint/.

Contributors

The following have contributed code to TIRO:

  • Michelle Wong
  • Mariana D'Angelo

Contact

TIRO was developed as a PhD project by Michelle Wong at the University of Toronto. For any inquiries, please contact Michelle at [email protected].

License

TIRO is released under the GNU Lesser General Public License, version 2.1.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].