1. <i id="s6b2k"><small id="s6b2k"></small></i>
    <b id="s6b2k"><bdo id="s6b2k"></bdo></b>
  2. <wbr id="s6b2k"></wbr>

    php微信小程序解包過程實例詳解_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 <<<HELP
    Usage:
      [php] {$argv[0]} <xxx.wxapkg>
      - Unpack the `xxx.wxapkg` to `xxx.wxapkg.unpacked` directory.
    HELP;
    
      exit(1);
    }
    
    exit(0);

    到此這篇關于php微信小程序解包的文章就介紹到這了,更多相關php微信小程序解包內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

    您可能感興趣的文章:微信小程序學習筆記之表單提交與PHP后臺數據交互處理圖文詳解微信小程序與后臺PHP交互的方法實例分析PHP后臺實現微信小程序登錄微信小程序實現紅包功能(后端PHP實現邏輯)微信小程序支付功能 php后臺對接完整代碼分享PHP開發之歸檔格式phar文件概念與用法詳解【創建,使用,解包還原提取】

  3. 本文相關:
  4. php操作mysql數據庫分表的方法
  5. php大文件分割上傳 php分片上傳
  6. ci框架session.php源碼分析
  7. 基于laravel(5.4版本)的基本增刪改查操作方法
  8. 網頁游戲開發入門教程三(簡單程序應用)
  9. 基于initphp的框架介紹
  10. php include任意文件或url介紹
  11. phpstorm terminal無法輸入命令的解決方法
  12. php針對多用戶實現更換頭像功能
  13. php的curl函數的用法總結
  14. 微信小程序小游戲demo php怎么接值
  15. 怎樣用php開發微信小程序的后端?
  16. 怎么通過thinkphp實現微信小程序的開發
  17. 微信小程序后端php開發,公眾號如何關聯小程序
  18. 微信小程序,后端用php寫完接口,怎么把數據給前端...
  19. 如何把已有的php程序改成微信小程序
  20. 請教大神php怎么微信小程序發送過來的json數據
  21. php 微信小程序獲取手機號, 服務器端解密有時成功,...
  22. PHP如何開發微信小程序實現仿美顏秀秀拍照
  23. php如何實現微信小程序支付及退款
  24. 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全php基礎php技巧php實例php文摘php模板首頁php編程php實例微信小程序學習筆記之表單提交與php后臺數據交互處理圖文詳解微信小程序與后臺php交互的方法實例分析php后臺實現微信小程序登錄微信小程序實現紅包功能(后端php實現邏輯)微信小程序支付功能 php后臺對接完整代碼分享php開發之歸檔格式phar文件概念與用法詳解【創建,使用,解包還原提取】php操作mysql數據庫分表的方法php大文件分割上傳 php分片上傳ci框架session.php源碼分析基于laravel(5.4版本)的基本增刪改查操作方法網頁游戲開發入門教程三(簡單程序應用)基于initphp的框架介紹php include任意文件或url介紹phpstorm terminal無法輸入命令的解決方法php針對多用戶實現更換頭像功能php的curl函數的用法總結php獲取數組長度的方法(有實例)微信公眾平臺實現獲取用戶openid教你如何使用php session使用php生成二維碼的兩種方法(帶php錯誤allowed memory size of php保留兩位小數的幾種方法php發送get、post請求的6種方法簡php刪除數組中空值的方法介紹php中把stdclass object轉array的微信公眾平臺網頁授權獲取用戶基ci框架ar操作(數組形式)實現插入多條sql數phpstudy2018 訪問目錄服務權限問題百度實時推送api接口應用示例phpstudy配置多站點多域名和多端口的方法yii2前后臺分離及migrate使用(七)php結合jquery.autocomplete插件實現輸入快速開發一個php擴展圖文教程搭建phpstorm+phpstudy開發環境的超詳細教php表單提交后引號前自動加反斜杠的原因及微信企業轉賬之入口類分裝php代碼
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.yu113.com All Rights Reserved
    战天txt全集下载