2013/11/16

java(android) obfuscation rename

android의 jar 코드 보다 보면 obfuscation 된 코드 때문에 힘든경우가 많다 ㅋ
(이제 android java의 obfuscation은 이미 대중화 된듯 ㅋ 죄다 a, b, c 이런.. 젠장 ㅠㅠ)

smali 코드도 좋지만 java 코드로 보는게 편한관계로 jar 파일의 obfuscation 부분을

deobfuscation 하는 방법을 찾아보니 rename으로 구분하기 편하게 해놓은게 있다 ㅋ

jd-gui로 검색하고 trace 하는걸 자주 하는 분들은 요것도 한 방법인듯 합니다.

..\dex2jar-0.0.9.15\d2j-init-deobf.bat -f -o init.txt classes_dex2jar.jar
 -> jar 파일로 부터 class 정보 추출해서 init.txt 파일에 저장

..\dex2jar-0.0.9.15\d2j-jar-remap.bat -f -c init.txt -o aa.jar classes_dex2jar.jar
 -> init.txt 파일을 기준으로 rename한 새로운 aa.jar 생성

rename 한 애들이 mpa 머 이런식으로 구성되는데다가

겹치기도 하고 추후에  parameter에 따라 구분되는거 검색도 편하게 하려고 만든

파이썬 스크립트 ㅋ

#!/usr/bin/python

lv_file = open('init.txt','rb')
lv_out = open('out.txt','wb')
lv_lines = lv_file.read().splitlines()

#print len(lv_lines)
ix=0
while ix<len(lv_lines):
    if lv_lines[ix].startswith('m ') == True and lv_lines[ix].find('=')>3:
        #method
        lv_first = lv_lines[ix].find('(')
        if lv_first>5:
            #param
            lv_second = lv_lines[ix].rfind(')')
            lv_cnt = lv_lines[ix].count(';',lv_first,lv_second)
            lv_out.write(lv_lines[ix]+str(ix)+'_param'+str(lv_cnt)+'\n')
        else:
            lv_out.write(lv_lines[ix]+'\n')
        #end if
    else:
        lv_out.write(lv_lines[ix]+'\n')
    #end if
    ix=ix+1
#end while
lv_file.close()
lv_out.close()

0개의 덧글:

댓글 쓰기

에 가입 댓글 [Atom]

<< 홈