100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python解包wxapkg_微信小程序wxapkg解包器c++版(免装py环境 绿色90k)

python解包wxapkg_微信小程序wxapkg解包器c++版(免装py环境 绿色90k)

时间:2020-08-26 06:47:56

相关推荐

python解包wxapkg_微信小程序wxapkg解包器c++版(免装py环境 绿色90k)

基于lrdcp大神的py的源码,用mfc写的gui程序,免py环境安装,方便使用。

wxapkg的存储位置:/data/data/com.tencent.mm/MicroMsg/{User}/appbrand/pkg

{User} 为用户的用户名,pkg目录就是微信用于存放小程序和小游戏下载包的位置。

Python代码:

#!/usr/bin/env python2

# lrdcq

# usage python2 unwxapkg.py filename

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'

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 = ' + str(firstMark)

info1 = struct.unpack('>L', f.read(4))[0]

print 'info1 = ' + str(info1)

indexInfoLength = struct.unpack('>L', f.read(4))[0]

print 'indexInfoLength = ' + str(indexInfoLength)

bodyInfoLength = struct.unpack('>L', f.read(4))[0]

print 'bodyInfoLength = ' + str(bodyInfoLength)

lastMark = struct.unpack('B', f.read(1))[0]

print 'last header mark = ' + str(lastMark)

if firstMark != 0xBE or lastMark != 0xED:

print 'its not a wxapkg file!!!!!'

exit()

fileCount = struct.unpack('>L', f.read(4))[0]

print 'fileCount = ' + str(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 = ' + data.name + ' at Offset = ' + str(data.offset)

fileList.append(data)

#save files

for d in fileList:

d.name = '/' + name + d.name

path = root + os.path.dirname(d.name)

if not os.path.exists(path):

os.makedirs(path)

w = open(root + d.name, 'w')

f.seek(d.offset)

w.write(f.read(d.size))

w.close()

print 'writeFile = ' + root + d.name

f.close()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。