Web,Mobile/Tool

[apktool] appguard 난독화 앱 디컴파일 및 리패키징 오류 해결

LimeLee 2021. 3. 11. 10:09

디컴파일 오류 : brut.directory.DirectoryException: Error copying file: assets

 

java -jar apktool_2.5.0.jar d test.apk -o test
I: Using Apktool 2.5.0 on test.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\home\AppData\Local\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
Exception in thread "main" brut.androlib.AndrolibException: brut.directory.DirectoryException: Error copying file: assets
at brut.androlib.Androlib.decodeRawFiles(Androlib.java:158)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:179)
at brut.apktool.Main.cmdDecode(Main.java:179)
at brut.apktool.Main.main(Main.java:82)
Caused by: brut.directory.DirectoryException: Error copying file: assets
at brut.directory.DirUtil.copyToDir(DirUtil.java:94)
at brut.directory.AbstractDirectory.copyToDir(AbstractDirectory.java:208)
at brut.androlib.Androlib.decodeRawFiles(Androlib.java:145)
... 3 more
Caused by: brut.directory.DirectoryException: Error copying file: agconfig
at brut.directory.DirUtil.copyToDir(DirUtil.java:91)
at brut.directory.DirUtil.copyToDir(DirUtil.java:63)
at brut.directory.AbstractDirectory.copyToDir(AbstractDirectory.java:198)
at brut.directory.DirUtil.copyToDir(DirUtil.java:79)
... 5 more
Caused by: java.io.FileNotFoundException: test\assets\agconfig (지정된 경로를 찾을 수 없습니다)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at brut.directory.DirUtil.copyToDir(DirUtil.java:87)
... 8 more

 

해결

 

윈도우에서 UTF-8문자에 대응하는 적절한 문자 집합이 없음 -> 리눅스(wsl2)에서 디컴파일 시도하여 해결

위 케이스에선 비표준 문자로 이루어진 파일은 아니였고 파일 명이 " " (공백 2개) 였는데 윈도우에서는 공백으로만 되어있는 파일이나 디렉터리를 인식하지 못하는 듯 하다.

https://github.com/iBotPeaches/Apktool/issues/1129

 

brut.directory.DirectoryException: Error copying file: ♂? .xml · Issue #1129 · iBotPeaches/Apktool

Apktool version: 2.0.3 Sample.apk is obfuscated by Dexguard and multidex enabled. Error output while decompiling (source or resource only doesn't make any difference) C:\>apktool d Sample.ap...

github.com



리패키징 에러 : error: No resource identifier found for attribute 'manageSpace' in package 'android'

 

java -jar apktool_2.5.0.jar b test -o test_re.apk
I: Using Apktool 2.5.0
I: Smaling smali folder into classes.dex...
I: Building resources...
W: /mnt/c/Users/home/Desktop/test/AndroidManifest.xml:15: error: No resource identifier found for attribute 'manageSpace' in package 'android'
W:
brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/tmp/brut_util_Jar_14530770439883261518744979748136780032.tmp, p, --forced-package-id, 127, --min-sdk-version, 21, --target-sdk-version, 29, --version-code, 3, --version-name, 1.0.1, --no-version-vectors, -F, /tmp/APKTOOL8619608549491218664.tmp, -e, /tmp/APKTOOL10793254488785446166.tmp, -0, arsc, -I, /root/.local/share/apktool/framework/1.apk, -S, /mnt/c/Users/home/Desktop/test/res, -M, /mnt/c/Users/home/Desktop/test/AndroidManifest.xml]
root@DESKTOP-3OVQ35D:/mnt/c/Users/home/Desktop/# java -jar apktool_2.5.0.jar -r b test -o test_re.apk
I: Using Apktool 2.5.0
I: Checking whether sources has changed...
I: Checking whether resources has changed...
I: Building resources...
W: /mnt/c/Users/home/Desktop/test/AndroidManifest.xml:15: error: No resource identifier found for attribute 'manageSpace' in package 'android'
W:
brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/tmp/brut_util_Jar_177450818150401311562716206127314519822.tmp, p, --forced-package-id, 127, --min-sdk-version, 21, --target-sdk-version, 29, --version-code, 3, --version-name, 1.0.1, --no-version-vectors, -F, /tmp/APKTOOL14901929447853661366.tmp, -e, /tmp/APKTOOL15448358082369890992.tmp, -0, arsc, -I, /root/.local/share/apktool/framework/1.apk, -S, /mnt/c/Users/home/Desktop/test/res, -M, /mnt/c/Users/home/Desktop/test/AndroidManifest.xml]


해결

 

AndroidManifest.xml 파일 내 'andriod:manageSpace="true"'를 삭제한 후 리패키징

appguard에서 리패키징을 막기 위해 의도적으로 넣은 거라고 얘기하는 글도 있고 그냥 난독화하다보니 이리저리 꼬여서 이상한 값이 들어간 거일 수 있으나 어쨌든 appguard를 사용한 앱을 디컴파일할 시 AndroidManifest.xml에 manageSpace라는 속성 값이 들어가 있다. 하지만 manageSpace라는 속성은 실제로 존재하는 속성이 아니다.

apktool 2.4.1버전 이상부터는 존재하지 않는 리소스 아이디를 처리하는 과정이 있어 이런 문제가 발생한다고 한다.

위 방법 외에 디컴파일 시 -r 옵션을 추가하면 리패키징 자체는 문제없이 되나 모바일 분석이 목적이라면 AndroidManifest.xml을 수정하는 방법을 추천함.

https://github.com/iBotPeaches/Apktool/issues/2300

 

NullPointerException on v2.4.1 · Issue #2300 · iBotPeaches/Apktool

Information Apktool Version (apktool -version) - v2.4.1 Operating System (Mac, Linux, Windows) - Linux Ubu18.04 APK From? (Playstore, ROM, Other) - https://play.google.com/store/apps/details?id=com...

github.com