小程序解密+反编译
将访问的小程序进行解密和反向编译拿到部分源码,然后对源码进行安全审计,分析出其中可能存在的信息泄露或者说路径等一些关键信息。
前置环境准备
1、nodejs环境安装(https://nodejs.org/en,官网安装即可)
2、解密反编译工具(wxapkg:https://github.com/wux1an/wxapkg/releases/tag/v1.5.0)
3、微信小程序(一般大厂的小程序可能存在无法反编译,选一些简单点的就行)
反编译最初目录结构
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| 1myApp/ 2 ├── app.json ——小程序全局配置文件,用于定义小程序的基本属性和页面路径。) 3 ├── app.wxss ——全局样式表,定义整个小程序的公共样式。) 4 ├── app.js ——小程序的入口文件,可以在这里进行全局数据初始化、监听、处理等。 5 ├── project.config.json ——项目配置文件,用于设置编译模式、调试模式、云开发环境等信息。 6 ├── pages/ - 存放所有页面文件的地方,每个页面由以下四个同名文件组成: 7 │ ├── index/ 8 │ │ ├── index.wxml ——页面结构文件,使用类似HTML的WXML语言编写。 9 │ │ ├── index.wxss ——页面样式文件,使用WXSS语言编写,用于定义该页面的样式,类似css 10 │ │ ├── index.js ——页面逻辑文件,使用JavaScript编写,用于处理页面逻辑和数据交互。 11 │ │ └── index.json ——页面配置文件,用于定义页面的窗口样式和一些其他页面级别的配置。 12 │ └── about/ 13 │ ├── about.wxml 14 │ ├── about.wxss 15 │ ├── about.js 16 │ └── about.json 17 ├── components/ ——存放可复用的组件文件夹,组件同样有 .wxml, .wxss, .js 和 .json 文件。 18 │ └── myComponent/ 19 │ ├── myComponent.wxml 20 │ ├── myComponent.wxss 21 │ ├── myComponent.js 22 │ └── myComponent.json 23 ├── utils/ ——存放工具函数的文件夹,例如日期处理、数据加密解密等。 24 │ └── api.js 25 ├── static/ ——存放静态资源如图片、字体、音频视频等文件。 26 │ └── logo.png 27 ├── api/ ——通常用于存放网络请求相关的代码,如与后端服务器的数据交互。
上述结构中,pages/index/ 目录下的文件构成了首页,而 pages/about/ 目录下的文件则构成了关于页面。每个页面的四个文件组成了一个完整的页面模块。
|
反编译目录结构(微信服务器整合)
反编译后的目录结构主要由反编译的工具决定,反编译后的目录结构除了上述最原始的目录,还包括一下由微信服务器整合过后的结构。
1 2 3 4 5 6 7 8 9
| 只是把部分文件进行了合并 app-config.json 小程序工程主要包括工具配置 project.config.json,全局配置 app.json 以及页面配置 page.json 三类 JSON 配置文件。
app-service.js 在小程序项目中 JS 文件负责交互逻辑,主要包括 app.js,每个页面的 page.js,开发者自定义的 JS 文件和引入的第三方 JS 文件,在“编译”后所有这些 JS 文件都会被汇总到app-service.js 文件中
app-wxss.js 在小程序项目中 wxss 文件负责交互逻辑,主要包括 app.wxss,以及每个页面的wxss文件
|
开始反编译
1、定位微信小程序目录的位置
登录微信——>设置——>文件管理
然后随机挑选一个小程序打开(尽量多点点其中的功能点)
定位到该目录下的Applet,通过时间找到指定小程序的目录即可
2、使用解密&反编译工具开始反编译
反编译的工具还有unveilr(https://github.com/junxiaqiao/unveilr-v2.0.0)、小锦哥小程序工具([https://get-shell.com/3458.html](https://get-shell.com/3458.html)),不过经过反编译后的结果对比得出:虽然wxapkg反编译的内容比上述两款更多,但unveilr反编译更符合传统的微信小程序的目录结构,更适合我们分析,只能说各有优劣。
1、wxapkg
1
| wxapkg.exe unpack -o unpack -r "E:/ASUS/Documents/WeChat Files/Applet/wx1467dbe575243210"
|
但这并不是最初的原项目文件结构,原因是微信服务器会将小程序源码中所有的“js”文件压入“app-service.js”文件中,将所有的“json”文件压入“app-config.json”中,将所有的“wxml”文件压入“page-frame.js”文件中,“wxss”则在处理之后以“js”文件的形式存留在对应页面目录之下。
2、unveilr
1
| unveilr.exe wx "D:/WeChat Files/Applet/wx7c8d593b2c3a7703/92/" -o ./tyt -f
|
3、编译完成
访问反编译成功的文件,开始提取敏感信息和代码审计即可
常见漏洞
弱口令、AS、AK、敏感信息、接口泄露