How to debug Dalvik and ARM code together?

 

안드로이드 동적 디버깅 시, SO파일을 동적 디버깅해야 하는 경우가 종종 생깁니다. (사실상 거의 필수...)

 

IDA에서 classes.dex파일과 so파일을 같이 디버깅하는 법은 다음과 같습니다.

 

먼저 아이다 설치 위치(default : C:\Program Files\IDA 7.0)의 dbgsrv 폴더 내 android_server파일을 단말기에 업로드 후 실행시켜 줍니다.

ex)

$ adb push android_server /data/local/tmp

$ adb forward tcp:23946 tcp:23946

$ adb shell

$ su

$ chmod 777 /data/local/tmp/android_server

$ /data/local/tmp/android_server &

실행 후, 디버깅하려는 dex파일과 so파일을 각각 IDA를 통해 로드하고 종단점을 설정합니다.

classes.dex파일을 로드한 IDA의 [Debugger] - [Debugger options..] 내 다음 내용을 입력합니다.

Activity는 앱 처음 실행 시 로드되는 activity명을 입력해주시면 됩니다.

Process Start (F9)하여 앱 실행시키고 종단점을 설정한 부분에서 대기하는 것을 확인합니다.

so파일을 로드한 IDA로 돌아와서, debugger를 Remote ARM Linux/Android debugger로 변경합니다.

[Debugger] - [Process options..]의 Hostname을 설정합니다. (default : 127.0.0.1)

[Debugger] - [Attach Process]를 통해 디버깅하려는 앱 선택 후 다음과 같은 화면이 나타나면 왼쪽 상단의 start버튼을 클릭합니다.

dex파일을 로드한 IDA로 돌아와 F8버튼으로 so파일 로드하는 함수를 실행하면 Running이라는 알람이 출력됩니다.

So파일을 로드한 IDA로 돌아오면 기존에 설정한 종단점에서 대기하는 것을 확인할 수 있습니다.

 

출처 : https://www.hexblog.com/?p=809

 

IDA Dalvik debugger: tips and tricks – Hex Blog

One of the new features of IDA 6.6 is the Dalvik debugger, which allows us to debug Dalvik binaries on the bytecode level. Let us see how it can help when analysing Dalvik files. Encoded strings Let us consider the package with the encrypted strings: STRIN

www.hexblog.com

 

'Mobile' 카테고리의 다른 글

odex to dex  (0) 2020.05.08
ro.debuggable 변경을 통한 동적 디버깅  (2) 2019.09.23
DVIA (Binary Patching)  (0) 2019.09.03
Cydia Impactor 에러 모음  (1) 2019.09.03
DVIA (Jailbreak Detection 2 ... Frida)  (0) 2019.08.28

DVIA 앱의 [MENU] - [Binary Patching]을 풀어보겠습니다.

 

첫 화면이고, 여러 문제를 볼 수 있는데 Login Method 1 / Check For Jailbreak / Show alert / Kill Application이 있지만 Login Method 1만 풀이를 올리도록 하겠습니다. 사실 하나만 풀면 나머지도 다 풀 수 있는거라.. ;)

 

IDA를 통해 login 문자열이 들어간 함수를 확인한 결과 ApplicationPatchingDetailsVC loginMethod1Tapped:를 확인할 수 있었습니다.

 

사실 소스코드를 좀만 살펴보면 소스에 ID/PW가 노출되어 있지만, 목적은 이게 아니니까 넘어가서 비교 후 분기문이나 인증 성공 함수 호출하는 부분을 찾아보겠습니다.

 

해당 함수의 끝 부분에 분기문을 통해 인증 결과값으로 성공 혹은 실패 로직을 실행하고 있습니다.

그럼 분기문(B.EQ loc_100170C58)을 변조하여 인증실패일 경우 SuccessPage를 호출하는 것으로 Binary를 패치하겠습니다.

 

이 페이지에서 opcode의 hex값을 확인 할 수 있는데, BEQ는 000100, BNE는 000101인 것을 확인 할 수 있습니다.

 

다음과 같이 IDA에서 BEQ(000100)을 BNE(000101)로 변경해줍니다. 

 

IDA에서 확인하면 BNE로 변경된 것을 확인 할 수 있습니다.

다만.. IDA에서 Binary Patch가 안되서 Hopper라는 툴을 많이 이용한다고 하시는데요(IDA에서도 되나요?) 저는 그냥 IDA에서 분석하고 헥스에디터로 헥스값을 변경해 줍니다... (Hopper는 유료입니다)

 

IPA파일을 zip파일로 확장자 변경 후, 실제 실행파일을을 헥스에디터 프로그램으로 열어서 원하는 바이너리를 변경하고 Cydia Impactor로 재설치 해주세요

 

재설치 후에 임의의 문자열(aa/aa)를 입력한 결과,

 

인증 우회하여 로그인에 성공한 화면을 확인할 수 있습니다.

 

※ OPCode 출처 : https://opencores.org/projects/plasma/opcodes

'Mobile' 카테고리의 다른 글

ro.debuggable 변경을 통한 동적 디버깅  (2) 2019.09.23
IDA DEX,SO 동적디버깅  (0) 2019.09.23
Cydia Impactor 에러 모음  (1) 2019.09.03
DVIA (Jailbreak Detection 2 ... Frida)  (0) 2019.08.28
DVIA (Jailbreak Detection ... Frida)  (3) 2019.08.27

case 1)

Error - installation.cpp:42 The WatchKit 2.0 app being installed contains an invalid application executable

solution - Open .ipa as zip, delete directory Payload/xxx.app/Watch, save

 

에러 발견 시 마다 업데이트 예정...

'Mobile' 카테고리의 다른 글

IDA DEX,SO 동적디버깅  (0) 2019.09.23
DVIA (Binary Patching)  (0) 2019.09.03
DVIA (Jailbreak Detection 2 ... Frida)  (0) 2019.08.28
DVIA (Jailbreak Detection ... Frida)  (3) 2019.08.27
iOS 12 - 12.1.2 Jailbreak(with. Unc0ver)  (1) 2019.07.10

+ Recent posts