일부 변수가 있을지도 모르지만
우선 토글 확장의 경우에는 스말리의 이해부터가 필요합니다.

추가 경로 : SecSettingsProvider.odex/smali/com/android/providers/Settings/DatabaseHelper.smali
우선 아래 구문들을 예시로 토글 추가 강좌를 써 내려가도록 하겠습니다.

예시문 (노트2 파일 기준입니다.)
    .line 5917
    :cond_16
    const-string v6, "SmartStay"

    invoke-virtual {v6, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v6

    if-nez v6, :cond_c

    .line 5942
    const-string v6, "PersonalMode"

    invoke-virtual {v6, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v6

    if-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_16
    const-string v6, "SmartStay"

    invoke-virtual {v6, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v6

    if-nez v6, :cond_c

    .line 5942
    const-string v6, "PersonalMode"

    invoke-virtual {v6, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v6

    if-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일이 걸렸거등요..


아무튼지간에, 나중에 또 퍼뜨릴꺼 있으면 강좌로 쓰겠습니다~

모두들 굿나잇!

댓글 9
  • ?
    피가되고 살이되는 강좌입니다. 드릴건 추천뿐이네요.
  • ?
    SNAG
    14.06.07
    ㅎㅎ 멋진 자료네요
  • ?
    시카킴
    14.06.07
    갤럭시s3 4.3 은 .line 4766 const-string v5, "SmartPause" invoke-virtual {v5, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v5 if-nez v5, :cond_118 이런식으로 cond_***가 숫자로 표시되네요 숫자도 랜덤이구요 ㅠ
  • ?
    Blacky™
    14.06.07
    기기마다 변수값은 다릅니다. smartstay 변수값 참조해서 작업해보세요.
  • ?
    시카킴
    14.06.07
    감사합니다 :)
  • ?
    lioil55
    14.06.07
    토글이 먼가요...? 저거 하면 머가 좋은거죠...ㅜ
  • ?
    ㅎㅎ.. 맨 아랫분 댓글처럼 피가되고 살이되는 강좌네요 ~ 요즘 차근차근 배우는중인데 ... 블래키님 갤티이 나이트팩도 같이 기다리면서요 ~
  • ?
    NKazu
    14.09.06
    활성화되는 변수값을 찾을려고 하니 다 다르네요..? 10c 인것들도 있고 10f 인것들도 있고 그냥 smartstay 변수값으로 사용해야되나요..
  • ?
    Blacky™
    14.09.06
    smartstay가 가장 보편적으로 활성화되는 변수값입니다.
댓글 쓰기 권한이 없습니다.
강좌 정렬 목록 검색 쓰기
등록된 글이 없습니다.
1 -