Odex [Deodex] 강좌 #3 [부제 : dex화일 수정 및 적용]

2012.12.21 18:22







관련 강좌  강좌 보러가기

[Odex Deodex 강좌 2]  dex화일 추출 

[Odex Deodex 강좌 1] 오덱스 & 디오덱스란?






Odex & Deodex 강좌 #3


- dex화일 수정 및 적용 -




  Odex & Deodex 강좌 #2에 이어서 진행하겠습니다.


이전 강좌 안보시고 오신분들은 이전강좌부터 봐주세요






이전 강좌에서 Dex화일 추출까지 진행 했습니다.


본 강좌에서 추출한 Dex화일을 스마트폰에서 Odex화 하여 적용하는 방법에 대해 알려드릴께요







추출한 Dex화일  baksmali로 압축 해제 하기






폴더내에 classes.dex baksmali로 압축해제 해볼께요






폴더내에 commandprompt.bat 실행해 주세요




아래 스샷과 같이  cmd창 실행됩니다.




   baksmali를 이용한 jar 파일 압축 해제  문장 분석 


java -jar [baksmali파일] -x [압축을 풀 deodexing된 jar파일] -o [압축풀릴 폴더이름]




색상으로 구분 된 입력 구분

java -jar baksmali-1.4.0.jar -x android.policy.jar -o android.policy





사실 저도 이렇게 강좌가 되어있을 때 상당히 난감 했었습니다.

띄어쓰기라던가.. 정확히 어떤부분이 틀려서 안되는 몰라서 답답했었는데..

그냥 아래 스샷처럼 보이는 본문 내용 우클릭 해제 해서 앞뒤여백 없이 드래그해서 복해주세요





java -jar baksmali-1.4.0.jar -x android.policy.jar -o android.policy




그리고 cmd창에서 마우스 우클릭으로 붙여넣기 해주시면 됩니다.

Ctr+C & V으로는 입력이 안됩니다.





아래 스샷 처럼 잘 들어가죠?? 그럼 Enter를 쳐 줍니다.


Enter를 친 후 아래와 같은 화면이 나오면 압축해제가 끝난겁니다. 폴더를 확인해볼까요?




java -jar [baksmali파일] -x [압축을 풀 deodexing된 jar파일] -o [압축풀릴 폴더이름]

java -jar baksmali-1.4.0.jar -x android.policy.jar -o android.policy



압축풀릴 폴더이름 = android.policy 폴더가 신규로 생성 된걸 볼 수 있습니다.





  smali화일 수정하기   

dex화일 압축해제 후 이젠 편집가능한 smali화일을 볼 수 가 있습니다.

smali화일이 어디있냐고요??


android.policy 폴더안에 보시면 엄청나게 많은 smali화일들이 있습니다.




그 중에 ICS 순정락을 담당하고 있는 smali 경로는

android.policy\com\android\internal\policy\impl\LockPatternKeyguardView.smali



LockPatternKeyguardView.smali 을 우클릭해 메모장 및 Notepad++로 열어주세요



Ctr+F를 이용해서 아래 구문을 찾아주세요

iput-boolean v2, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->CIRCLELOCK_MODE:Z 




이제 ICS Lock 관련 구문 수정해 줍니다.


iput-boolean v2, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->CIRCLELOCK_MODE:Z [원본]


iput-boolean v1, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->CIRCLELOCK_MODE:Z [수정]


V2==> V1으로만 바꿔주시면 됩니다.



이제 smali화일을 저장해 주세요




  smali화일 다시 압축해서 수정된 Dex화일 추출하기   




  smali화일 다시 압축 명령어 구문 분석   

java -jar [smali파일이름] -o classes.dex [폴더 이름]







Cmd 창에 아래와 같이 입력해 주시면 됩니다.

java -jar smali-1.4.0.jar -o classes.dex android.policy





Smali.jar를 통해 압축해서 수정된 classes.dex화일이 생성 됐을 겁니다.

생성된 시간을 확인해 보세요 (방금전에 생성 된 게 맞습니다. ㅎㅎ)





  수정된 dex화일 android.polacy.jar에 덮어 씌우기  


처음 deodex된 android.policy.jar수정 된 dex화일만 바꿔치기 해주시면 됩니다.




압축화일에서 classes.dex화일을 꺼내놓은것과 반대로 폴더에 있는 classes.dex화일을 알집안으로 넣어 주시면 됩니다.





android.policy.jar 우클릭 ==> 알집으로 열기



수정 된 classes.dex화일 android.policy.jar 안으로 drag & drop로 덮어 씌우기



현재 파일에 추가하기 선택 후 확인



덮어쓰기 확인 후 확인



우측 상단 X키 눌러서 알집 창 닫기




이로써 dex화일이 수정 된 디오덱스 android.policy.jar 이 완료되었습니다. ㅜㅜ


옆에서 보면 정말 간단한데.... 문서로 작성하려니..

100배는 시간걸리네요. ㅎㅎ



수정 완료된 디오덱스 android.policy.jar을 Odex화 시키면 끝납니다. ㅎㅎ








마지막 단계 입니다. ㅎㅎ



  수정 된 deodex android.polacy.jar에서 odex추출 하기 [deodex==>odex화 하기  









우선 Rootexplorer프로그램에서 System 권한을 R/W로 바꿔주세요

이해가 안되시면 아래 강좌 참조해 주세요.


 루트익스플로러 사용법 / rootexplorer 사용방법 / 루트익스플로러 테마설치방법





USB 디버깅 모드를 체크해 주세요






USB로 스마트폰을 연결해 주세요



드라이버 등 설치가 이상 없이 되어 있다면 내컴퓨터 안에 자신의 기종이 잡혀있을 겁니다.











이젠  AutoDEOTool 폴더안에 있는 commandprompt.bat 를 실행시켜 주세요




commandprompt.bat 를 실행 초기화면 입니다.

이젠 아래 명령어를 복사해서 하나씩 붙여주시면 끝납니다.

파란색 명령어만 입력해주세요




adb 작업 [작업화일 넣기]

adb push dexopt-wrapper /system/framework

adb push android.policy.jar /system/framework



테그라크에서는 괜찮은데 cwm에서는 이 부분에서  폴더 퍼미션을 넣어줘야합니다.

아래와같은 퍼미션이 거부된다면


failed to copy 'dexopt-wrapper' to '/system/framework/dexopt-wrapper': permission denied


아래 링크를 참조해주세요

▷ 폴더퍼미션 강좌보러가기




<명령어 입력화면 화면>


이부분에서 다른문구가 나오시는 분은 루트익스플로러 R/W다시 한번 확인해보세요





adb shell작업 [작업영역으로 이동] 명령어

adb shell 

cd /system/framework





dexopt-wrapper 퍼미션 777 변경 / a.odex 생성 명령어

  chmod 777 dexopt-wrapper

  ./dexopt-wrapper android.policy.jar a.odex $BOOTCLASSPATH


<명령어 입력화면 화면>




Busybox 실행 명령어

conv=notrunc 

  busybox dd if=/system/framework/android.policy.odex of=a.odex bs=1 count=20 skip=52 seek=52 conv=notrunc

<명령어 입력화면 화면 한줄입니다.>



임시 a.odex android.odex덮음 명령어

mv a.odex android.policy.odex

 



퍼미션 변경 명령어

chmod 644 android.policy.*

chown root.root android.policy.*




리부팅 명령어

reboot


<명령어 입력화면>






입력명령어 순서 정리(회색 숫자 제외)

1)adb push dexopt-wrapper /system/framework

2)adb push android.policy.jar /system/framework

3)adb shell 

4)cd /system/framework

5)chmod 777 dexopt-wrapper

6)./dexopt-wrapper android.policy.jar a.odex $BOOTCLASSPATH

7)busybox dd if=/system/framework/android.policy.odex of=a.odex bs=1 count=20 skip=52 seek=52 conv=notrunc

8)mv a.odex android.policy.odex 

9)chmod 644 android.policy.*

10)chown root.root android.policy.*

11)reboot





리부팅이 되면서 아래와 같은 순정락에서 ICS 순정락을 보실 수 있습니다.^^

  



고생많으셨습니다.^^





Odex관련 명령어는 따로 정리해서 올려드릴께요.

이번 강좌에 모든걸 적어드리면 오히려 혼란스러울까봐서.. 생략한 부분이 있습니다.


이렇게 포스팅 내용을 보시면 정말 어렵다고 생각하실지 모르겠지만

막상 하나한 따라하시다 보면그렇게 어렵지 않은 내용입니다.



Odex명령어 중 가장 간단한 수정으로 큰 효과를 볼 수 있는 ICS 순정락 강좌였습니다.

앞으로도 Odex관련된 강좌를 실습을 통해 알려드릴께요



처음이라 자세하게 쓴다고 썼는데.. 쉽게 이해가 가셨는지 모르겠네요

아무래도 전혀모르는사람이 보면 역시 외계어겠죠ㅜㅜ











이상으로 Odex [Deodex] 강좌 #3 [부제 : dex화일 수정 및 적용] 포스팅을 마치도록 하겠습니다.




azdesign™ ☆ 테마제작관련 ☆/테마제작강좌 , , , , ,



  1. 이전 댓글 더보기
  2. Blog Icon
    오류

    아 저도 commandprompt 실행하면 바로 꺼지네요;;

  3. Blog Icon
    ???


    adb push dexopt-wrapper /system/framework

    명령어 입력하면
    에러 디바이스 낫 파운드 라고 뜨네요..

  4. Blog Icon
    jja08111

    감사합니다. 알고보니 드라이버가 설치가 안되있었군요. 정말 감사합니다.

  5. Blog Icon
    꿈을가진청년

    안녕하세요 좋은 강좌 감사드립니다.
    막힌부분이 있는데 현재 kt노트2사용자입니다.
    LockPatternKeyguardView.smali
    이파일을 열었는데
    아래 해당 파일문구가 없네요..ㅜ.ㅜ
    iput-boolean v2, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->CIRCLELOCK_MODE:Z

    대신 비슷한 문구인
    iput-boolean v2, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mScreenOn:Z

    .line 836
    iput-boolean v2, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mForgotPattern:Z
    이문구만 있네요 ㅜ.ㅜ

  6. Blog Icon
    꿈을가진청년

    아~ 넵^^답변 감사합니다!!
    좋은강좌 감사히 보고 있습니다_(__)_

  7. Blog Icon
    JS

    아까 젤리빈 4wayreboot 강좌에 댓글달았던 사람인데요 ㅠㅠ
    adb push dexport-wrapper /system/framework 치면
    failed to copy 'dexport-wrapper /system/framework/dexopt-wrapper': permission denied
    이렇게 뜨면서 안되네요 ㅠ
    usb디버깅 되어있구요 루익 r/w입니다 ㅠㅠ

  8. Blog Icon

    어떻게 1)adb push dexopt-wrapper /system/framework

    2)adb push android.policy.jar /system/framework

    이건 다른 법으로 대체하는 법을 알아내어서 했는데 적용하니까 무한부팅되어서 오딘으로 밀고있네요 ㅠㅠ

  9. Blog Icon

    감사합니다 ㅠㅠ
    그런데 내일은 제가 집에 없네요 ㅋ

  10. Blog Icon
    notewhite

    아흑 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
    도저히 못하겠습니다......ㅠㅠㅠㅠㅠ 자료는 framework에 순정락 수정하는부분인데..ㅠㅠ

    저는 상태바 투명하려고 하다보니 systemui.odex는 어디있는지도 모르겠고..
    _app 에다가 app 순정펌웨어꺼 다집어넣고 3번눌러서 햇는데... systemui는 apk만 생겨있고
    미치고 팔짝뛸꺼 같습니다 하아 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

    이거보고 systemui 만지신분들은 어케했는지 신기할정도네요 ㅠㅠㅠㅠㅠㅠㅠ
    제가 이해력이 딸리는건지..ㅠㅠ 하아.. 머리아프고 힘들어죽겟네요 ㅠㅠ
    오덱스디오덱스는 왜이렇케 큰시련을 주는지 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

  11. Blog Icon
    saturn69

    아.. 감사해요 ㅜㅜ 갤쓰리에 잉크락 포팅하느라 참고했는데 디오덱스 배우는거부터 해서 몇시간 걸렸네요ㅜㅜㅜㅜ
    마지막에 r/w 줘도 퍼미션 디나이드 뜨길래 걍 터미널 에뮬레이터로 마무리했네용
    감사합니다

  12. Blog Icon
    saturn69

    .. 적용했는데 잠금화면 터치하면 검은화면 되네요.
    유일하게 발견한 오류가 android.policy.jar에 classes.dex 를 알집으로 추가 교체할때 Meta-inf 압축헤더가 손상되었습니다. 인데 이 문제 때문이라면 어떻게 해야 할까요??

  13. Blog Icon
    움트트

    꼭 찾던 자료라 너무 감사합니다. ^^

  14. Blog Icon
    백충석

      ./dexopt-wrapper android.policy.jar a.odex $BOOTCLASSPATH
    이 명령어에서 에러가 나네요. 디버깅 체크, 시스테 rw 확인 했습니다. link_image[1863]: 6044 missing essential tablesCANNOT LINK EXECUTABLE 이라는 메세지가 뜨고, 숫자는 그때 그때 틀리게 나오더라구요..맛클에서 이럴경우 dexopt-wrapper를 다시 푸시하고 퍼미션 주라고 해서 해봤는데도 똑같이 에러 나네요...다른 분은 퍼미션 아니면 패키징 문제라고도 하시는데 무엇을 뜻하시는지 모르겠어요..어제 이것 때문에 암것도 못했습니다ㅠㅠ 처음부터 다시 해봐도 똑같네요. 출장 갔다 오시느라 피곤 하실텐데 시간 나실때 귀중한 답변 부탁드립니다.

  15. Blog Icon
    kt3694

    아직은 많이 어렵지만 자세한 강좌 감사드립니다.

  16. Blog Icon
    Quala

    제가 SystemUI를 디오덱스하는 것까지 성공해서 classes.dex파일을 AutoDEOTool1.0.3_softdx_fix폴더에 옮긴 후 commandprompt.bat를 실행시켜 java -jar baksmali-1.4.0.jar -x SystemUI.apk -o SystemUI라고 쓴 후 엔터를 치니 Can't find the file SystemUI.apk라고 뜨면서 되지를 않네요... 어떻게 해야 할까요??

  17. Blog Icon
    Induo

    좋은강좌 감사합니다! 제가 android.policy.jar 잉크락 포팅을 위한 수정 후 odex를 생성하려는데요, adb 에러가 계속 뜨네요.. ㅜㅜ 퍼미션 디나이드 뜹니다.. adb devices 로 연결확인했구요, 디버깅,드라이버설치,R/W 모두 되어있는데도 안되네요 ㅜ 해결법 알려주실 수 있나요?

  18. Blog Icon
    노뜨2

    감사합니다 저도 아직 초보라 이런용어들이 나올때마다 뭔소린지 몰랐는데 이젠 알겠네요 정말수고 하십니다

  19. Blog Icon
    노트 8.0

    chmod 644 android.policy.*

    chown root.root android.policy.* <--- 여기가 안먹히네요 위에는 먹히는데 리붓 부터 unable to chown android.policy.jar: operation not permitted 라고 뜹니다
    2개 명령어 남겨두고 이러네요 ㅜ

  20. Blog Icon
    노트8.0

    강좌 2 중 에서
    저희가 사용 할 android.policy.jar 이 잘 Deodex되었네요
    버젼별로 안되는 화일들이 있습니다. 안되는 화일 deodex하는 방법은 이 다음강좌에서 따로 다루도록 할께요 이부분에서 안되는 파일은 강좌 3에서 해주신다고 하셨는데 정독해도 안보이길래 혹시나 여쭤봅니다
    다른 컴퓨터에서 작업 해볼려고 하니 첫단추부터 어긋나네요..ㅎ

  21. Blog Icon
    어리아리

    저도 그러네요... 다 잘 해놨는데... 막판에... 저줄에서... 같은 에러... ㅠㅠ 멘붕중이네요...

  22. Blog Icon
    JG

    다하고나서 리붓하면 ... 무한로딩? 유쁠로고에서 안넘어가네요 ㅠㅠ
    오딘으로 복구는 했는데,,,, 왜그런지 알수있을까요??

  23. Blog Icon
    SeoK

    권한이나 퍼미션 에서 문제생기시는 분들은요.

    스샷 보시면 root으로 로 시작합니다. root@android:~ 이렇게요

    그런데 보시면 adb shell 치고 들어가시면 shell$android~ 이렇게 돼어있을겁니다.

    root 권한을 얻으셔야하는데요

    adb shell 후에

    cd framework/ 이거 치시기 전에

    su

    명령어 주시면 shell$ 이것이 root@ 이것으로 변경되실겁니다. ^^;

  24. 감사합니다^^

  25. Blog Icon
    ㅠㅠ

    iput-boolean v2, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->CIRCLELOCK_MODE:Z
    이구문이 없네요
    혹시나해서 노트패드 2다운받아서 찾기해도 없구
    갤럭시 노트 2구요 통신사는 SKT에요

  26. Blog Icon
    ㅠㅠ

    그전에 해야할건 다했어요

  27. 기기에따라 해당구문이 없을수도 있습니다.

  28. Blog Icon
    김도훈

    정말 !! 따라하기 쉽네요^^
    좋은 강좌 감사합니다.^^!!

  29. 감사합니다^^

  30. Blog Icon
    NTG

    adb push dexopt-wrapper /system/framework 이거치면
    error : more than one device and emulator 뜨면서안되요 USB디버깅체크했고 서버다시열어도 안되는데 뭐가문제일까요 루트관리자 R/W도 확인했습니다

  31. 블루스택 혹시 깔려있으신가요? 디바이스 중복인식 관련인데 에뮬레이터 같은게 켜있는지 확인해보세요.

  32. Blog Icon
    NTG

    블루스팩이켜져있엇네요 끄니까 잘됩니다 감사합니다

  33. 다행이네요^^

  34. Blog Icon
    HSG

    정말 감사합니다^^ 덕분에 갤3 framework.jar 변환 및 볼륨 단계 패치에 성공했습니다.

    odex 파일작업은 처음이었지만 잘 되었네요 ㅎㅎ

    아쉬웠던건, AutoDEOTool 에서 6번을 사용하는법을 알려주시지 않아서 살짝 해매었네요.

    (폰에서 /init.rc 파일안에 존재하는 export BOOTCLASSPATH ~~~ 값을 활용하는 방법을 다른분을 위해 올려도 좋을 듯 합니다.)

    그리고 루팅사용자라면 마지막에 명령어를 마켓에서 "안드로이드 터미널 에뮬레이터" 앱을 받아서 su로 루트 권한 얻은뒤 하셔도 됩니다.

    또 루트 익스플로러에서 시스템 파티션을 r/w로 마운트를 해도,
    Read-Only File System 오류가 떠서 저는 "mount -o remount,rw /system" 명령어로 해결했습니다.

  35. 감사합니다^^