`objection` is a runtime mobile exploration toolkit, powered by [Frida](https://www.frida.re/). It was built with the aim of helping assess mobile applications and their security posture without the need for a jailbroken or rooted mobile device.
**Note:** This is not some form of jailbreak / root bypass. By using `objection`, you are still limited by all of the restrictions imposed by the applicable sandbox you are facing.
### Resume
The **goal** of **objection** is let the user call the **main actions that offers Frida**. **Otherwise**, the user will need to create a **single script for every application** that he wants to test.
## Tutorial
For this tutorial I am going to use the APK that you can download here:
Or from its [original repository ](https://github.com/asvid/FridaApp)\(download app-release.apk\)
### Installation
```text
pip3 install objection
```
### Connection
Make a **regular ADB conection** and **start** the **frida** server in the device \(and check that frida is working in both the client and the server\).
If you are using a **rooted device** it is needed to select the application that you want to test inside the _**--gadget**_ option. in this case:
android ui FLAG_SECURE false This may enable you to take screenshots using the hardware keys
```
### Static analysis made Dynamic
In a real application we should know all of the information discovered in this part before using objection thanks to **static analysis**. Anyway, this way maybe you can see **something new** as here you will only have a complete list of classes, methods and exported objects.
This is also usefull if somehow you are **unable to get some readable source code** of the app.
You could also list all the classes that were loaded inside the current applicatoin:
```text
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
```
This is very useful if you want to **hook the method of a class and you only know the name of the class**. You coul use this function to **search which module owns the class** and then hook its method.
### Hooking being easy
#### Hooking \(watching\) a method
From the [source code](https://github.com/asvid/FridaApp/blob/master/app/src/main/java/asvid/github/io/fridaapp/MainActivity.kt) of the application we know that the **function**_**sum\(\)**_**from**_**MainActivity**_ is being run **every second**. Lets try to **dump all possible information** each time the function is called \(arguments, return value and backtrace\):
Actually I find all the methods of the class MainActivity really interesting, lets **hook them all**. Be careful, this could **crash** an application.
```text
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
```
If you play with the application while the class is hooked you will see when **each function is being called**, its **arguments** and the **return** value.
From the source code you can see that the function _checkPin_ gets a _String_ as argument and returns a _boolean_. Lets make the function **always return true**:
Search for and print **live instances of a specific Java class**, specified by a fully qualified class name. Out is the result of an attempt at getting a string value for a discovered objection which would typically **contain property values for the object**.
You cals can use the command `sqlite` to interact with sqlite databases.
### Exit
```text
exit
```
## What I miss in Objection
* The hooking methods sometimes crashes the application \(this is also because of Frida\).
* You can't use the instaces of the classes to call functions of the instance. And you can't create new instances of classes and use them to call functions.
* There isn't a shortcut \(like the one for sslpinnin\) to hook all the common crypto methods being used by the application to see cyphered text, plain text, keys, IVs and algorithms used.