Jicer is a static Jimple slicer. It is especially designed for slicing Android apps. Since it takes APK files as input and also outputs slices as APK files, it can smoothly be integrated into cooperative analyses such as CoDiDroid. The use of Jicer in a cooperative analysis is also explained and demonstrated in tutorial video #03 of the AQL-System.
To open the GUI simply run:
java -jar Jicer-X.X.X.jar -gui
All launch parameters can also be configured via the GUI.
The following table shows all the available launch parameters.
|-gui||If this parameter is given, the GUI will be launched. Any other parameter will be used to select the initial options in the GUI.|
|-mode , -m||Three modes can be chosen:
|-from , -to||One or two slicing criterion must be provided.
|-simpleinput, -simple, -si||Allows to use simple input. For example instead of a full Jimple statement (
|-d , -debug||The output generated during the execution of this tool can be set to different levels. ```` may be set to: “error”, “warning”, “normal”, “debug”, “detailed”, “verbose” (ascending precision from left to right). Additionally it can be set to “short”, the output will then be equal to “normal” but shorter at some points. By default it is set to “normal”.|
|-dg, -draw, -drawGraphs||Enables ADG output in form of an SVG (
|-f, -format||The following four output formats can be used: apk, jimple, class, none. Class can only be used when the input is an class (e.g.
|-o , -out , -output||By default the output file is created in the same directory where Jicer is run. The output file has the same name as the input file. Via this parameter a different path and filename can be specified.|
|-ie , -inputEdges||An AQL-Answer can be given to Jicer to enhance the ADG - ```` refers to such an answer.|
|-ra, -run, -runnable||By setting the parameter the created output contains statements required to run the app.|
|-s, -sign||Implies the parameter above. The output app will be signed as specified in
|-i, -in, -incomplete||The slice created is as small as possible. In most scenarios an incomplete slice is neither analyzable nor runnable. These slices are suited best for debugging.|
|-nff||Forward field filtering (FFF) can be deactivated with this parameter.|
|-ncsr||Context-sensitive refinement (CSR) can be deactivated with this parameter.|
|-sts||Prefer local data (PLD) can be switched to strict thread-sensitivity (STS) by this parameter.|
|-os, -overapproximateSummaries||If StubDroid cannot provide sufficient information for a method, this parameter decides what is assumed. By default it is assumed that the method does not assign anything to parameters or the method call’s base. When this parameter is given the opposite is assumed.|
|-k , -limit , -klimit , -k-limit||Maxmimal execution steps of the reaching definition analysis. Whenever this limit is reached Jicer provides a warning (Default: 100,000).|
|-eol, -excludeOrdinaryLibraries||The libraries configured in
|-sol, -sliceOrdinaryLibraries||Automatically deactivates
|-ns, -nostats, -nostatistics||Disables logging stats about the ADG and the slicing process.|
In the following we present a list of features that make Jicer support multiple slicing use-cases and different slice granularities:
- APK/class input
- APK/Jimple output
- ADG Generation
- flow-, context-, field-, object- and thread-sensitive
- Callback- & Lifecycle-aware
- Scalable w.r.t. libraries (through StubDroid summaries)
- ICC & IAC support via cooperative analysis (input edges)
- Debugable, Analyzable or Executable output
- Valid code slicing through extra-slicing
- Forward Field Filtering
- Context-Sensitive Refinement
- Prefer Local Data
- Call Graph Enhancing
- … and much more
- To appear in the proceedings of IEEE SCAM 2021
The slides and video as presented during SCAM 2021 are also available:
The reviewed artifact is available at Zenodo: https://zenodo.org/record/5462859
Evaluation - Results
The results associated with the three experiments can be obtained here:
The AQL-System is licensed under the GNU General Public License v3 (see LICENSE).
Felix Pauck (FoelliX)