10分钟带你学会微信小程序的反编译

以xxxxx小程序为例10分钟带你学会微信小程序的反编译

2019-11-28 12:59:26

以一个简单的例子介绍下小程序反编译操作流程

 

  • 实验环境
  • 前置准备
  • 模拟器内软件安装
  • 获取小程序包
  • 开始解包
  • 导入开发者工具
  • 补充注意事项
  • 技术交流群
  • 有偿解包
  • uniapp 逆向服务
  • 逆向教程小程序
  • 分包教程

 

#实验环境

  • 操作系统:MacOS10.13.6
  • node:v10.8.0
  • 微信开发者工具:Stable v1.02.1910120

#前置准备

  • 需要安装pc端模拟器工具可以选择网易MuMu,或者其它模拟器
  • 模拟器设置中配置共享文件夹
  • 下载反编译工具:链接:https://pan.baidu.com/s/1BXwx_iwcELab0HFWw7Gbtg 
    提取码:phsu 
     

#模拟器内软件安装

需要安装以下两个软件

  • RE文件管理器(查看小程序压缩包)
  • 微信(使用微信打开小程序以下载小程序包)

#获取小程序包

1.使用自己手机上的微信打开"xxxxxx"小程序,可以添加到"我的小程序"
2.打开模拟器的微信并登录
3.在模拟器微信的下拉小程序最近使用历史中打开"xxxxx",如果历史记录中没有就在我的小程序中找一找
4.打开小程序等待加载之后就可以去找源码包了
5.打开RE文件管理器,进入到以下路径查找源码包(可以根据下载时间区分出你想要的源码包)

/data/data/com.tencent.mm/MicroMsg/4c8188dbf07eec893d0ac90974657aeb/appbrand/pkg

6.拷贝小程序包至模拟器共享文件夹,为了方便解包重命名为zyel

获取完毕。

#开始解包

#解包流程

1.进入克隆下来的反编译工具根目录
如果没有安装过npm包就先执行安装

npm install

2.解包

node wuWxapkg.js <path/to/zyel.wxapkg>

可以看到命令行输出如下提示

Unpack file zyel2.wxapkg...Header info:firstMark: 0xbeunknownInfo:  0infoListLength:  1547dataLength:  971189lastMark: 0xedFile list info:fileCount:  42
{ name: '/components/home/images/home-icon1.png',off: 1561,size: 2969 }
{ name: '/components/home/images/home-load-btn.png',off: 4530,size: 235 }
{ name: '/components/key/imgs/back.png', off: 4765, size: 4369 }
{ name: '/images/arrow-right.png', off: 9134, size: 223 }
{ name: '/images/detailsCoins-btn1-ac.png',off: 9357,size: 1180 }
{ name: '/images/detailsCoins-btn1.png', off: 10537, size: 614 }
{ name: '/images/detailsCoins-btn2-ac.png',off: 11151,size: 936 }
{ name: '/images/detailsCoins-btn2.png', off: 12087, size: 546 }
{ name: '/images/home-ac.png', off: 12633, size: 2281 }
{ name: '/images/home.png', off: 14914, size: 1565 }
{ name: '/images/mine-ac.png', off: 16479, size: 2324 }
{ name: '/images/mine-icon1.png', off: 18803, size: 1115 }
{ name: '/images/mine-icon3.png', off: 19918, size: 852 }
{ name: '/images/mine-icon4.png', off: 20770, size: 1038 }
{ name: '/images/mine-icon5.png', off: 21808, size: 1039 }
{ name: '/images/mine-icon6.png', off: 22847, size: 9137 }
{ name: '/images/mine-icon7.png', off: 31984, size: 1796 }
{ name: '/images/mine.png', off: 33780, size: 1682 }
{ name: '/images/ranking-one.png', off: 35462, size: 4883 }
{ name: '/images/ranking-three.png', off: 40345, size: 4993 }
{ name: '/images/ranking-two.png', off: 45338, size: 4928 }
{ name: '/images/shop-ac.png', off: 50266, size: 2393 }
{ name: '/images/shop.png', off: 52659, size: 1807 }
{ name: '/app-config.json', off: 54466, size: 18010 }
{ name: '/app-service.js', off: 72476, size: 728734 }
{ name: '/pages/CSR/CSR.html', off: 801210, size: 3759 }
{ name: '/pages/card/card.html', off: 804969, size: 5518 }
{ name: '/pages/coinRecord/coinRecord.html',off: 810487,size: 3832 }
{ name: '/pages/coinShop/coinShop.html', off: 814319, size: 469 }
{ name: '/pages/detailsCoins/detailsCoins.html',off: 814788,size: 4498 }
{ name: '/pages/home/home.html', off: 819286, size: 5043 }
{ name: '/pages/integralDec/integralDec.html',off: 824329,size: 3153 }
{ name: '/pages/integralTask/integralTask.html',off: 827482,size: 5007 }
{ name: '/pages/login/login.html', off: 832489, size: 1649 }
{ name: '/pages/mine/mine.html', off: 834138, size: 2429 }
{ name: '/pages/orderList/orderList.html',off: 836567,size: 5701 }
{ name: '/pages/ranking/ranking.html', off: 842268, size: 4388 }
{ name: '/pages/share/share.html', off: 846656, size: 5327 }
{ name: '/pages/shop/creditBuy.html', off: 851983, size: 2730 }
{ name: '/pages/shop/shop.html', off: 854713, size: 3175 }
{ name: '/pages/welfare/welfare.html', off: 857888, size: 751 }
{ name: '/page-frame.html', off: 858639, size: 114111 }
Saving files...
Unpack done.
Split app-service.js and make up configs & wxss & wxml & wxs...
Decompile ./pages/CSR/CSR.wxml...
Decompile success!
Decompile ./pages/card/card.wxml...
Decompile success!
Decompile ./pages/coinRecord/coinRecord.wxml...
Decompile success!
Decompile ./pages/coinShop/coinShop.wxml...
Decompile success!
Decompile ./pages/detailsCoins/detailsCoins.wxml...
Decompile success!
Decompile ./pages/home/home.wxml...
Decompile success!
Decompile ./pages/integralDec/integralDec.wxml...
Decompile success!
Decompile ./pages/integralTask/integralTask.wxml...
Decompile success!
Decompile ./pages/login/login.wxml...
Decompile success!
Decompile ./pages/mine/mine.wxml...
Decompile success!
Decompile ./pages/orderList/orderList.wxml...
Decompile success!
Decompile ./pages/ranking/ranking.wxml...
Decompile success!
Decompile ./pages/share/share.wxml...
Decompile success!
Decompile ./pages/shop/creditBuy.wxml...
Decompile success!
Decompile ./pages/shop/shop.wxml...
Decompile success!
Decompile ./pages/welfare/welfare.wxml...
Decompile success!
Guess wxss(first turn)...
Splitting "/Users/gangxue/demo/wxappUnpacker/zyel/app-service.js" done.
Import count info: {}
Guess wxss(first turn) done.
Generate wxss(second turn)...
Generate wxss(second turn) done.
Save wxss...
Split and make up done.
Delete files...
Deleted.File done.
Total use: 3148.983ms

3.如果想单独执行config、js、wxml、wxss的反编译可以在解包时加-o参数不做后续操作

#工具用法

  • node wuConfig.js <files...> 将 app-config.json 中的内容拆分到各个文件对应的 .json 和 app.json , 并通过搜索 app-config.json 所在文件夹下的所有文件尝试将 iconData 还原为 iconPath 。
  • node wuJs.js <files...> 将 app-service.js (或小游戏中的 game.js ) 拆分成一系列原先独立的 javascript 文件,并使用 Uglify-ES 美化,从而尽可能还原编译前的情况。
  • node wuWxml.js [-m] <files...> 将编译/混合到 page-frame.html ( 或 app-wxss.js ) 中的 wxml 和 wxs 文件还原为独立的、未编译的文件。如果加上-m指令,就会阻止block块自动省略,可能帮助解决一些相关过程的 bug 。
  • node wuWxss.js <dirs...> 通过获取文件夹下的 page-frame.html ( 或 app-wxss.js ) 和其他 html 文件的内容,还原出编译前 wxss 文件的内容。
  • node wuWxapkg.js [-o] [-d] [-s=<Main Dir>] <files...> 将 wxapkg 文件解包,并将包中上述命令中所提的被编译/混合的文件自动地恢复原状。如果加上-o指令,表示仅解包,不做后续操作。如果加上-d指令,就会保留编译/混合后所生成的新文件,否则会自动删去这些文件。同时,前面命令中的指令也可直接加在这一命令上。而如果需要解压分包,请先解压主包,然后执行node wuWxapkg.js [-d] -s=<Main Dir> <subPackages...>,其中Main Dir为主包解压地址。除-d-s外,这些指令两两共存的后果是未定义的(当然,是不会有危险的)。

#导入开发者工具

打开微信开发者工具,导入项目即可
注意在xxxxxxx解包后的项目设置中

  • 注意勾选不校验合法域名
  • 勾掉e6转es5(这个小程序貌似并没有使用es6语法)

解包其它小程序可能项目配置略有不同。

#补充注意事项

有网友联系反馈说了体验版的解包问题,这里备注说明下。
体验版的需要找到debug开头的文件(形如:debug_xxx 是没有后缀的),然后拿到文件后手动添加wxapkg后缀再执行以上操作,即可完成解包。

#技术交流群

请扫码阅读说明后入群:
交流群

#有偿解包

博主提供有偿解包服务,有兴趣的可以加w私聊。

#uniapp 逆向服务

提供原生开发的小程序及基于uniapp开发的小程序的解包源码转换为vue源码的付费服务
有定制服务需求的可以添加逆向助手微信拉你进群。
uniapp逆向

#逆向教程小程序

为小程序逆向而生的小程序
逆向教程

#分包教程

  • 微信小程序分包反编译教程

本文链接: http://xuedingmiao.com/blog/xcx_unpack.html

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

反编译Android APK详细操作指南

早在4年前我曾发表过一篇关于《Android开发之反编译与防止反编译》的文章&#xff0c;在该文章中我对如何在Windows平台反编译APK做了讲解&#xff0c;如今用Mac系统的同学越来越多&#xff0c;也有很多朋友问我能否出一篇关于如何在Mac平台上反编译APK的文章&#xff0c;今天呢…

用idea新建springboot项目遇到的@Restcontroller不能导入的问题

我个人的解决方法如下&#xff1a; 1.springboot默认有 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>o…

Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案

Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案&#xff0c;ext 的CheckboxSelectionModel在后台默认选中之后&#xff0c;前台就不允许编辑的bug是存在的&#xff0c;因为CheckboxSelectionModel没有Disabled"true"的设置&#xff0c;只能想办…

广州海珠区计算机学校,2019广州海珠区电脑派位和对口直升表

点击即可领取期末各科试卷预约课程还可获赠免费的学习复习诊断— — 学而思爱智康课程优势 — —12年本地化教研沉淀个性化学习方式专属教学服务优质的教学系统2019广州海珠区电脑派位和对口直升表&#xff0c;各位的爸爸妈妈们看过来&#xff01;&#xff01;看看目标学校都招…

android的消息队列机制

android下的线程&#xff0c;Looper线程&#xff0c;MessageQueue&#xff0c;Handler&#xff0c;Message等之间的关系&#xff0c;以及Message的send/post及Message dispatch的过程。 Looper线程 我们知道&#xff0c;线程是进程中某个单一顺序的控制流&#xff0c;它是内核…

KNN算法检测手势动作

KNN算法原理&#xff1a; KNN&#xff08;k-nearest neighbor&#xff09;是一个简单而经典的机器学习分类算法&#xff0c;通过度量”待分类数据”和”类别已知的样本”的距离&#xff08;通常是欧氏距离&#xff09;对样本进行分类。 这话说得有些绕口&#xff0c;且来分解…

IIS负载均衡(转)

在大型Web应用系统中&#xff0c;由于请求的数据量过大以及并发的因素&#xff0c;导致Web系统会出现宕机的现象&#xff0c;解决这一类问题的方法我个人觉得主要在以下几个方面&#xff1a; 1.IIS 负载均衡。 2.数据库 负载均衡。 3.系统架构优化&#xff0c;比如报表服务器…

maven报错Non-resolvable parent POM for com.wpbxin:springboot2-first-example:0.0.1-SNAPSHOT: Could not

文章目录 一、maven报错二、一些说明三、出现问题的原因和几种解决方法 忽略SSL证书检查生成证书并导入到 JRE security 中使用默认的 maven 中央仓库使用 http 的镜像库四、参考链接 记录使用 maven 时遇到的问题。第一种方法最方便&#xff0c;亲测能用。 一、maven报错 mav…

计算机科技与技术对应岗位,计算机技术与软件专业技术资格名称及岗位基本任职条件...

超越梦想&#xff1a;计算机技术与软件专业技术资格名称及岗位基本任职条件专业资格名称对应专业技术职务等级学位或学历要求资历要求信息系统项目管理师、系统分析师、系统架构设计师、网络规划设计师、系统规划与管理师高级博士学位聘任工程师满2年硕士学位聘任工程师满4年本…

Intellij idea 出现错误 error:java: 无效的源发行版: 11解决方法

Select the project, then File > ProjectStructure > ProjectSettings > Modules -> sources You probably have the Language Level set at 9: Just change it to 8 借用下别人的图片&#xff0c; 我的默认是11报的错&#xff0c; 改成8后就好了

计算机房机柜标准尺寸,有哪些参数和尺寸符合机房机柜的安装要求

现如今服务器机房越来越多&#xff0c;不管是自己托管服务器还是租用服务器&#xff0c;机房机柜的选择是很重要的。机房机柜也会跟其高度厚度尺寸等相关。对于需要运行环境和要求高的机房&#xff0c;还需要选择有智能系统的机柜才行。还需要根据一些机房机柜的参数来考虑是否…

9月第1周国内IT技术类网站:CSDN覆盖数持续走低

根据国际统计机构Alexa公布的最新数据显示&#xff0c;9月第1周&#xff08;2013-09-02至2013-09-08&#xff09;&#xff0c;国内IT技术类网站排行榜中&#xff0c;CSDN以1710居于榜首&#xff0c;第二位是1170的博客园&#xff0c;第三位是670的51CTO。下面是具体情况&#x…

YOLOv3改进方法增加特征尺度和训练层数

YOLOv3改进方法 YOLOv3的改进方法有很多&#xff0c;本文讲述的是增加一个特征尺度。 以YOLOv3-darknet53&#xff08;ALexeyAB版本&#xff09;为基础&#xff0c;增加了第4个特征尺度&#xff1a;104*104。原版YOLOv3网络结构&#xff1a; YOLOv3-4l网络结构&#xff1a; 即…

uva 610(tarjan的应用)

题目链接&#xff1a;http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id23727 思路&#xff1a;首先是Tarjan找桥&#xff0c;对于桥&#xff0c;只能是双向边&#xff0c;而对于同一个连通分量而言&#xff0c;只要重新定向为同一个方向即可。 1 #include<ios…

Win7搭建NodeJs开发环境以及HelloWorld展示—图解

Windows 7系统下搭建NodeJs开发环境&#xff08;NodeJsWebStrom&#xff09;以及Hello World&#xff01;展示&#xff0c;大体思路如下&#xff1a;第一步&#xff1a;安装NodeJs运行环境。第二步&#xff1a;安装WebStrom开发工具。第三步&#xff1a;创建并运行NodeJs项目展…

计算机一级windows7操作,计算机等级一级:Windows7应用之小技巧

为了帮助广大考生更好的复习&#xff0c;帮考网综合整理提供了计算机等级考试一级微机知识:Windows7应用之小技巧&#xff0c;以供各位考生复习参考&#xff0c;希望对考生复习有所帮助。从年初开始&#xff0c;断断续续的&#xff0c;windows7使用也有一段时间&#xff0c;碰到…

MySQL5.6忘记root密码(win平台)

1、首先net stop mysql服务&#xff0c;并且切换到任务管理器&#xff0c;有与mysql有关的&#xff0c;最好关闭进程。 2、运行CMD命令切换到MySql安装bin目录&#xff0c;下面是我的mysql安装目录 cd C:\Program Files\MySQL\MySQL Server 5.6\bin 接着执行mysqld --skip-gra…

单片机四位数加减计算机程序,51单片机简易计算器程序 实现数字的加减乘除运算...

//头文件#define uint unsigned int#define uchar unsigned charsbit lcdenP1^1; //LCD1602控制引脚sbit rsP1^0;sbit rwP1^2;sbit busyP0^7;//LCD忙char i,j,temp,num,num_1;long a,b,c; //a,第一个数 b,第二个数 c,得数float a_c,b_c;uchar flag,fuhao;//flag表示是否有运…

在pandas中遍历DataFrame行

有如下 Pandas DataFrame&#xff1a; import pandas as pd inp [{c1:10, c2:100}, {c1:11,c2:110}, {c1:12,c2:120}] df pd.DataFrame(inp) print df 上面代码输出&#xff1a; c1 c2 0 10 100 1 11 110 2 12 120 现在需要遍历上面DataFrame的行。对于每一行&#x…

MySQL索引的Index method中btree和hash的区别

2019独角兽企业重金招聘Python工程师标准>>> 在MySQL中&#xff0c;大多数索引&#xff08;如 PRIMARY KEY,UNIQUE,INDEX和FULLTEXT&#xff09;都是在BTREE中存储&#xff0c;但使用memory引擎可以选择BTREE索引或者HASH索引&#xff0c;两种不同类型的索引各自有其…