추가 경로 : SecSettingsProvider.odex/smali/com/android/providers/Settings/DatabaseHelper.smali
예시문 (노트2 파일 기준입니다.).line 5917:cond_16const-string v6, "SmartStay"invoke-virtual {v6, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Zmove-result v6if-nez v6, :cond_c.line 5942const-string v6, "PersonalMode"invoke-virtual {v6, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Zmove-result v6if-nez v6, :cond_a
위 예문과 같이 .line 5917은 smartstay 즉, 활성화된 구문이고,
아래쪽 예문은 personalmode 즉, 비활성화된 구문입니다.
smali는 자바의 한 종류로서 각각의 아이템마다 변수가 지정되어 있습니다.
오늘 제 강좌에서는, 이러한 변수의 값을 변경하여 그 아이템이 값을 눈치를 못채게 살짝 바꾸어 주는 것입니다.
(말하자면 완벽한게 아닌 그냥 데이타 베이스의 수치값을 이용한 눈속임일 뿐이죠..ㅋ)
우선 위의 예문을 보시면,
if-nez v6, :cond_c
if-nez v6, :cond_a
이러한 변수값이 주어져 있을 것입니다.
(변수값은 기기에 따라 다를수 있습니다. 활성화된 변수값 보시면서 작업하세요)
회색은 활성화된 토글, 빨간색은 비활성화된 토글입니다.
이제는 cond_c와 cond_a의 경로로 지정된 구문으로 가 봅시다.
.line 6007
:cond_c
new-instance v6, Ljava/lang/StringBuilder;
invoke-direct {v6}, Ljava/lang/StringBuilder;->
()V
invoke-virtual {v6, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
const-string v5, ";"
invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
goto :goto_4
.line 5832
:cond_a
:goto_4
add-int/lit8 v4, v4, 0x1
goto :goto_3
변수 a와 변수 c는 구문부터가 차이가 납니다.
즉, 바꾸어 말하자면, 변수 c (cond_c)는 활성화변수,
변수 a(cond_a)는 비활성화 변수로 볼 수 있습니다.
기초적인 설명이 끝났으니 여기서부터 할 일은 매우 쉽습니다.
.line 5917:cond_16const-string v6, "SmartStay"invoke-virtual {v6, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Zmove-result v6if-nez v6, :cond_c.line 5942const-string v6, "PersonalMode"invoke-virtual {v6, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Zmove-result v6if-nez v6, :cond_c
a를 그냥 c로 바꾸어주면 끝입니다.
이런 방식으로 퀵토글 이름 ex) EBOOK (독서모드) PersonalMode(프라이빗모드)
등등등..을 검색하시면서 변수를 바꿔주시면 됩니다. ㅎㅎ
(가끔 가다가 cond_c1이나 cond_010 이런 돌연변이 (?) 구문들이 있을텐데..
이부분은 아예 건드리지않는것이 정신건강에도 좋으실 겁니다..하하)
이후 컴파일후 적용후에 /data/data/com.android.provider.settings 폴더 지워주시면 됩니다.
(4.4.2는 상관없는데 4.3은 공초해야 오류없이 적용되드라구요..ㄷㄷ)
언젠가 써야지,,써야지 하다가 이제서야 쓰게 되네요 ㅎㅎ
별로 실생활에 쓸모 없는 강좌 (?) 이지만 그래도 혹시 쓰시는분 있으시면 자그마한 제 닉네임이라도 붙혀주시면 감사하겠습니다.
저 이거 알아내고 추적하는데만 3일이 걸렸거등요..
아무튼지간에, 나중에 또 퍼뜨릴꺼 있으면 강좌로 쓰겠습니다~
모두들 굿나잇!