baksmali 및 smali를 사용하여 APK 파일 재 패키징

저는 Android 보안에 관심이있는 학생입니다. baksmali 및 smali를 사용하여 APK 파일을 수정하려고했습니다. 그러나 모바일에서 리 패키지 된 앱을 실행할 수 없습니다. 아이콘을 클릭하면 “안타깝게도 테스트가 중지되었습니다”라는 메시지가 표시되고 존재합니다. (앱의 아이콘조차 변경되었는데, 이제는 앱의 오래된 실제 화려한 아이콘 대신 기본 안드로이드 아이콘이 보입니다.)

그 이유는 무엇일까요? 사실 저는 apk 파일의 코드를 수정하지 않았습니다. 방금 apk의 압축을 풀고 dex 파일을 가져온 다음 baksmali.jar를 사용하여 smali로 변환 한 다음

. 마지막으로 압축 및 서명했습니다.

자세한 작업 :

  1. apk 파일 압축 해제

    $ Unzip test.apk 
  2. 1classes.dex1을 smali로 변환

    $ baksmali -x classes.dex -o smaliClasses 
  3. 클래스를 다시 classes.dex로 변환했습니다 (이전 classes.dex 대체, 사실 smali 파일에 새 코드를 추가하지 않았습니다. . 먼저 작동하는지 알고 싶었습니다).

    $ smali smaliClasses -o classes.dex 
  4. 모든 파일을 test.zip

    $ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc 
  5. test.zip 이름을

    $ mv test.zip test.apk 

이제 APK에 다시 서명해야한다고 생각합니다. 잘못된 경우 수정 해주세요. 여기.

수정 됨

:

  1. java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk

  2. 새로운 리 패키징 된 APK를 설치하려고했습니다. adb 셸 사용. Adb 쉘이 성공적으로 설치되었음을 보여줍니다. 하지만 모바일에서는 리 패키지 된 앱을 실행할 수 없습니다. 클릭하면 앱이 다운됩니다. “안타깝게도 테스트가 중지되었습니다.”라고 표시됩니다.

리 패키징 된 앱이 실행되지 않는 이유는 무엇입니까? 여기서 누락 된 내용을 이해할 수 없습니다.

편집 됨 :

apktool을 사용하여 동일한 앱을 다시 패키징하려고했습니다. 나는 그것을 사용하여 smali 파일을 추출하고 다시 패키징했습니다. 그러나 재 패키징이 baksmali, smali, zip 및 signapk에서 작동하지 않는 이유는 무엇입니까? 이 절차에서 압축이 실제 문제입니까? 앱을 압축하고 원래 apk 파일과 비교하여 .apk로 이름을 변경하면 앱의 크기가 크게 줄어드는 것을 볼 수 있습니다.

댓글

  • 자세한 내용은 logcat을 확인해야하며 가능하면 충돌 로그도 게시하십시오.
  • @xDragonZ , 게시물을 수정했습니다. 이번에는 " adb install "을 사용하여 설치를 시도하고 signapk.jar를 사용하여 서명했습니다. 이번에는 앱이 휴대 전화에 설치되었습니다. 하지만 앱을 클릭하면 " " 앱이 중지되었습니다. ". 내가 알아 차린 한 가지는 재 포장 된 apk의 크기가 원래보다 작다는 것입니다. 그 변경의 zip 도구 이유는 크기입니까? 앱이 충돌하는 이유에 대한 단서가 있습니까? 이에 대한 로그는 어떻게 얻습니까? 감사합니다.
  • 파일도 zipalign해야합니까?
  • 고의로 디오 덱싱 (baksmali -x option)하고 있습니까? 이 옵션을 수행하고 있으므로 " bootclasspath "를 제공하지 않고 ' dex 파일로 다시 변환 할 수없는 이상한 스 말리 코드를 얻을 것입니다. 또한 압축하기 전에 META-INF 폴더를 제거하고 모든 내용이 포함 된 디렉토리 내에서 zip -r unsigned.apk *를 시도하십시오. 그래도 충돌이 발생하면 logcat 출력을 게시 해보세요.
  • 5 개 답변 중 하나도 허용되지 않나요?

Answer

저는이 목적을 위해 apktool를 사용하고 APK를 디 컴파일하고 재 컴파일하는 데 짧은 셸 스크립트 쌍을 사용합니다.

  • 디 컴파일 -apk

    #!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <file.apk>" exit -1 fi fn=${1%.apk} target_apk=$fn.apk apktool d -f "$target_apk" -o smali echo "Done." 
  • 컴파일 -apk

    #!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <original.apk>" exit -1 fi fn=${1%.apk} rm -f $fn.unaligned.apk $fn.smali.apk rm -rf smali/build apktool b -f smali/ -o $fn.unaligned.apk jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android $fn.unaligned.apk androiddebugkey zipalign -v 4 $fn.unaligned.apk $fn.smali.apk rm -rf smali/build 

apktool를 사용하면 모든 리소스를보고 편집 할 수 있다는 장점이 있습니다. 디코딩 된 매니페스트 파일로.

댓글

  • 이 방법은 저에게 적합한 유일한 방법입니다. 저는 ' 수십 번 시도했지만 효과가 없었습니다. 감사합니다.

답변

smali / baksmali를 가지고 놀다가 제대로 작동했습니다. 압축 할 때 재귀 플래그를 사용하지 않은 것 같습니다 . 이로 인해 res 폴더가 비워져 충돌이 발생했습니다. 또한 APK에 서명 한 후 zipalign을 실행합니다.

단계 :

  1. 압축 해제
    $ unzip test.apk
  2. Baksmali
    $ baksmali classes.dex -o smaliClasses
  3. Smali
    $ smali smaliClasses -o classes.dex
  4. Zip -r
    $ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
  5. Jarsign
    $ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
  6. Zipalign
    $ zipalign -v 4 test-patched.apk final-apk.apk
  7. 이익 🙂

답변

평판이므로 여기에 게시하겠습니다.

apktool을 사용하여 작업이 올바르게 완료되었으므로 zip 프로세스에 문제가있는 것 같습니다.

이후 앱을 다시 패키징하면 새 APK의 콘텐츠가 원래 APK의 콘텐츠와 동일한 지 (파일 이름 및 구조에 관한 한) 확인할 수 있습니까?

편집 : 또한 파일이 .dex 파일, baksmali에서 -x 옵션이 필요하지 않다고 생각합니다.

EDIT2 : 재 패키징 할 때 zip 파일에 META-INF 디렉터리를 포함 할 필요가 없습니다. 서명 할 때 생성됩니다. he file.

Answer

디오 덱스 옵션 “-x”를 사용할 필요가 없습니다. odex. dex 파일에서 baksmali를 실행하십시오. apktool을 사용하여 모든 것을 풀거나 포장 할 수도 있습니다.이 방법이 더 쉽다고 생각합니다.

답변

  • 파일 크기가 줄어든 이유는 무엇입니까?

    apktool가 재 컴파일하는 동안 파일을 최적화했기 때문입니다.

  • 왜 다운 되었나요?

    가능한 충돌 원인 :

    1. 모든 단계를 올바른 순서로 수행 할 수 없습니다.

    2. 응용 프로그램에 파일 크기에 대한 CRC 검사.

도구 GUI로 완전히 자동화되었습니다. 최신 Android 프레임 워크로 업데이트되어 리소스 디 컴파일 오류가 없으며 더 나은 취급.

https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0

그리고 Android 앱 반전에 대한 Tuts 및 APK 수정 / 처리에 관한 모든 기본 정보를 포함합니다.

https://www.dropbox.com/s/nkkmp4ait71kjku/Android%20Application%20Reversing%20Via%20Android%20Mobile.pdf?dl=0

Answer

Anroid apps RE에 관심이 있다면 정기적으로 사용할 수있는 더 나은 도구를 찾을 수 있습니다.

p>

글쎄, 도구 중 하나는 Android Cracker Kit (내가 개발)로 필요한 모든 것을 제공합니다. Android Cracker Kit (ACK) :

댓글

답변

APK Editor Pro를 사용하여 편집합니다. 내 Android 기기에서 바로 APK!

https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro

댓글

  • 좋은 팁. 생성 된 apk가 위의 (de) 컴파일 스크립트 (왜?)로 올바르게 설치되지 않지만 classes.dex를 대체하여 설치했습니다.

Answer

4 단계. 재귀 적으로하는 것을 잊었습니다. 압축하면 / res에있는 파일을 복사하지 않습니다. -r 옵션을 추가합니다.

zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc 

6 단계. 서명 할 필요가 없습니다. META-INF 디렉토리로 이미 apk에 다시 포장했기 때문입니다. 서명 정보는 META-INF에 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다