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()