Friday, May 14, 2010

Android APK Reverse Engineering

Android apk file을 reverse해서 Resource나 Src를 수정하는 방법이 있다.
http://code.google.com/p/android-apktool/ 에 open source project가 진행중이며, apk를 풀고 다시 빌드하는 것이 가능하다.

1. 해당 사이트에서 apktool을 다운로드하고 기재된 install방법으로 설치한다.
2. apk 디코딩
>apktool d -d name.apk out
3. out 폴더에 있는 source file(dalvik bytecode)과 resource file을 수정한다.
4. apk 빌드
>apktool b -d out
5. 위까지 수행하게 되면 out/dist/out.apk 가 생성되며 이 out.apk를 sign해주면 완료.

Sign방법은 http://developer.android.com/guide/publishing/app-signing.html 를 참고하면 된다.

참고:
1. leehack이 사용한 Sign관련 command.
C:\Sun\SDK\jdk\bin\jarsigner -verbose -keystore E:\Works\Android\Android_2.1_Library\debug.keystore out.apk androiddebugkey
password: android

2. Dalvik Byte 코드에 관련된 문서.
Dalvik opcode list: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Dalvik bytecode?: http://pallergabor.uw.hu/common/understandingdalvikbytecode.pdf

7 comments:

  1. interesting stuff.

    ReplyDelete
  2. If you want it, i can translate for you :)

    ReplyDelete
  3. 안드로이드 게임어플 수정가능하신지요?

    ReplyDelete
  4. 게임들은 대부분 native로 만들고 있는 것으로 알고 있습니다.
    apk를 리버싱 해서 나온 so file을 다시 dissembler 등을 이용해서 수정하면 가능하겠지요.
    so파일까지는 손대본적이 거의 없어서 자세한 설명은 드리기 어려울 것 같네요 ^^

    ReplyDelete
  5. 안녕하세요 과장님.

    Reverse engineering 검색해서 들어왔습니다.
    근데 apk 에서 java 를 풀어내지는 못하네요?

    ReplyDelete
    Replies
    1. 오래간만이네요 ^^ 잘 지내시죠.
      오래된 포스팅이라 툴들을 새로 업데이트 하셔야 할꺼예요.
      apk에서 java를 풀어낸다는건 jar를 java로 decoding하고 싶으신거죠?

      요즘은 리버싱을 별로 안해봐서 모르겠는데 apk에서 jar로 꺼내는 툴이 있었던 것으로 기억합니다.
      그러면 인터넷에 많이 있는 jd-gui같은 툴로 열어보면 코드 구경도 가능하죠.
      다만 수정후 리패키징은 안될꺼예요. 리패키징이 필요하신 경우는 apktool을 이용해서 bytecode로 풀어낸 후 수정하여 다시 패키징을 해야 합니다.

      Delete
    2. 감사합니다 ㅎㅎ

      제가 해보고 안되면 또 답글로 물어볼게요~

      Delete