WXAPKG 解包后如何提取页面逻辑?

前天小程序分发下载执行包,我也下载了一些,用来学习。

按照我的规划,这部分的内容整体会分为4~5次推送完成,首先是配置的提取和页面逻辑的提取,这部分会比较快,很容易就能提取出来,也最先讲,其次是 WXSS 的提取,这部分是相对来说难一些,但是比页面结构提取还是要简单一些的,最后则会更新如何提取页面结构的部分。页面结构部分最终我可能会给出一个函数,通过执行这个函数,就可以提取小程序中的页面。

话不多说,我们开始今天的内容。

我们的页面逻辑在哪?

解压完小程序后,我们可以看到解压出来的程序里有这几个文件。当然,你解压的小程序可能是有所不同的。

但是一定会有的有以下四个:

page-frame.html:存放了我们的页面结构的文件,整个小程序的 WXML 都会处理后放入这个文件,比如你可以看下截图

app-config.json:其实是我们小程序根目录的app.json,处理后就变成了app-config.json。格式化后的代码如下

pages:页面样式存放目录,实际上是将我们的 wxml 处理后,将 wxss 放在这里。

app-service.js:页面逻辑所在位置,我们等下就是要解析这个。

如何看 app-service.js

小程序的App-Service.js有两种状态,一种是没有进行 minify 处理的,另外一种是已经进行了 minify 处理过的。

没有处理过的

处理过的

两种文件无论是否经过 minify 处理,我们都一视同仁,对其进行格式化处理。

这里我使用的是 BeJSON 的 JS 格式化工具(www.bejson.com/jshtml_format/),你自己可以选择合适的使用。

将 app-service.js 文件的代码复制到这里,

然后点击「格式化」,你就可以得到处理后的文件。

将这些代码复制回app-service.js文件中。

找到 app-service.js 文件中的页面逻辑文件布局

首先,我们要说明一下这个文件的加载逻辑,这样有助于你理解如何区分哪些代码是哪个文件的。

在app-service.js文件中,小程序优先加载各个依赖库文件,所以你在最上面看到的都是小程序用到的依赖库,如果你的小程序对此不是特别的依赖,可以不用看。

然后加载的是app.js,也就是我们小程序开发时根目录下的app.js,最后是小程序各个页面的 js 文件,这个加载的顺序和 app-config.json 文件的加载顺序是一致的(这个文件的介绍你可以看看我今天的第二篇推文)。

找找页面逻辑

如果你把所有的函数都压缩起来,你会发现整个文件长这个样子:

我们可以看出,整个文件的关键是 这个函数,我们只要找到这个函数,就能找到我们要的文件了。

我们再打开其中一个看看

在去除了外层函数的包裹和声明后,小程序的app对象一下就出现在了我们的眼前。

同样的,我再找个 page 的定义也看一下。

同样的,我们的 Page 对象也能很轻松的找到。

剩下的就是,打开我们要查看的页面的定义,查看具体的函数代码了。

总结

如何找到小程序的页面逻辑?

解包

找到 app-service.js 文件,将其代码进行格式化,此处推荐 BeJSON 的格式化工具

找到 app-service.js 文件中的 函数,这个函数的中会包含我们要查询的库文件、应用文件和页面文件的页面逻辑部分。

此文章仅用做学习!

本文来自企鹅号 - 西秦说云媒体

发表于

我来说两句

1 条评论
登录 后参与评论

相关文章

来自专栏Vamei实验室

Linux文件系统的实现

Linux文件管理从用户的层面介绍了Linux管理文件的方式。Linux有一个树状结构来组织文件。树的顶端为根目录(/),节点为目录,而末端的叶子为包含数据的文...

2185
来自专栏静默虚空的博客

Babel 入门指南

Babel 入门指南 ​⚠ 注意: Babel 可以与很多构建工具(如 Browserify、Grunt、Gulp 等)进行集成。由于本教程选择 Webpa...

1975
来自专栏ytkah

dedecms前端无法调用自定义变量怎么解决

  网友问ytkah说他的dedecms前端无法调用自定义变量要怎么解决,登录他的网站后台看了一下,自定义变量已经添加了,也写入了数据库表中,但是就是前台没办法...

2683
来自专栏Java架构沉思录

Nginx从入门到实战,一学就会!

Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。本文的作者为「静默虚空」 ,可点击文...

582
来自专栏北京马哥教育

Linux文件系统的实现

1476
来自专栏前端新视界

关于 Angular 跨域请求携带 Cookie 的问题

2154
来自专栏Vamei实验室

C编译: makefile基础

在编译一个大型项目的时候,往往有很多目标文件、库文件、头文件以及最终的可执行文件。不同的文件之间存在依赖关系(dependency)。比如当我们使用下面命令编译...

19910
来自专栏Java后端技术

关闭Eclipse的控制台console自动跳出

  但我们在做开发的时候,默认情况下eclipse的控制台如果有东西输出时,会默认由最小化跳出来,有时候会感觉很烦人,怎么解决这个问题呢?

703
来自专栏Spring相关

Spring Boot 日志配置

默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了...

956
来自专栏Web项目聚集地

超详细的Nginx简易教程,一学就会!

Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。本文的作者为「静默虚空」 ,可点击文...

713

扫码关注云+社区