• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > PHP微信小程序解包过程实例详解

PHP微信小程序解包过程实例详解

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了微信小程序,小程序解包等相关知识,希望对您有所帮助

这篇文章主要介绍了php微信小程序解包过程实例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

这个解包只能看个大概

1、找到小程序压缩包

1.1、手机root或安装模拟器(我用的是夜神)

1.2、在模拟器上安装微信(用android5系统的模拟器,低版本小程序容易打不开)

1.3、打开登陆微信后,打开小程序

1.4、打开模拟器自带的文件管理器来到目录:/data/data/com.tencent.mm/MicroMsg/{{一串32位的16进制字符串文件夹}}/appbrand/pkg/

1.5、里面有很多wxapkg文件,找到最新修改日期的文件比如 -357038350_91.wxapkg,前面打勾选中

1.6、文件管理器回到/mnt/shared/Other目录,粘贴即可,打开安卓模拟器上我的电脑 =〉打开电脑文件夹找到粘贴的文件-357038350_91.wxapkg 夜神教程链接:跳转查看

2、对压缩包解包

详细参考:https://codechina.csdn.net/mirrors/leo9960/wechat-app-unpack?utm_source=csdn_github_accelerator

我用的php类:

使用方法:cmd =>cd php文件目录 =〉php wx_unpak.php 357038350_91.wxapkg

我主要是想用其中的一些图片,很多图片都被base64了放到js(app-service.js)和样式(app-wxss.js)文件中了;需要我们匹配组装一下

<?php$str = file_get_contents('_-357038350_97.wxapkg.unpacked/app-service.js');$preg = '/(data:image.*?)\"/';$len = strlen('data:image/png;base64,');if(preg_match_all($preg, $str, $arr)){    foreach($arr[1] as $k => $img){        file_put_contents('./images/'.$k.'.png',base64_decode(substr($img,$len)));        //echo substr($img,$len);exit;    }} else {    echo 'no';}$str = file_get_contents('_-357038350_97.wxapkg.unpacked/app-wxss.js');$preg = '/\((data:image.*?)\)/';$len = strlen('data:image/png;base64,');if(preg_match_all($preg, $str, $arr)){    foreach($arr[1] as $k => $img){        file_put_contents('./images/a2_'.$k.'.png',base64_decode(substr($img,$len)));        //echo substr($img,$len);exit;    }} else {    echo 'no';}

wx_unpak.php

<?php/** * 源文件目录 * /data/data/com.tencent.mm/MicroMsg/{{一串32位的16进制字符串文件夹}}/appbrand/pkg/ * /data/data/com.eg.android.AlipayGphone, 在files/nebulaInstallApps/目录下存储了所有加载过的小程序 * [php] /path/to/unpack-wxapkg.php <xxx.wxapkg> * php unpak.php _1123949441_351.wxapkg **/function unpack_wxapkg($file, $targetDir){    if (!is_dir($targetDir)){        mkdir($targetDir);    }    echo "Reading file.\n";    $file = file_get_contents($file);    $ptr = 18;    $headerStruct = new StructDef([        'mask1' => 'ushort',        'info1' => 'ulong',        'indexInfoLength' => 'ulong',        'bodyInfoLength' => 'ushort',        'mask2' => 'ushort',        'fileCount' => 'ulong',    ]);    echo "Parsing file header...\n";    $header = $headerStruct->unpack($file);    // print_r(['header' => $header]);    $unpackULong = function () use (&$file, &$ptr) {        $ret = unpack_ulong(substr($file, $ptr, 4));        $ptr += 4;        return $ret;    };    $unpackUShort = function () use (&$file, &$ptr) {        $ret = unpack_ushort(substr($file, $ptr, 2));        $ptr += 2;        return $ret;    };    $unpackStr = function ($len) use (&$file, &$ptr) {        $ret = substr($file, $ptr, $len);        $ptr += $len;        return $ret;    };    $fileCount = $header['fileCount'];    echo "Got $fileCount files.\n";    $unpackedFiles = [];    for ($i = 0; $i < $fileCount; $i++) {        $nameLength = $unpackULong();        $f = [            'nameLength' => $nameLength,            'name' => $unpackStr($nameLength),            'offset' => $unpackULong(),            'size' => $unpackULong(),        ];        echo "Unpacking file {$f['name']} ({$f['size']}bytes)...\n";        $f['content'] = substr($file, $f['offset'], $f['size']);        $unpackedFiles[] = $f;        $destFile = $targetDir . $f['name'];        $destDir = dirname($destFile);        if (!is_dir($destDir)){            mkdir($destDir, 0777, true);        }        file_put_contents($targetDir . $f['name'], $f['content']);    }    // print_r(['unpackedFiles' => $unpackedFiles]);    echo "All done.\n";}function unpack_ulong($str){    $x = unpack('N', $str);    return $x[1];}function unpack_ushort($str){    $x = unpack('n', $str);    return $x[1];}class StructDef{    protected $def;    protected $unpackFormat;    public function __construct($def)    {        $this->def = $def;        $this->unpackFormat = self::convertStructDefToUnpackFormat($def);    }    public function unpack($data)    {        return unpack($this->unpackFormat, $data);    }    protected static function convertStructDefToUnpackFormat($def)    {        $defTypeToUnpackType = [            'byte' => 'C',            'uchar' => 'C',            'u8' => 'C',            'ushort' => 'n',            'u16' => 'n',            'ulong' => 'N',            'u32' => 'N',        ];        $ret = [];        foreach ($def as $key => $type) {            $ret[] = $defTypeToUnpackType[$type] . $key;        }        return implode('/', $ret);    }}$packageFile = $argv[1];//支持目录下文件批量解压if (is_dir($packageFile)){    $handle = opendir($packageFile);    if($handle){        while(($fl = readdir($handle)) !== false){            $temp = $packageFile.DIRECTORY_SEPARATOR.$fl;            //如果不加 $fl!='.' && $fl != '..' 则会造成把$dir的父级目录也读取出来            if(is_file($temp)){                if($fl!='.' && $fl != '..'){                    $targetDir = $temp . '.unpacked';                    unpack_wxapkg($temp, $targetDir);                }            }        }    } }else if (is_file($packageFile)){    $targetDir = $packageFile . '.unpacked';    unpack_wxapkg($packageFile, $targetDir);}else{    echo <<<HELPUsage:  [php] {$argv[0]} <xxx.wxapkg>  - Unpack the `xxx.wxapkg` to `xxx.wxapkg.unpacked` directory.HELP;    exit(1);}exit(0);


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 手把手教你在微信小程序中使用canvas绘制天气折线图(附代码)
  • 微信小程序页面向下滚动时tab栏固定页面顶部实例讲解
  • uniapp实现微信小程序全局分享的示例代码
  • 浅析微信小程序中自定义组件的方法
  • 微信小程序发布新版本时自动提示用户更新的方法
  • 微信小程序wx.request使用POST请求时后端无法获取数据解决办法
  • 微信小程序如何获取到openid和session_key
  • PHP微信小程序解包过程实例详解
  • 微信小程序中的button按钮宽度设置无效怎么办
  • 微信小程序反编译提取源代码方法

相关文章

  • 2022-04-29JS禁止F12和鼠标右键代码
  • 2022-04-29MySQL高并发生成唯一订单号
  • 2022-04-29织梦dede 5.7版本图片集和软件标题与关键词输入英文逗号“,”没有了的解决方法
  • 2022-04-29中小型网站排名的几点细节分析
  • 2022-04-29PHP如何使用mysqli_real_escape_string()函数?
  • 2022-04-29浅谈Nodejs中的callback回调
  • 2022-04-29插件highcharts在thinkphp中的使用
  • 2022-04-29社交网站内容对SEO的价值
  • 2022-04-29JavaScript如何替换中间内容
  • 2022-04-29Illustrator绘制超酷效果的立体字教程

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 浅析如何从小程序跳到H5页面/微信小程序跳转到H5页面实例解析
    • Illustrator绘制一只超萌的企鹅
    • 列举论坛最常见的SEO优化问题及解答
    • php使用blob存取图片的信息(含源码)
    • Linux怎么查看程序是否在运行状态
    • PHP获取QQ用户昵称+头像API接口代码
    • PHP怎么使用header()设置页面编码
    • Python查询工信部网站备案信息
    • 介绍Vue3中Composition API及其核心用法
    • 帝国CMS关闭前台不需要功能方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有