본문으로 바로가기

1. 코드엔진 1번 문제.

코드엔진 1번 문제 SmartApp L01.APK 파일의 압축을 풀어보면

AndroidManifest.xml

Classes.dex

Resources.arsc 

파일의 이름이 각각 틀리게 되어 있다. 

파일명을 올바르게 수정을 하고 사인을 한 뒤, 모바일 에뮬레이터에 어플을 설치하면 문제는 해결.




※ 에러 해결

c:\TOOL\SignApk>java -jar signapk.jar certificate.pem key.pk8 "SmartApp L01.apk" "SmartApp L01_sign.apk"

Exception in thread "main" java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder

        at com.android.signapk.SignApk.addDigestsToManifest(SignApk.java:169)

        at com.android.signapk.SignApk.main(SignApk.java:325)

Caused by: java.lang.ClassNotFoundException: sun.misc.BASE64Encoder

        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)

        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)

        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)

        ... 2 more

파일명을 변경하고 사인을 시도 하였으나, 에러가 나면서 사인이 되지 않았다.


해당 에러로 구글링하여 찾아보니, 자바 버전으로 인한 에러로 확인되었다.




https://answers.unity.com/questions/1415655/android-apk-build-failed-error-how-do-i-fix-this.html

Java 9가 sun / misc / BASE64Encoder 클래스를 제거한 것 같습니다.

해결 방법은 Java 8로 다운그레이드하는 것입니다.

https://stackoverflow.com/questions/18946744/error-in-java-lang-classloader-loadclassunknown-source

<해결방법 및 참고>




java version "10.0.2" 2018-07-17

Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)

Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)

<사용중이던 자바 버전>




<자바 재 설치 및 JAVA_HOME PATH 재 지정 후 사인 성공> 




2. 코드엔진 2번 문제.

이번에도 설치가 안 된다. 로그캣으로 왜 설치가 안 되는지 먼저 확인.

<로그캣으로 확인한 오류>

해당 내용으로 다시 구글링. <Cannot create code cache directory ./code_cache: Read-only file system.>

https://stackoverflow.com/questions/9215004/android-file-writing-read-only-file-system-warning

<구글링으로 얻은 답변>


<두번의 삽질을 거쳐 uses-permission의 위치를 확인 후 추가>


해당 내용을 추가하고 apk를 설치하였으나. "findkey :)"만 출력되고 아무것도 뜨지 않는다.

이번엔 apk 코드를 열어보았다.

<MainActivity>


MainActivity에 여러가지 조건문이 보인다. 날짜,시간을 보이는 날짜로 하고, 33으로 기본 지정된 볼륨을 53을 맞추면 해당 텍스트가 나타나게 되어있다.

하지만 귀찮은 관계로, 조건문을 우회해보도록 하였다.


<위의 코드에 해당하는 Smali 코드>

Smail코드를 보면 두가지 경우(날짜, 볼륨)에 끝나는 것을 볼 수 있다.  

따라서 cond_0으로 점프하지 않도록 if-ne를 if-eq로 수정한다.



※ Smali 코드

if-ne v0, v1 : v0, v1을 비교하여 같지 않으면 뒤에 해당하는 곳으로 점프

if-eq v0, v1 : v0, v1을 비교하여 같으면 뒤에 해당하는 곳으로 점프 

(위에 해당하는 스크린샷에서는 조건이 맞으면 135번 줄의 :cond_0로 점프한다.



다시 패키징, 사인하여 설치하면 키값을 확인할 수 있다.