Skip to content

Commit

Permalink
Port to modern Android versions and bump Frida (#4)
Browse files Browse the repository at this point in the history
  • Loading branch information
meme authored May 26, 2020
1 parent 155a30a commit a452c80
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 21 deletions.
12 changes: 6 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
host_arch := arm
host_compiler_triplet := armv7a-linux-androideabi18-
host_tool_triplet := arm-linux-androideabi-
host_cflags := -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb
host_ldflags := -Wl,--fix-cortex-a8
host_arch := arm64
host_compiler_triplet := aarch64-linux-android21-
host_tool_triplet := aarch64-linux-android-
host_cflags :=
host_ldflags := -landroid

ndk_toolchain_bindir := $(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/$(shell uname -s | tr '[A-Z]' '[a-z]')-$(shell uname -m)/bin

Expand All @@ -11,7 +11,7 @@ CFLAGS := -DANDROID -Os -Wall -fPIC -ffunction-sections -fdata-sections $(host_c
LDFLAGS := -fuse-ld=gold -Wl,--icf=all -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now $(host_ldflags)
STRIP := $(ndk_toolchain_bindir)/$(host_tool_triplet)strip --strip-all

frida_version := 12.6.17
frida_version := 12.9.4
frida_os_arch := android-$(host_arch)
frida_core_devkit_url := https://github.com/frida/frida/releases/download/$(frida_version)/frida-core-devkit-$(frida_version)-$(frida_os_arch).tar.xz
frida_gum_devkit_url := https://github.com/frida/frida/releases/download/$(frida_version)/frida-gum-devkit-$(frida_version)-$(frida_os_arch).tar.xz
Expand Down
11 changes: 2 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,12 @@ easily portable to all other OSes supported by Frida.

# Prerequisites

- Android NDK r17b
- Android NDK r21
- Rooted Android device

# Preparing the build environment

```sh
$ $ANDROID_NDK_ROOT/build/tools/make_standalone_toolchain.py \
--arch arm \
--api 14 \
--stl=libc++ \
--install-dir=./ext/toolchain
$ export PATH=$(pwd)/ext/toolchain/bin:$PATH
```
Point `$ANDROID_NDK_ROOT` to your NDK path.

# Running

Expand Down
29 changes: 23 additions & 6 deletions inject.c
Original file line number Diff line number Diff line change
@@ -1,38 +1,48 @@
#include <frida-core.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/xattr.h>

int
main (int argc, char * argv[])
{
int result = 0;
const char * path = "/data/local/tmp/android-inject-example/agent.so";
const char * context = "u:object_r:frida_file:s0";
FridaInjector * injector;
int pid;
GError * error;
guint id;

frida_init ();

if (argc != 2)
goto bad_usage;

pid = atoi (argv[1]);
if (pid <= 0)
goto bad_usage;

frida_init ();
frida_selinux_patch_policy ();

if (setxattr (path, XATTR_NAME_SELINUX, context, strlen (context) + 1, 0) != 0)
goto setxattr_failed;

injector = frida_injector_new ();

error = NULL;
id = frida_injector_inject_library_file_sync (injector, pid, "./agent.so", "example_agent_main", "example data", &error);
id = frida_injector_inject_library_file_sync (injector, pid, path, "example_agent_main", "example data", NULL, &error);
if (error != NULL)
{
fprintf (stderr, "%s\n", error->message);
g_error_free (error);
g_printerr ("%s\n", error->message);
g_clear_error (&error);

result = 1;
}

frida_injector_close_sync (injector);
frida_injector_close_sync (injector, NULL, NULL);
g_object_unref (injector);

frida_deinit ();
Expand All @@ -41,7 +51,14 @@ main (int argc, char * argv[])

bad_usage:
{
fprintf (stderr, "Usage: %s <pid>\n", argv[0]);
g_printerr ("Usage: %s <pid>\n", argv[0]);
frida_deinit ();
return 1;
}
setxattr_failed:
{
g_printerr ("Failed to set SELinux permissions\n");
frida_deinit ();
return 1;
}
}

0 comments on commit a452c80

Please sign in to comment.