android的一款整合jad,apktool,dex2jar的脚本

来源:互联网 发布:设计协作软件 编辑:程序博客网 时间:2024/04/29 18:40

http://wcf1987.iteye.com/blog/1487540

Python代码  收藏代码
  1. #! /usr/bin/env python  
  2. #coding=utf-8  
  3. import os  
  4. import subprocess  
  5. import time  
  6. import shutil,sys  
  7. import zipfile   
  8.    
  9.   
  10.   
  11. apksrc="C:\\test\\test.apk"  
  12. apkdest=""  
  13. copyzip=""  
  14. dex2dir=""  
  15. jadsrc=""  
  16. projectcodepath=""  
  17. apktoolpath=r"F:\\bishe\android\apktool\apktool.bat"  
  18. dex2jarpath=r"F:\\bishe\android\dex2jar-0.0.9.8\dex2jar-0.0.9.8\dex2jar.bat"  
  19. jadexepath=r"F:\\bishe\android\jad158g\jad.exe"  
  20. def apktools(src,dest):  
  21.       
  22.       
  23.     cmd_list=apktoolpath+r" d -f "+src+" "+dest  
  24.       
  25.     print cmd_list  
  26.     process = subprocess.Popen(cmd_list)       
  27.     while 1:     
  28.         ret1 = subprocess.Popen.poll(process)     
  29.         if ret1 == 0:     
  30.             print process.pid,'end'    
  31.             break    
  32.         elif ret1 is None:     
  33.                
  34.             time.sleep(1)     
  35.         else:     
  36.             print sub2.pid,'term'    
  37.             break    
  38.       
  39.     print "apk tools end"  
  40. def jad(src,dest):  
  41.     codesrc=dest+"src\\"  
  42.     if((os.path.exists(codesrc))==False):  
  43.         os.makedirs(codesrc)  
  44.     cmd_list=jadexepath+" -o -r -d "+codesrc+" -s java "+src+"**\\*.class"  
  45.   
  46.     print cmd_list  
  47.     process = subprocess.Popen(cmd_list)       
  48.     while 1:     
  49.         ret1 = subprocess.Popen.poll(process)     
  50.         if ret1 == 0:     
  51.             print process.pid,'end'    
  52.             break    
  53.         elif ret1 is None:     
  54.            
  55.             time.sleep(1)     
  56.         else:     
  57.             print sub2.pid,'term'    
  58.             break    
  59.   
  60.   
  61. print "apk jad code successfully"      
  62.   
  63.   
  64. def dex2jar(src,dest):     
  65.       
  66.     cmd_list=dex2jarpath+" "+src+"classes.dex"  
  67.       
  68.     print cmd_list  
  69.     process = subprocess.Popen(cmd_list)       
  70.     while 1:     
  71.         ret1 = subprocess.Popen.poll(process)     
  72.         if ret1 == 0:     
  73.             print process.pid,'end'    
  74.             break    
  75.         elif ret1 is None:     
  76.                
  77.             time.sleep(1)     
  78.         else:     
  79.             print sub2.pid,'term'    
  80.             break    
  81.       
  82.       
  83.     print "apk dex2jar.bat successfully"      
  84.       
  85. def unzip(src,dest):  
  86.     print src  
  87.     f = zipfile.ZipFile(src)   
  88.     f.extractall(dest)       
  89.     f.close()    
  90.     print "apk unzip successfully"  
  91.       
  92. def GenerateProCode(dest):  
  93.     print     jadsrc+"src"  
  94.     print dest  
  95.     shutil.copytree(jadsrc+"src\\",dest)  
  96.     shutil.copytree(apkdest,dest)  
  97.       
  98.          
  99.       
  100.       
  101. def adbinstall(src):  
  102.     cmd_list="adb install "+src  
  103.       
  104.     print cmd_list  
  105.     process = subprocess.Popen(cmd_list)       
  106.     while 1:     
  107.         ret1 = subprocess.Popen.poll(process)     
  108.         if ret1 == 0:     
  109.             print process.pid,'end'    
  110.             break    
  111.         elif ret1 is None:     
  112.                
  113.             time.sleep(1)     
  114.         else:     
  115.             print sub2.pid,'term'    
  116.             break    
  117.       
  118.       
  119.     print "apk install successfully"      
  120.       
  121.   
  122.       
  123. def init(src,dest):  
  124.     global apkdest  
  125.     global dex2dir  
  126.     global copyzip  
  127.     global jadsrc  
  128.     global projectcodepath  
  129.     copyzip=os.path.dirname(src)+"\\"+"dex2jar.zip"  
  130.     if dest=="":  
  131.         apkdest=os.path.dirname(src)+"\\ProjectCode\\"  
  132.     shutil.copy2(src,copyzip)  
  133.     dex2dir=os.path.dirname(src)+"\\dex\\"  
  134.     jadsrc=os.path.dirname(src)+"\\jad\\"  
  135.       
  136.           
  137. init(apksrc,apkdest)  
  138. apktools(apksrc,apkdest)  
  139.   
  140. unzip(copyzip,dex2dir)  
  141. dex2jar(dex2dir,apkdest)  
  142. unzip(dex2dir+"classes_dex2jar.jar",jadsrc)  
  143. jad(jadsrc,apkdest)  
  144. adbinstall(apksrc)  
  145.   
  146.       

 

代码如上,就是对一个apk文件自动解压缩,生成最终代码在projectcode中,包括了解压缩后的AndroidManifest.xml,反编译的java文件,资源文件等等