流程
- 安卓手机安装微信,并下载对应小程序打开
- 进入微信文件目录,提取.wxapkg 文件
- 使用wxapkg工具解包
安装adb及链接mumu模拟器
brew cask install android-platform-tools
【win版】
adb connect 127.0.0.1:7555
adb shell
【mac版】
adb kill-server && adb server && adb shell
提取
$adb connect 127.0.0.1:5555
$ adb devices
List of devices attached
127.0.0.1:5555 offline
emulator-5554 device
$ adb -s emulator-5554 shell
root@x86:/ # cd /data/data/com.tencent.mm/MicroMsg/f53075a62982bc3092e95c9fe1e1531a/appbrand/pkg
FaiWongdeMacBook-Pro:~ faiwong$ adb -s emulator-5554 pull /data/data/com.tencent.mm/MicroMsg/f53075a62982bc3092e95c9fe1e1531a/appbrand/pkg
f53075a62982bc3092e95c9fe1e1531a为微信为每个用户创建的独立文件夹, 进入MicroMsg逐个寻找。
解包
这里是python3 运行环境
# unwxapkg.py
# coding: utf-8
# py2 origin author lrdcq
# usage python3 unwxapkg.py filename
__author__ = 'Integ: https://github.com./integ'
import sys, os
import struct
class WxapkgFile(object):
nameLen = 0
name = ""
offset = 0
size = 0
if len(sys.argv) < 2:
print('usage: unwxapkg.py filename [output_dir]')
exit()
with open(sys.argv[1], "rb") as f:
root = os.path.dirname(os.path.realpath(f.name))
name = os.path.basename(f.name) + '_dir'
if len(sys.argv) > 2:
name = sys.argv[2]
#read header
firstMark = struct.unpack('B', f.read(1))[0]
print('first header mark = {}'.format(firstMark))
info1 = struct.unpack('>L', f.read(4))[0]
print('info1 = {}'.format(info1))
indexInfoLength = struct.unpack('>L', f.read(4))[0]
print('indexInfoLength = {}'.format(indexInfoLength))
bodyInfoLength = struct.unpack('>L', f.read(4))[0]
print('bodyInfoLength = {}'.format(bodyInfoLength))
lastMark = struct.unpack('B', f.read(1))[0]
print('last header mark = {}'.format(lastMark))
if firstMark != 0xBE or lastMark != 0xED:
print('its not a wxapkg file!!!!!')
f.close()
exit()
fileCount = struct.unpack('>L', f.read(4))[0]
print('fileCount = {}'.format(fileCount))
#read index
fileList = []
for i in range(fileCount):
data = WxapkgFile()
data.nameLen = struct.unpack('>L', f.read(4))[0]
data.name = f.read(data.nameLen)
data.offset = struct.unpack('>L', f.read(4))[0]
data.size = struct.unpack('>L', f.read(4))[0]
print('readFile = {} at Offset = {}'.format(str(data.name, encoding = "utf-8"), data.offset))
fileList.append(data)
#save files
for d in fileList:
d.name = '/' + name + str(d.name, encoding = "utf-8")
path = root + os.path.dirname(d.name)
if not os.path.exists(path):
os.makedirs(path)
w = open(root + d.name, 'wb')
f.seek(d.offset)
w.write(f.read(d.size))
w.close()
print('writeFile = {}{}'.format(root, d.name))
f.close()
usage: python unwxapkg.py ./_111122233.wxapkg
网友评论