├── README.md ├── bunpacker.py ├── ext-tools ├── AXMLPrinter2.jar ├── armeabi │ └── bulib └── x86 │ └── bulib └── screenshot.png /README.md: -------------------------------------------------------------------------------- 1 | BUnpacker 2 | === 3 | 4 | 简介 5 | === 6 | 7 | *BUnpacker*是一款Android脱壳工具 8 | *TUnpacker* is an Android unpack tool. 9 | 10 | 使用方法 11 | === 12 | python bunpacker.py jiagu.apk 13 | 14 | 工具截图 15 | === 16 | ![image](https://github.com/DrizzleRisk/BUnpacker/blob/master/screenshot.png) 17 | 18 | 必读事项 19 | === 20 | 1.本代码仅适用于特定的加固方式 (BB) 21 | 2.本代码仅供安全研究及授权测试使用,如用于非法用途,后果自负 22 | 3.运行本代码前需要确保连接Android测试设备或虚拟机,并确保Android系统已root 23 | 4.如Dump等待时间过长或Dump失败,请多试几次! 24 | 25 | 工具集(分别适用于不同加固) 26 | === 27 | drizzleDumper 28 | 29 | TUnpacker 30 | 31 | BUnpacker 32 | -------------------------------------------------------------------------------- /bunpacker.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import sys,shutil 3 | reload(sys) 4 | sys.setdefaultencoding('utf-8') 5 | import os,time,zipfile 6 | from xml.dom import minidom 7 | 8 | PACKAGE_NAME = '' 9 | START_ACTIVITY = '' 10 | APK_PATH = '' 11 | def Title(): 12 | print '[>>>] BUnpacker [<<<]' 13 | print '[>>>] code by Drizzle [<<<]' 14 | print '[>>>] 2016.10 [<<<]' 15 | def CheckEnv(): 16 | Title() 17 | print '[*] Init env' 18 | global APK_PATH 19 | global PACKAGE_NAME 20 | global START_ACTIVITY 21 | #初始化环境 22 | if not os.path.exists('result'): 23 | os.mkdir('result') 24 | if not os.path.exists('tmp'): 25 | os.mkdir('tmp') 26 | CPU = 'x86' 27 | os.popen('adb root') 28 | result = os.popen('adb shell cat /proc/cpuinfo').read() 29 | if result.find('ARM') != -1: 30 | CPU = 'armeabi' 31 | print '[*] Target: '+CPU 32 | print '[---------------------------------------]' 33 | os.popen('adb push ext-tools/' + CPU + '/bulib /data/local/tmp') 34 | os.popen('adb install ' + APK_PATH) 35 | print '[---------------------------------------]' 36 | #获取包信息备用 37 | print '[*] Get package info' 38 | nxml = open('tmp/nxml.xml','w') 39 | zf = zipfile.ZipFile(APK_PATH, 'r') 40 | content = zf.read('AndroidManifest.xml') 41 | nxml.write(content) 42 | nxml.close() 43 | content = os.popen('java -jar ext-tools/AXMLPrinter2.jar tmp/nxml.xml').read() 44 | mfest = minidom.parseString(content) 45 | manifest = mfest.getElementsByTagName('manifest') 46 | activities = mfest.getElementsByTagName("activity") 47 | for node in manifest: 48 | PACKAGE_NAME = node.getAttribute("package") 49 | for activity in activities: 50 | for sitem in activity.getElementsByTagName("action"): 51 | val = sitem.getAttribute("android:name") 52 | if val == "android.intent.action.MAIN" : 53 | START_ACTIVITY = activity.getAttribute("android:name") 54 | 55 | def Dump(): 56 | print '[*] Dump dex' 57 | global PACKAGE_NAME 58 | global START_ACTIVITY 59 | os.popen('adb shell am force-stop ' + PACKAGE_NAME) 60 | time.sleep(1) 61 | os.popen('adb shell am start -n ' + PACKAGE_NAME + '/' + START_ACTIVITY) 62 | content = os.popen('adb shell ./data/local/tmp/bulib ' + PACKAGE_NAME).read() 63 | print '[---------------------------------------]' 64 | os.popen('adb pull ' + content + ' result/' + PACKAGE_NAME + '.dex') 65 | print '[---------------------------------------]' 66 | if os.path.exists('result/' + PACKAGE_NAME + '.dex'): 67 | print '[*] Success >> ' + 'result/' + PACKAGE_NAME + '.dex' 68 | #清理环境 69 | if os.path.exists('tmp'): 70 | shutil.rmtree('tmp') 71 | 72 | def Useage(): 73 | Title() 74 | print '[*] Useage: bunpacker.py jiagu.apk' 75 | print '[*] 1.Before Running ,make sure a rooted Android system has been connected to your PC' 76 | print '[*] 2.Only for testing,Do not be evil !' 77 | 78 | if __name__ == '__main__': 79 | if len(sys.argv) < 2: 80 | Useage() 81 | else: 82 | APK_PATH = sys.argv[1] 83 | CheckEnv() 84 | Dump() 85 | -------------------------------------------------------------------------------- /ext-tools/AXMLPrinter2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DrizzleRisk/BUnpacker/8e92b42b0e02c0721656c870612cd1482bea73c2/ext-tools/AXMLPrinter2.jar -------------------------------------------------------------------------------- /ext-tools/armeabi/bulib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DrizzleRisk/BUnpacker/8e92b42b0e02c0721656c870612cd1482bea73c2/ext-tools/armeabi/bulib -------------------------------------------------------------------------------- /ext-tools/x86/bulib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DrizzleRisk/BUnpacker/8e92b42b0e02c0721656c870612cd1482bea73c2/ext-tools/x86/bulib -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DrizzleRisk/BUnpacker/8e92b42b0e02c0721656c870612cd1482bea73c2/screenshot.png --------------------------------------------------------------------------------