WX小程序已经出来很久了,发展其实一般般,就我个人来说从来没用过小程序,但是最近几款小程序的出现,就带上高潮了,跳一跳游戏,包你拼,包你听等小程序,很有意思的抢红包方式。而就在这时候,突然感觉小程序的前景还是很明朗的,但是我们不会介绍小程序怎么开发,而是考虑小程序的安全问题,我们从网上大致了解了小程序的开发流程和架构,主要依赖于网页开发,以及一个企业绑定的Appid,然后生成小程序包发布,WX用户在使用小程序功能的时候,就去网络下载到本地,解压运行,基于WX的内置WebView进行解析运行。
那么如果把小程序看成一个程序包,那么他肯定也有相对应的格式,类似于apk,dex等文件。而我们之前在原生app逆向的时候都知道,必须了解这些文件的格式。所以今天我们就先来看看微信小程序包的文件格式,这一篇也是开启小程序爆破之路的开端!下面我们先来看看WX小程序包的格式解析是什么?其实在想这个问题之前,我们需要找到突破口,因为我们知道WX本地肯定也是需要解析这个包然后运行,也就是我们需要从WX的源码中找到解析格式功能。这个突破点在哪呢?第一步肯定需要知道微信小程序包的格式是什么?我们用WX的6.6.1版本,玩了一个跳一跳游戏,会发现这个游戏包不是从服务器下发的,而是就在本地,我们也知道程序包原始项目结构大致如下:
所以说,这些文件编译之后打包成固定格式,放在WX应用的某个地方,而这个地方我们最能想到的就是assets目录了,所以就解压WX应用,去assets目录下查看:
从assets目录下,可以通过分析就这几个文件目录最有可能,依次排查查看之后发现,在whatsnew_embed目录中看到类似于这个文件:
我们如果去WX后台申请过的都知道:Appid格式是wx开头,后面是一串字符格式,所以这里肯定这个文件和小程序包有非常大的关系。
为了确定是否的确是这个文件格式,我们用Jadx打开WX的dex文件,这里要注意:WX的这个版本的包已经非常庞大了,所以最好不要直接用Jadx打开apk,不然电脑会卡死的,我们依次打开5个dex文件即可,就这样我的电脑已经卡的不行了,但是没办法为了分析必须打开5个dex,才能搜索全!
通过搜索发现,在classes4.dex中找到了,点击进入查看保存到本地的目录:
看看a.field_pkgPath字段值如何获取:
通过ad.ae方法获取,不过这里发现点击这个类是无法跳转的,而在Jadx中这种情况一般就是这个类或者方法在其他dex中实现的,所以我们需要去其他dex中查找: