본문 바로가기

전체 글81

디버그 로그 내 정보 노출, 화면 강제 실행 인증단계 우회 1. 디버그 로그 내 정보 노출 shell에서 logcat 명령어를 치면 디버깅 로그 내에서 저장된 정보를 볼 수 있다. 개발하는 과정에서 로그를 찍어가며 확인하기 위해 넣고, 빼지 않고 그대로 출시했을 경우 확인된다. 2. 화면 강제 실행 인증단계 우회 패스워드 저장 후, 인증단계에서 패스워드가 틀리면 데이터를 볼 수 없고, 패스워드가 일치하면 저장되어있는 데이터들을 볼 수 있다. 이때 2번째 사진에서 하는 인증단계를 우회하여 패스워드가 달라도 데이터를 볼 수 있는지 진단한다. Manifest.xml 소스코드를 보면 exported 값이 true로 나타난다. exported가 true로 되어있다면 앱 외부에서의 접근이 가능다는 뜻이다. 이전 포스팅 중, injured.apk 분석할 때 잠깐 언급한 적 .. 2021. 11. 1.
Uncrackable Level 1 Uncrackable 은 Owasp에서 제공하는 모바일 어플리케이션이다. Uncrackable-Level1.apk를 다운받은 후, Nox 애뮬레이터에 Drag&Drop으로 설치한다. 1. Manifest.xml apk easy tool로 Uncrackable-Level1을 디컴파일 해주고 디컴파일된 파일 중, AndroidManifest.xml 파일을 열어보면 package명과 MainActivity를 알 수 있다. 상위루트 manifest에 있는 package : AndroidManifest.xml 파일의 루트 요소다. 나중에 프리다를 사용할 때 이 패키지명이 사용된다. 상위루트 activity에 있는 MainActivity : 액티비티 구성 요소를 선언한다. jadx로 어플리케이션을 분석할 때 Mai.. 2021. 11. 1.
함수, 배열 | 스택프레임 1. 함수, 배열 실습 내용 정리 1-1. 함수 call PRINT → PRINT 함수로 이동 1-2. 덧셈 함수 call ADD→ ADD 함수로 이동 1-3. 작은 값 구하는 함수 call MIN→ MIN 함수로 이동 어셈블리 JL: Operand 1 < Operand 2 일 때 점프 MIN 함수) eax와 ebx 비교 후, eax가 더 작으면 LABEL_1로 점프. eax가 더 크다면 ebx 값을 ecx에 옮긴 후, LABEL_2로 점프. 최종적으로 ecx 값 출력 1-4. 함수 안의 함수 call ADD → ADD 함수로 이동 → PRINT 함수로 이동 함수가 호출될 때마다 스택에 쌓이고, 함수가 끝나면 스택이 비워지면서 또 다른 함수로 스택이 채워진다. 1-5. 배열 WORD: 2byte DWOR.. 2021. 10. 18.
어셈블리, 레지스터 정리 1. 어셈블리어 PUSH: 스택에 값을 저장 POP: 스택에서 값을 뺌 CALL: 지정된 주소의 함수 호출 INC: 값을 1 증가 DEC: 값을 1 감소 JMP: 지정된 주소로 점프 CMP: 주어진 두 값을 비교 JE: 조건 분기(같으면 점프) JNE: 조건 분기(같지 않으면 점프) MOV: 앞 오퍼랜드에 뒤 오퍼랜드의 값을 저장 LEA: 앞 오퍼랜드에 뒤 오퍼랜드의 주소 값을 저장 ADD: 두 개의 오퍼랜드를 더해서 앞의 오퍼랜드에 저장 SUB: 앞 오퍼랜드에서 뒤 오퍼랜드를 뺀 다음 앞의 오퍼랜드에 저장 2. 레지스터란? : CPU 내에서 자료를 보관하는 빠른 기억 장소로, 변수와 같은 역할로 메모리에서 연산을 할 때 사용 32bit 기준 EAX: 사칙연산 등 산술 연산 용도로 사용한다. 함수의 반환.. 2021. 10. 11.
AndroGoat.apk | 바이너리 패치 (smali) 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 1. 바이너리 패치 apk를 실행한 후 Binary Patching을 확인해보면 권한이 없다고 나타난다. 2. apk 디컴파일 apk easy tool을 사용해서 해당 apk 파일을 디컴파일 해준다. 2.1. package명 및 Binary Patching 탐지 영역 체크 디컴파일 후 나온 AndroidManifest.xml 파일을 통해 package명과 Binary Patching을 하는 영역을 확인한다. jadx로 위에서 확인한 영역을 보면 아래와 같은 코드가 있다. //owastp.sat.agoat.BinaryPatchingActivity if (this.isAdmin) { TextView textView.. 2021. 9. 20.
AndroGoat.apk | 에뮬레이터 탐지 (Frida) 초반 내용은 이전 글과 동일하다. https://lyk00331.tistory.com/97 AndroGoat.apk | 에뮬레이터 탐지 (smali) 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 1. 에뮬레이터 탐지 나는 녹스를 사용 중이기 때문에 원래는 "This is Emulator" 라고 떠야하지만, (아마도..) 해당 APK가 외국 lyk00331.tistory.com 위 게시물을 참고하여 2번까지 진행한 후, 이번 글은 Frida와 관련된 내용으로 3번부터 작성했다. 3. frida 서버 실행 adb shell에 접속한 후, 안드로이드 기기에 설치해둔 frida server를 실행한다. (이때 frida가 PC와 모바일에 동일 버전으로 설치되어있.. 2021. 9. 20.
AndroGoat.apk | 에뮬레이터 탐지 (smali) 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 1. 에뮬레이터 탐지 나는 녹스를 사용 중이기 때문에 원래는 "This is Emulator" 라고 떠야하지만, (아마도..) 해당 APK가 외국 앱이기 때문에 녹스를 탐지하지 않아서 "This is not Emulator"라는 문장이 나타난다. 어차피 목적은 탐지를 우회하는 것이기 때문에, is not Emulator → in Emulator 가 되도록 해본다. 2. apk 디컴파일 apk easy tool을 사용해서 해당 apk 파일을 디컴파일 해준다. 2.1. package명 및 Emulator Detection 탐지 영역 체크 디컴파일 후 나온 AndroidManifest.xml 파일을 통해 packag.. 2021. 9. 20.
AndroGoat.apk | SSL 피닝 (Frida) SSL 피닝을 위해서는 초기 설정이 필요하다. Burp 프록시 환경 구성이 되어있지 않다면 아래 링크를 따라 진행하길 바란다. https://lyk00331.tistory.com/84 안드로이드(Nox) Burp 프록시 환경 구성 | Burp 인증서 ※ Frida가 PC와 모바일(에뮬레이터 - Nox 사용)에 동일 버전으로 설치되어있다는 전제 하에 진행된다. 1. Burp 인증서 설치 1.1. Burp Suite에서 다음과 같이 진행한다. Next 버튼을 누른 후 나타나는 Select lyk00331.tistory.com 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 1. HTTP(S) 통신 및 SSL 피닝 1.1. HTTP 1.2. HTTPS 1.3. C.. 2021. 9. 20.
AndroGoat.apk | 루팅 탐지 (Frida) 초반 내용은 이전 글과 동일하다. https://lyk00331.tistory.com/93 안드로이드 AndroGoat.apk | 루팅 탐지 (smali) 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 나는 Nox 자체 설정에서 루팅을 켜놓았다. 1. 루팅 탐지 어플리케이션을 실행한 후, Root Delection에 들어가 루팅 탐지를 해 lyk00331.tistory.com 위 게시물을 참고하여 2번까지 진행한 후, 이번 글은 Frida와 관련된 내용으로 3번부터 작성했다. 3. frida 서버 실행 adb shell에 접속한 후, 안드로이드 기기에 설치해둔 frida server를 실행한다. (이때 frida가 PC와 모바일에 동일 버전으로 설치되어있어.. 2021. 9. 20.
AndroGoat.apk | 루팅 탐지 (smali) 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 나는 Nox 자체 설정에서 루팅을 켜놓았다. 1. 루팅 탐지 어플리케이션을 실행한 후, Root Delection에 들어가 루팅 탐지를 해보면 "Device is rooted"라며 제대로 탐지되는 것을 확인할 수 있다. 2. apk 디컴파일 apk easy tool을 사용해서 해당 apk 파일을 디컴파일 해준다. 2.1. package명 및 Root Detection 탐지 영역 체크 디컴파일 후 나온 AndroidManifest.xml 파일을 통해 package명과 Root Detection을 탐지하는 영역을 확인한다. jadx로 위에서 확인한 영역을 보면 아래와 같은 코드가 있다. // owasp.sat.ag.. 2021. 9. 17.
injured.apk | FLAG SEVEN - SQLITE 이 문제는 플래그와 패스워드를 입력해야한다. FlagSevenSqliteActivity 파일의 31~32번 라인을 보면 base64로 암호화되어있다. 디코딩하면 x ="sqlite" y = "f1ag-pa55" 이다. 코드를 보면 알 수 있듯이, DB를 생성하고 데이터가 기록이 된다. 191번 라인의 VGhlIGZsYWcgaGFzaCE= 를 base64로 디코딩해보면 The flag hash! 라는 값을 얻어낼 수 있다. 이것은 md5 암호화 방식이다. 2021. 9. 13.
injured.apk | FLAG SIX - LOGIN 3 FlagSixLoginActivity 파일을 확인해보면 73번 라인에서 k.a() 함수에서 반환된 값과 비교한다. k3FElEG9lnoWbOateGhj5pX6QsXRNJKh///8Jxi8KXW7iDpk2xRxhQ== 값이 인자로 넘어가는 것을 알 수 있다. k.a() 함수를 확인해보면 다음과 같다. 이 함수는 복호화 작업을 진행고, 함수를 frida와 연결하고 스크립트를 작성하여 암호화된 값을 넘기기 때문에 우리가 입력하는 값이 어떤 값이 되든 상관 없다. nox_adb shell 접속해서 frida 서버 실행 javascript 파일 제작 7번 라인에서는 k 클래스의 함수를 오버로드해서 클래스를 변수에 할당해준다. 디코딩 기능을 오버로드 해주고, 8번 라인에서 디코드를 진행할 문자열을 정의해준다. 이 .. 2021. 9. 13.