Installation
MacOS
1
  | pip install frida-tools
  | 
 
1
  | /Applications/Python\ 3.6/Install\ Certificates.command
  | 
 
Android
Get processor architecture:
1
  | adb shell getprop ro.product.cpu.abi
  | 
 
Download the latest frida-server for Android from our releases page:
  https://github.com/frida/frida/releases
1
2
3
4
  | $ adb root # might be required
$ adb push frida-server /data/local/tmp/ 
$ adb shell "chmod 755 /data/local/tmp/frida-server"
$ adb shell "/data/local/tmp/frida-server &"
  | 
 
on your desktop:
Genymotion_ARM_Translation
  https://github.com/m9rco/Genymotion_ARM_Translation
Usage
frida
-U - connect to USB device
-l SCRIPT - load SCRIPT
frida-ps
Demo
Enumrate Classes
1
2
3
4
5
6
7
8
9
10
11
12
13
  | setTimeout(function (){
  Java.perform(function (){
    console.log("\n[*] enumerating classes...");
    Java.enumerateLoadedClasses({
      onMatch: function(_className){
        console.log("[*] found instance of '"+_className+"'");
      },
      onComplete: function(){
        console.log("[*] class enuemration complete");
      }
    });
  });
});
 | 
 
1
  | frida -U -l enumerate_classes.js android.process.media
  | 
 
Hook Activity
1
2
3
4
5
  | var AuthActivity = Java.use('com.alipay.sdk.auth.AuthActivity');
AuthActivity.onResume.implementation = function () {
    send('[*] onResume com.alipay.sdk.auth.AuthActivity');
    this.onResume();
};
 | 
 
Hook Constructor
1
2
3
4
5
6
  | var CustomRequest = Java.use('com.app.net.Request$CustomRequest');
console.log(CustomRequest.$init);
CustomRequest.$init.overload('boolean', 'int', 'java.lang.String').implementation = function (b, i, s) {
  send('[***] $init com.app.net.Request$CustomRequest');
  return this.$init(b, i, s);
};
 | 
 
Enum Methods
1
2
3
4
5
  | var ApiManager = Java.use('com.app.net.ApiManager');
var methods = ApiManager.class.getDeclaredMethods();
methods.forEach(function(m){
  console.log(m);
});
 | 
 
Print HashMap
1
2
3
4
5
6
7
  | var HashMapNode = Java.use('java.util.HashMap$Node');
var iterator = mHashMap.entrySet().iterator();
while (iterator.hasNext()) {
  var entry = Java.cast(iterator.next(), HashMapNode);
  console.log(entry.getKey(),entry.getValue());
}
 | 
 
Python Template
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  | import frida, sys
def on_message(message, data):
    if message['type'] == 'send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)
jscode = """
Java.perform(function () {
  send('start');
  // ...
});
"""
process = frida.get_usb_device().attach('com.app')
script = process.create_script(jscode)
script.on('message', on_message)
print('[*] Running CTF')
script.load()
sys.stdin.read()
 | 
 
JavaScript API
  https://www.frida.re