SmartApp L02
해당 앱을 먼저 설치를 한다.
adb install "SmartApp L02.apk"
설치 시 다음과 같은 에러가 뜨면서 설치가 안된다.
해당 앱을 살펴보니 서명에 실패 했다는 뜻이었고 일단 우선 서명을 먼저 해야 할 것 같았다.
그래서 APK Studio를 켜서 디컴파일을 해주기로 했다.
디컴파일을 수행한 후 사인을 수행하려 하니
그림처럼 sign/Export 기능이 활성화 되어 있지 않았다.
그럴때는 AndroidManifest.xml을 한번 눌러주고 빌드를 한다.
그렇게 되면
dist 디렉터리에 apk 파일이 생성되는데 이 앱을 클릭하고 Project 메뉴를 클릭하면 sign/export가 활성화 되어 있는 것을 확인 할 수 있고
버튼을 클릭하게 되면
다음과 같이 화면이 나오는데
- Keystore Password
- Alias
- Alias Password
이 3가지를 임의의 값으로 설정해주고 sign을 해준다.
sign 시
"Process exited with code 0"이라는 메시지가 뜨면 정상적으로 sign 된거다.
이제 adb connect를 통해 nox 및 진단기기와 연결을 해준 후
install을 실시하게 되면
FindKey2가 설치가 되는 것을 확인할 수 있다.
그 후 FindKey2를 실행시키면
이제서야 문제가 나오는 것을 확인할 수 있다.
문제를 해결하기 위해서 jadx를 통해 해당 앱을 한번 까봤다.
AndroidManifest.xml을 확인해 보니
App이 실행될 때 "com.namdaeheyon.findkey2.MainActivity"가 가장 먼저 실행되는 것을 알 수 있다.
그러므로 MainActivity를 살펴보니
이러한 if문이 존재했고 해당 조건문에 들어가있는 함수들을 살펴보니
Volume 함수에는 33이라는 값을 리턴하고
makeDate 함수는 현재 시간을 리턴하고 있다.
위에 함수와 비교 했을 때 실행시킬때 시점의 2013년 11월 2일 12시 35분 03초이어야 하고 volume 값이 53이어야 한다.
하지만 현 시점에서 두가지 조건을 모두 만족 시킬 수 없기 때문에 두가지 값이 일치하지 않을 때 keyString() 함수가 동작하도록 해야한다.
MainActivity의 smail 코드를 확인해보니
다음과 같았다.
우선 .line 29의 경우
v0 = makedate() 함수를 동작시킨 값
v1 = "2013-11-02-12:35:03"
그리고 v0 과 v1을 비교했을 때 일치하지 않으면 cond_0으로 간다.
현재 makedate() 함수의 경우 현재 실행시키는 시점의 값이 들어가 있으므로 v0 값과 v1 값이 같지 않다.
.line 30의 경우
v0 = Volume() 함수를 동작시킨 값
v1 = 0x35
16진수 0x35를 10진수로 바꾸면 53이다.
하지만 volume 0의 값은 33을 return 하기 때문에 두 값이 같지 않아 "cond 0"으로 이동하게 된다.
.line 34를 보면
다음과 같이 메소드를 종료하라고 나온다.
그러므로 .line 29와 .line30의 값이 일치하는 경우 cond_0으로 보내면 된다.
다음과 같이 변경 후 저장을 해준다.
그 후 "Build" -> "Sign/Export" -> "install"을 해주게 되면 새로운 FindKey2(이전에 설치했던 apk는 삭제해야함)가 설치되고
확인해보면
키 값이 나오게 된다.