static int PyDeviceManager_init (PyDeviceManager * self) { self->handle = frida_device_manager_new (); self->on_changed = NULL; g_object_set_data (G_OBJECT (self->handle), "pyobject", self); return 0; }
int main (int argc, char * argv[]) { guint target_pid; FridaDeviceManager * manager; GError * error = NULL; FridaDeviceList * devices; gint num_devices, i; FridaDevice * local_device; FridaSession * session; frida_init (); if (argc != 2 || (target_pid = atoi (argv[1])) == 0) { g_printerr ("Usage: %s <pid>\n", argv[0]); return 1; } loop = g_main_loop_new (NULL, TRUE); signal (SIGINT, on_signal); signal (SIGTERM, on_signal); manager = frida_device_manager_new (); devices = frida_device_manager_enumerate_devices_sync (manager, &error); g_assert (error == NULL); local_device = NULL; num_devices = frida_device_list_size (devices); for (i = 0; i != num_devices; i++) { FridaDevice * device = frida_device_list_get (devices, i); g_print ("[*] Found device: \"%s\"\n", frida_device_get_name (device)); if (frida_device_get_dtype (device) == FRIDA_DEVICE_TYPE_LOCAL) local_device = g_object_ref (device); g_object_unref (device); } g_assert (local_device != NULL); frida_unref (devices); devices = NULL; session = frida_device_attach_sync (local_device, target_pid, &error); if (error == NULL) { FridaScript * script; FridaScriptOptions * options; g_print ("[*] Attached\n"); options = frida_script_options_new (); frida_script_options_set_name (options, "example"); frida_script_options_set_runtime (options, FRIDA_SCRIPT_RUNTIME_V8); script = frida_session_create_script_sync (session, "Interceptor.attach(Module.getExportByName('kernel32.dll', 'CreateFileW'), {\n" " onEnter(args) {\n" " console.log('[*] CreateFileW(\"' + args[0].readUtf16String() + '\")');\n" " }\n" "});\n" "Interceptor.attach(Module.getExportByName('kernel32.dll', 'CloseHandle'), {\n" " onEnter(args) {\n" " console.log('[*] CloseHandle(' + args[0] + ')');\n" " }\n" "});", options, &error); g_assert (error == NULL); g_clear_object (&options); g_signal_connect (script, "message", G_CALLBACK (on_message), NULL); frida_script_load_sync (script, &error); g_assert (error == NULL); g_print ("[*] Script loaded\n"); if (g_main_loop_is_running (loop)) g_main_loop_run (loop); g_print ("[*] Stopped\n"); frida_script_unload_sync (script, NULL); frida_unref (script); g_print ("[*] Unloaded\n"); frida_session_detach_sync (session); frida_unref (session); g_print ("[*] Detached\n"); } else { g_printerr ("Failed to attach: %s\n", error->message); g_error_free (error); } frida_unref (local_device); frida_device_manager_close_sync (manager); frida_unref (manager); g_print ("[*] Closed\n"); g_main_loop_unref (loop); return 0; }