프로그램

android apk backup and decompile (apk 디컴파일)

mulderu 2012. 3. 19. 11:36

안드로이드개발 output 인  apk 파일에서 원 소스를 다시 복원해 보겠습니다.
복원결과가 100% 원본과 맞지는 않지만, 원본의 의도 및 구조를 충분히 파악 할 수 있습니다. 
프로그램중 리소스만 수정하면 자신만의 프로그램처럼 만들어서 사용도 가능??? 하죠. ㅋㅋㅋ




1. ASTRO App 을 이용하여 android apk 파일을 백업 폴더로 백업하기 : 
   아래의 사이트를 참조 하시면 쉽습니다.
   reference http://gemdu.tistory.com/100
 


 



2. apk  풀기 :
    jar xvf downloaded.apk 

 



3. dex2jar를 이용해서 classes.dex  파일을 jar 파일로 변환 하기
   (dex2jar : http://code.google.com/p/dex2jar/)
 
- my dex2jar location : ~/devApps/dex2jar-0.0.9.8
 

mulder@~/downloads/temp$ ls
AndroidManifest.xml META-INF            classes.dex         res                 resources.arsc      downloaded.apk
mulder@~/downloads/temp$ ~/devApps/dex2jar-0.0.9.8/dex2jar.sh classes.dex 
dex2jar version: translator-0.0.9.8
dex2jar classes.dex -> classes_dex2jar.jar
Done.
mulder@~/downloads/temp$ 



4. 변환된  jar 파일 풀기

mulder@~/downloads/temp$ ls -tlr
total 13984
-rw-r--r--   1 mulder  staff   114684  2 21 18:59 resources.arsc
-rw-r--r--   1 mulder  staff   814016  2 21 18:59 classes.dex
-rw-r--r--   1 mulder  staff    18024  2 21 18:59 AndroidManifest.xml
-rwxrwxrwx   1 mulder  staff  5430930  3 19 02:12 downloaded.apk
drwxr-xr-x  11 mulder  staff      374  3 19 11:28 res
drwxr-xr-x   5 mulder  staff      170  3 19 11:28 META-INF
-rw-r--r--   1 mulder  staff   777994  3 19 11:30 classes_dex2jar.jar
mulder@~/downloads/temp$ 
ulder@~/downloads/temp$ mkdir classes
mulder@~/downloads/temp$ mv classes_dex2jar.jar classes
mulder@~/downloads/temp$ cd classes
mulder@~/downloads/temp/classes$ ls
classes_dex2jar.jar
mulder@~/downloads/temp/classes$ jar xf classes_dex2jar.jar 
mulder@~/downloads/temp/classes$ ls
classes_dex2jar.jar com                 org
mulder@~/downloads/temp/classes$



5. jad 를 이용하여  class 파일을 java  파일로 디컴파일 하기 (jad : http://www.varaneckas.com/jad)

mulder@~/downloads/temp$ mkdir src
mulder@~/downloads/temp/src$ cd src 
mulder@~/downloads/temp$ ~/devApps/jad158g.mac.intel/jad  -r -b -dead -ff -i -o -space -nonlb -s java classes/**/*.class



한방에 하기

#!/bin/bash

apkf=YOUR_DOWNLOADED.apk   # 원하는 걸로 교체
dex2jar_home=~/devApps/dex2jar-0.0.9.8   # user depend
jad_home=~/devApps/jad158g.mac.intel   # user depend

echo "decompile run for $apkf"
jar xf $apkf
mkdir classes
mv classes.dex classes
cd classes
$dex2jar_home/dex2jar.sh classes.dex
jar xf classes_dex2jar.jar
cd ..
mkdir src
cd src
$jad_home/jad  -r -b -dead -ff -i -o -space -nonlb -s java ../classes/**/*.class
echo "OKKKKKKK"




뽀너스... 감사하면서



THE END