[ 1탄 ] JEB로 tigerconnect.apk 분석

cryptosecurity.tistory.com/13?category=841778

 

[ Reversing ] JEB로 tigerconnect.apk 분석

1. JEB 실행하기 1) JEB, APK 설치 2) JAVA 설치 3) JEB 실행 4) 파일 - 열기 - 앱 선택 5) Project Explore에서 앱 더블클릭 -> bytecode 더블클릭 6) classese.dex 파일 보여줌 2. JEB로 apk 분석 4) Q..

cryptosecurity.tistory.com

 

 

[ tigerconnect.apk의 decrypt 구조화 ]

JEB 분석을 통해 찾은 tigerconnect.apk의 decrypt 구조화를 이용해서 데이터베이스를 복호화 해보자.

 

 

1. DB 복호화 소스코드 구현

-> 파이썬으로 AuthToken 구하기

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
from hashlib import pbkdf2_hmac
from Crypto.Cipher import AES
import base64
 
def decrypt(key, enc):
    cipher = AES.new(key, AES.MODE_ECB)
    dec = cipher.decrypt(enc)
    result = dec[:-1*dec[-1]]
    return result
 
salt = 'jQx+pvuo3TJ7aN9zPJnGPVTfIfrDG9uEkIHEVOZ6ez8='
ttkey01 = 'oum53H3VwmQoECodZfek7ckgo2qRrtta'
ttkey02 = 'USDNyIf90wXg4ifLTVFb//qRobxlJjqOaAPAn/HHxBV2AmCeLiBi2R4+RZvZjhzaHhFa+HQDdVnw z+/gzSU9Ug=='
 
salt2 = base64.b64decode(salt)
ttkey01_byte = ttkey01.encode()
ttkey02_decode = base64.b64decode(ttkey02)
 
secretkey = pbkdf2_hmac('sha1', password=ttkey01_byte, salt=salt2, iterations=1000, dklen=32)
print('secretkey :', base64.b64encode(secretkey).decode('utf-8'))
 
restsecret = decrypt(secretkey, ttkey02_decode)
print('restsecret :', restsecret)
 
authtoken = ttkey01_byte + bytes(b':'+ restsecret
print('authtoken :', authtoken)
cs

 

[ 실행 결과 ]

 

2. DB Browser for SQLCipher 

2.1 ) DB Brower for SQLCipher.exe 실행

 

2.2 ) 파일 - 데이터베이스 열기 - ttandroid.db

암호화가 걸려있는 것을 볼 수 있다.

 

2.3) 앞에서 구했던 AuthToken 값 입력

AuthToken = oum53H3VwmQoECodZfek7ckgo2qRrtta:UNql9sXWri3hSSt95vfhXbgoQNFaKLiMMGfcBx1p4YszBhCj

 

tigerconnect 데이터베이스 복호화 성공

 

 

 

[ Github 소스코드 파일 ]

github.com/K-subin/tigerconnect_DB_decrypt

'Digital Forensic > Reversing' 카테고리의 다른 글

[ Reversing ] JEB로 tigerconnect.apk 분석  (0) 2020.09.12
[ Reversing ] 리버싱이란?  (0) 2020.09.10

1. JEB 실행하기

1) JEB, APK 설치

 

2) JAVA 설치

 

3) JEB 실행

 

4) 파일 - 열기 - 앱 선택

 

5) Project Explore에서 앱 더블클릭 -> bytecode 더블클릭

 

6) classese.dex 파일 보여줌

 

 

2. JEB로 apk 분석

 

4) Q 눌러서 JAVA 코드로 변환

 

 

3. 의미있는 함수 찾기

3.1) AuthToken 구하기

  • decryptCipher()

getAuthToken() 반환

 

 

  • getAuthToken()

getAuthToken  =  [ RestKey : RestSecret ]

 

 

  • getString()

ttkey01의 String 얻는 함수

RestKey  =  ttkey01의 String

 

 

  • getSecureString()

RestSecret =  decrypt( ttkey02의 String )

 

 

  • decrypt()

v0 = RestKey

 

 

  • decrypt().a()

RestKey를 평문으로 받아 Secretkey 구하는 함수

 

 

  • decrypt().a().c()

 

Secretkey = PBKDF2-SHA1 ( restkey, salt, iteration=1000, keylen = 256 )

 

  • decrypt().a()

 

 

  • decrypt().a().a()

AES, ECB, PKCS5패딩, KEY=secretkey로 복호화를 정의하는 함수

 

 

  • decrypt()

decrypt(ttkey02)

1. ttkey02로 restkey 생성

2. restkey로 pbkdf-sha1 이용해서 secretkey 생성

3. 복호화  ->  AES, ECB, PKCS5, secretkey

4.  UTF-8로 디코딩해서 출력

 

 

 

 

  • getAuthToken()

Authtoken = [RestKey : RestSecret] = [ ttkey01의 String  : decrypt ( ttkey02의 String) ]

 

 

 

3.2 ) AuthToken을 이용해서 Secretkey 2 얻기

  • decryptCipher()

 

 

  • decryptCipher().c()

 

Secretkey2 = PBKDF2-SHA1 ( AuthToken, salt, iteration = 1000, keylen = 256 )

 

 

 

3.3) decryptCipher 구하기

  • decryptCipher()

 

 

  • decryptCipher().a()

 

 

  • decryptCipher()

 

 

4. tigerconnect.apk의 decrypt 구조화하기

1. 리버싱이란?

리버싱이란 장치 또는 시스템의 기술적인 원래를 이해하며 단점을 보완하고 새로운 아이디어를 추가시키는 일련의 작업을 말한다.

다른 말로, 일반적인 소프트웨어 제작 과정을 역행하는 과정이다.

 

2. 리버싱 과정

- 일반적인 소프트웨어 제작과정

           소스 코드 작성 -> 컴파일/링크 -> 실행 가능한 binary 파일

- 리버싱 과정

           binary 해석 (어셈블리) -> 프로그램 이해(소스코드 추측) -> ?

 

소프트웨어를 분석하거나, 자신이 제작한 소프트에어를 업데이트, 혹은 오류를 제거하거나 패치할 때 사용된다. 또한 악성코드 분석할 때도 사용된다.

 

3. 분석 종류

  • 정적 분석 = 바이너리를 실행하지 않고 분석, 코드 전체를 봐서 힘듦
  • 동적 분석 = 실행을 해서 나온 결과를 가지고 분석, 실행이 되는 것만 분석 가능
  • 행위 분석 = 동적과 정적 사이에 위치해서 동적 분석이긴 한데 어떤 행위를 하는지 빨리 알고 싶을 때 사용

 

4. JEB Decompiler

  • JEB는 안드로이드 애플리케이션과 네이티브 머신 코드를 위한 디스어셈블러 및 디컴파일러 소프트웨어이다. 
  • Dalvik 바이트 코드를 java소스코드로, 비트 머신 코드를 c소스코드로 디컴파일 한다.
  • 출력은 대화식이다.
  • 모바일 애플리케이션 분석 시 가장 많이 사용하는 디컴파일러이다.
  • 기본적으로 Manifest, Resource, Certificate, Assembly, Decompiled Java, Strings, Constants, Notes 기능을 제공한다.

+ Recent posts