저는 Android 보안에 관심이있는 학생입니다. baksmali 및 smali를 사용하여 APK 파일을 수정하려고했습니다. 그러나 모바일에서 리 패키지 된 앱을 실행할 수 없습니다. 아이콘을 클릭하면 “안타깝게도 테스트가 중지되었습니다”라는 메시지가 표시되고 존재합니다. (앱의 아이콘조차 변경되었는데, 이제는 앱의 오래된 실제 화려한 아이콘 대신 기본 안드로이드 아이콘이 보입니다.)
그 이유는 무엇일까요? 사실 저는 apk 파일의 코드를 수정하지 않았습니다. 방금 apk의 압축을 풀고 dex 파일을 가져온 다음 baksmali.jar
를 사용하여 smali로 변환 한 다음
. 마지막으로 압축 및 서명했습니다.
자세한 작업 :
-
apk 파일 압축 해제
$ Unzip test.apk
-
1classes.dex1을 smali로 변환
$ baksmali -x classes.dex -o smaliClasses
-
클래스를 다시
classes.dex
로 변환했습니다 (이전classes.dex
대체, 사실 smali 파일에 새 코드를 추가하지 않았습니다. . 먼저 작동하는지 알고 싶었습니다).$ smali smaliClasses -o classes.dex
-
모든 파일을
test.zip
$ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc
-
test.zip
이름을$ mv test.zip test.apk
이제 APK에 다시 서명해야한다고 생각합니다. 잘못된 경우 수정 해주세요. 여기.
수정 됨
:
-
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
-
새로운 리 패키징 된 APK를 설치하려고했습니다. adb 셸 사용. Adb 쉘이 성공적으로 설치되었음을 보여줍니다. 하지만 모바일에서는 리 패키지 된 앱을 실행할 수 없습니다. 클릭하면 앱이 다운됩니다. “안타깝게도 테스트가 중지되었습니다.”라고 표시됩니다.
리 패키징 된 앱이 실행되지 않는 이유는 무엇입니까? 여기서 누락 된 내용을 이해할 수 없습니다.
편집 됨 :
apktool을 사용하여 동일한 앱을 다시 패키징하려고했습니다. 나는 그것을 사용하여 smali 파일을 추출하고 다시 패키징했습니다. 그러나 재 패키징이 baksmali, smali, zip 및 signapk에서 작동하지 않는 이유는 무엇입니까? 이 절차에서 압축이 실제 문제입니까? 앱을 압축하고 원래 apk 파일과 비교하여 .apk로 이름을 변경하면 앱의 크기가 크게 줄어드는 것을 볼 수 있습니다.
댓글
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을 실행합니다.
단계 :
- 압축 해제
$ unzip test.apk
- Baksmali
$ baksmali classes.dex -o smaliClasses
- Smali
$ smali smaliClasses -o classes.dex
- Zip -r
$ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
- Jarsign
$ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
- Zipalign
$ zipalign -v 4 test-patched.apk final-apk.apk
- 이익 🙂
답변
평판이므로 여기에 게시하겠습니다.
apktool을 사용하여 작업이 올바르게 완료되었으므로 zip 프로세스에 문제가있는 것 같습니다.
이후 앱을 다시 패키징하면 새 APK의 콘텐츠가 원래 APK의 콘텐츠와 동일한 지 (파일 이름 및 구조에 관한 한) 확인할 수 있습니까?
편집 : 또한 파일이 .dex 파일, baksmali에서 -x 옵션이 필요하지 않다고 생각합니다.
EDIT2 : 재 패키징 할 때 zip 파일에 META-INF 디렉터리를 포함 할 필요가 없습니다. 서명 할 때 생성됩니다. he file.
Answer
디오 덱스 옵션 “-x”를 사용할 필요가 없습니다. odex. dex 파일에서 baksmali를 실행하십시오. apktool을 사용하여 모든 것을 풀거나 포장 할 수도 있습니다.이 방법이 더 쉽다고 생각합니다.
답변
-
파일 크기가 줄어든 이유는 무엇입니까?
apktool
가 재 컴파일하는 동안 파일을 최적화했기 때문입니다. -
왜 다운 되었나요?
가능한 충돌 원인 :
-
모든 단계를 올바른 순서로 수행 할 수 없습니다.
-
응용 프로그램에 파일 크기에 대한 CRC 검사.
-
도구 GUI로 완전히 자동화되었습니다. 최신 Android 프레임 워크로 업데이트되어 리소스 디 컴파일 오류가 없으며 더 나은 취급.
https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0
그리고 Android 앱 반전에 대한 Tuts 및 APK 수정 / 처리에 관한 모든 기본 정보를 포함합니다.
Answer
Anroid apps RE에 관심이 있다면 정기적으로 사용할 수있는 더 나은 도구를 찾을 수 있습니다.
p>
글쎄, 도구 중 하나는 Android Cracker Kit (내가 개발)로 필요한 모든 것을 제공합니다. Android Cracker Kit (ACK) :
댓글
- 깨진 링크. 수정 해주세요.
- 여기 : forum.exetools.com/showthread.php?t=16538
- @raypixar : 링크가 끊어지지 않고 느립니다.
답변
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에 있습니다.
baksmali -x option
)하고 있습니까? 이 옵션을 수행하고 있으므로 " bootclasspath "를 제공하지 않고 ' dex 파일로 다시 변환 할 수없는 이상한 스 말리 코드를 얻을 것입니다. 또한 압축하기 전에 META-INF 폴더를 제거하고 모든 내용이 포함 된 디렉토리 내에서zip -r unsigned.apk *
를 시도하십시오. 그래도 충돌이 발생하면 logcat 출력을 게시 해보세요.