| | at : |
Archive

[HACKING] Android UnPacker - APK 난독화 풀기(APK Deobfuscation) 하훌 rwxr-xr-x 12 9/03/2015



[HACKING] Android UnPacker - APK 난독화 풀기(APK Deobfuscation)

Permission rw-r--r--
Author 하훌
Date and Time 9/03/2015
Label
License 크리에이티브 커먼즈 라이선스


예전에 Defcon22 에서 발표된 Android Unpacker입니다.

Install Android Unpacker
Git을 통해서 쉽게 설치가 가능합니다.
# git clone https://github.com/strazzere/android-unpacker.git

strazzere가 배포하는 Android Unpacker 에는 기본적으로 Defcon22 에서 발표된 Unpacker를 포함한
Dohoser, KissKiss Unpacker 를 포함하고 있습니다.

 - AHPL0 - Android Hacker Protection Level 0 + some blackphone stuff slides
 - gdb-scripts/ - Bash script for unpacking bangcle/secshell; requires gdb/adb
 - native-unpacker/ - Unpacker for APKProtect/Bangcle/LIAPP/Qihoo Packer that runs natively, no dependency on gdb
 - hide-qemu/ - Small hacks for hiding the qemu/debuggers, specifically from APKProtect

# cd android-unpacker 
# cd native-unpacker
# make 
# make install (Enble phone)

Show Error Message
Makefile:4: *** ANDROID_NDK_ROOT is undefined - ensure Android NDK is properly configured.  멈춤.

위 에러를 해결하기 위해선 Android NDK 설치 후 ANDROID_NDK_ROOT 환경 변수를 설정해주시면 됩니다.

Android NDK 설치 관련 사항은 아래글을 참고해주세요.

[ANDROID] Android NDK 설치하기(Install Android NDK)


android-unpacker


이 android-unpacker 는 크게 3가지 기능으로 나눌 수 있습니다.

gdb-scripts/ - Bash script for unpacking bangcle/secshell; requires gdb/adb
bash script 로 구성된 secshell unpacker 입니다.

native-unpacker/ - Unpacker for APKProtect/Bangcle/LIAPP/Qihoo Packer that runs natively, no dependency on gdb
보편적으로 많이 쓰이는 APKProtect, Qihoo 등 여러 난독화 도구에 대한 Unpacker 입니다.

hide-qemu/ - Small hacks for hiding the qemu/debuggers, specifically from APKProtect
APKProtect 중 특이한 경우에 사용하는 UnPacker 입니다.

native-unpackecodeblack.netr

APKProtect, Qihoo 등 여러 난독화 도구를 풀 때 사용하는 Unpacker 입니다. 대부분 악성앱도 Qihoo나 APKProtect 를 적용하여 나타나고 있어 분석이 불편하기에, Unpacker 를 이용하여 좀 더 쉬운 형태로 분석을 진행할 수 있습니다.

일단 설치과정은 native-unpacker 로 이동하여 make 를 통해 설치해줍니다.

# cd native-unpaker
# make

이 중 NDK, NDK_ROOT 관련 에러가 나는데 이건 환경변수에 설정이 되어있지 않아 발생하는 문제입니다.
NDK 디렉토리를 에러에서 나타나는 환경변수명에 넣어주세요.

make 가 끝나면 lib 하단에 kisskiss 라는 파일이 생성됩니다. 이 파일은 ELF 헤더로 실행 파일이며 리눅스상에서는 실행할 수 업고, Android Device에 넣은 후 android shell 로 실행하여야 동작합니다.

adb shell 진입 후 파일을 넣어줍니다.
# adb connect ***.***.***.*** 
# adb pull kisskiss /system/xbin/

여기서 read-only file system으로 안넣어질 수 있는데 이부분은 remount로 해결 가능합니다.
아래 블로그 참조해주세요.
(http://aroundck.tistory.com/43)

이후 adb shell 에서 kisskiss 명령과 pid 를 적어주면 unpacking 이 시작됩니다.

# kisskiss 444

gdb-script


# ./playdead.sh com.package.name.to.unpack
# ./playnice.sh com.packeage.name.to.unpack

Unpack 과정은 간단합니다. dead, nice로 구성된 스크립트를 실행하여 Unpacking 이 가능합니다.
단 몇가지 조건이 있는데, root 권한과 APK 설치 및 구동 중에만 가능합니다.

구동되는 APK를 ps 명령을 통해 pid 를 확인한 후 해당 pid를 기입하여 Unpacking 합니다.

{Android}# ps | grep target.APK.name
..snip..
~~ 1089(target pid)

# ./playdead.sh 1089
Attempting to find memory address for 1089 inside 1089

써볼만한 좋은 샘플은 안보이네요.. :(

**Usage:**

1. Ensure you have the gdb binary pushed to /data/local/tmp/ and the baksmali/smali and frameworks set up like the scripts references (or change the script).
Also ensure you only have one device connected and accessable to adb.
The application you wish to unpack should be installed and running.
<pre>
$ ./playdead.sh com.package.name.to.unpack
</pre>

2. Reverse!

This isn't really a good script, or the best way. Though I wanted to ensure people might have a decent example of getting this type of scripting/unpacking type working.


Playnice - Secshell unpacking script
--------
Works almost identically to playdead with similar assumptions,
but scans for a DEX header instead of ODEX, and uses gdb find instead of examine.

**Usage:**

<pre>
$ ./playnice.sh com.package.name.to.unpack
</pre>


Reference

https://github.com/strazzere/android-unpacker



Share







HAHWUL
HACKING | PENETRATION-TEST | CODING
HACKERONE : GIT : 0DAY-TODAY : EXPLOIT-DB : PACKETSTORM
GOOGLE+ | HAHWUL@GMAIL.COM | TWITTER
WWW.HAHWUL.COM




댓글 12개:

  1. 에러메시지 나와서 ndk설치하고 ANDROID_NDK_ROOT 환경변수 잡았는데도 설치가 잘 안되는데 혹시 좀 더 자세한 설명가능할까요?

    답글삭제
  2. 혹시 어떤 에러가 발생하는지 알 수 있을까요?
    저도 보고 찾아봐서 해결해나가는 형태여서요. 정보가 좀 필요할 것 같습니다.

    답글삭제
  3. 윈도우즈 환경에서 해볼 수 없는건가요..??

    답글삭제
    답글
    1. 컴파일 자체는 리눅스에서 하셔야 될 것 같아요. 윈도우에서 MInGW로 될 것 같기도 한데 직접 해보지는 않아서 확실하진 않습니다. 따로 VM 구성하셔서 컴파일 후 안드로이드 디바이스에 넣어서 사용하시면 되니 한번만 컴파일 해주시면 될거에요 ^^

      삭제
    2. 질문드리고 싶은게 많은데.. 따로 쪽지나 메일을 알수 있을까요?

      삭제
    3. 글 하단에 보시면 메일 적혀있습니다~ 문의주시면 최대한 답변드릴게요.
      (hahwul at gmail.com)

      삭제
    4. Proguard가 적용된 apk 파일도 복호화가 가능한가여..??

      삭제
    5. 일단 위에 올려드린 스크립트로는 안되는것으로 알고 있습니다.
      다만 가능한 방법은 있을 것 같네요. 조금 된 자료이긴 하나 예전에 defcon22 pt 자료 중 proguard 관련해서 자료가 있긴하네요.

      https://www.defcon.org/images/defcon-22/dc-22-presentations/Strazzere-Sawyer/DEFCON-22-Strazzere-and-Sawyer-Android-Hacker-Protection-Level-UPDATED.pdf

      확실하진 않지만.. 느낌적인데 찾아보면 복호화 가능한 방법이 분명 있을거에요. 알아보고 혹시 정보 찾으면 공유드릴게요 :)

      삭제
    6. 감사합니다 (--)(__)(--) 만들고 싶은 어플이 있는데 ㅜㅜ 난독화되어잇어서 기능확인이 쉽지가 않네영 ㅜㅜ

      삭제
    7. 아무래도 그걸 방지하기 위해서 사용하는 기법들이니깐요 ㅎㅎㅎ
      디컴파일이 안되는 경우인가요? 아니면 디컴파일 후 코드가 변환된 케이스인가요? 궁금하네요 : )

      삭제
    8. 디컴파일 후 코드가 변환된 케이스입니다 ㅜ
      디컴파일까지는 했는데 java 소스 부분이 Proguard가 적용이 되서 메서드 기능들이나, 변수이름들 클래스이름들이 변경되거나 숨겨져 있어서 분석이안되더라고요 ㅜㅜ Proguard 복호화된 상태면 필요한 기능들만 골라서 쓸수잇을텐데 ㅜㅜ

      삭제
    9. 아쉽네용.. 디컴파일 자체가 안되는 경우는 실행단에서 분석해서 뽑아낼 수 있다고 들었던 것 같아요.
      아무래도 Proguard가 튼튼한편이다 보니.. ㅜㅜ
      (악성코드 분석할 때 많이 느꼈지만 좀 짜증나요..ㅋㅋ)

      따로 좀 알아봤는데, 별다른 정보가 들어오진 않네요.

      삭제