일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- android inject
- Obfuscator
- Linux custom packer
- initial-exec
- tracerpid
- OSR
- LLVM
- pthread
- thread local storage
- Linux packer
- Android
- v8 tracing
- so inject
- 안티디버깅
- linux debugging
- apm
- pinpoint
- uftrace
- on stack replacement
- TLS
- Injection
- v8 optimizing
- anti debugging
- linux thread
- LLVM 난독화
- on-stack replacement
- tracing
- LLVM Obfuscator
- 난독화
- custom packer
- Today
- Total
Why should I know this?
Android에서 so파일 injection 하는 쉬운 방법 본문
Android에서 특별한 목적으로 shared object를 injection하고자 할 때, 사용할 수 있는 가장 쉬운 방법이다. 아래처럼 app_main.cpp 소스를 수정하여 zygote가 app_process를 실행하기 전에 LD_PRELOAD 환경을 지정하여 shared object를 우선적으로 로드하도록 만들 수 있고 여러 재밌는 행위를 할 수 있다.
frameworks/base/cmds/app_process/app_main.cpp:166
char value[PROPERTY_VALUE_MAX];
property_get("ro.kernel.qemu", value, "");
bool is_qemu = (strcmp(value, "1") == 0);
if ((getenv("NO_ADDR_COMPAT_LAYOUT_FIXUP") == NULL) && !is_qemu) {
int current = personality(0xFFFFFFFF);
if ((current & ADDR_COMPAT_LAYOUT) == 0) {
personality(current | ADDR_COMPAT_LAYOUT);
setenv("NO_ADDR_COMPAT_LAYOUT_FIXUP", "1", 1);
~ ALOGE("[%s : %d]", __FILE__, __LINE__);
~ for (int index=0;index<sizeof(argv);index++) {
+ ALOGE("%s", argv[index]);
+ }
+
+ const char* hooker = "/data/local/tmp/lib___.so";
+ if (access(hooker, F_OK) == 0) {
+ ALOGE("[%s : %d]", __FILE__, __LINE__);
+ char buf[128] = {0,};
+ sprintf(buf, "LD_PRELOAD=%s", hooker);
+ char* envp[] = {buf, NULL};
+ setenv("LD_PRELOAD", hooker, 1);
+ execv("/system/bin/app_process", argv);
+ return -1;
+ } else {
+ execv("/system/bin/app_process", argv);
+ return -1;
+ }
+
}
}
zygote keep old shared object information and copy that when forked. for that reason, if you change shared object that to be injected, must restart the zygote.
'Knowledge > Android' 카테고리의 다른 글
Android ndk 빌드시 디버깅 정보 유지 (3) | 2019.02.18 |
---|---|
Android AOSP kernel 빌드하기 (5) | 2019.02.18 |
Android 파헤치기 - Dex 메모리 로드 (0) | 2019.02.18 |
Android 파헤치기 - Launching Application (0) | 2019.02.18 |
Android 파헤치기 - ClassLoader (2) | 2019.02.18 |