본문 바로가기

모바일/보안

(12)
smali : 변조 시 삽입할 수 있는 간단한 코드 1. so 라이브러리 로드 const-string v0, "so_file_name" invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V 2. 로그 출력 .local v0, "Log":Ljava/lang/String; const-string v1, "hack" //출력할 문자열 혹은 레지스터 invoke-static {v1, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I 3. sleep const-wide/16 v2, 0xa // 0xa = 10 invoke-static {v2, v3}, Ljava/lang/Thread;->sleep(J)V 4. 토스트 메시..
Frida : 기본 사용법 준비 easy_install-3.7 를 이용해서 frida, frida-tools 설치 frida 버전 && 기기의 아키텍쳐 버전에 맞는 frida-server 다운로드 및 기기 내부로 복사 > frida.exe --version > adb shell getprop ro.product.cpu.abi 버전 arm 32bit arm 64bit x86 x86-64 MEMU 4.4 O MEMU 5.1 O MEMU 7.1 NOX 5.1.1 O NOX 기기에서 frida-server 권한을 777로 변경 후 실행하고 frida-ps 를 이용해 연결됐는지 확인한다. 프로세스 리스트가 출력되면 연결 완료 > frida-ps.exe -U > frida-ps.exe -D 192.168.111.222:5555 (원격) > ..
Frida : 안티디버깅 우회 ptrace lib.so에서 export하고 리눅스, 유닉스 환경에서 프로세스 디버깅에 사용되는 함수이다. (gdb도 ptrace 이용함) ptrace라는 이름의 26번 커널 시스템콜이 내부적으로 사용된다. # cat /usr/include/asm/unistd.h | grep ptrace #define __NR_ptrace 26 ptrace(PTRACE_ATTACH, ... ); // process에 Attach해서 작업. Dettach 하기 전까진 타겟은 STOP 상태이다. ptrace(PTRACE_GETREGS, ... ); // 대상 process의 레지스터 목록 가져오기 return 값은 ptrace(PTRACE_PEEKDATA, ... ); // 데이터 쓰기 (레지스터 크기만큼씩 읽고 쓰기가 가..
안드로이드 소스 난독화 종류 소스 난독화/암호화 종류 1. Renaming: 식별자 전환. 클래스/메소드의 이름을 a, b, c... 등 의미없는 이름으로 대체 2. Control Flow: 제어흐름 변환. A->B 와 같던 실행순서를 A->C->B 처럼 C구문을 삽입하는 기법 3. String Encryption: 문자열 암호화. 문자열을 암호화된 문자열로 대체하고 사용시 이를 치환 4. API Hiding: API 은닉. 특정 라이브러리 또는 메소드 호출을 Reflection으로 대체하여 숨긴다. 5. Class Encryption: 파일내용 전체를 암호화하여 저장해 두었다가 동적으로 복호화, 클래스 로더로 로딩 6. DEX Encryption: Dalvik Executable 파일 자체를 암호화 한다. Proguard (무료)..