一、微信小程序反编译是什么?
微信小程序大家都不陌生,但是微信小程序反编译可能就不是那么多人了解了。其实反编译就是一个逆向的过程,正常开发都是编代码然后打包生成程序,这个过程就是开发到上线的过程,而反过来将产品还原到源代码的过程就是反编译。所以微信小程序反编译就是将一个小程序还原能看到代码的过程。
二、微信小程序反编译作用是什么?
反编译一般对于网络安全人员来说可以去找源代码漏洞,也可以去断点调试找小程序的漏洞等等。
三、微信小程序反编译如何实战?
1.环境工具:nod
我以macbook演示,当然这些工具跨平台都能用。
首先终端输入以下命令,出现版本说明nodejs环境配置好了:
这是反编译脚本工具:
2.获取小程序包:
一般在安卓手机这个目录:/data/data/com.tencent.mm/MicroMsg/{{user哈希值}}/appbrand/pkg
不同的设备对应不同的目录,手机进入小程序,会在对应目录生成几个程序包,这几个程序包就是对应小程序的包,包大致分三种:基础包、主包、分包。当然这些包名称是人为的叫法,基础包内存一般最大,主包其次,最小的是分包。
我们只需要主包和分包就可以了,首先反编译主包,其次是分包:
经过上面对主包和子包分别反编译之后会生成两个文件夹。
3.接着就是包合并的过程:
定位到主包文件夹中app.json文件里面的subpackages里面的root属性(里面“packageA/”就是定义的子包文件夹):
去子包文件夹找到该名称的文件夹,将它复制到主包文件夹里面,替换掉原先主包已经存在的该文件夹。
到此包合并结束。
3.调试程序:
接着打开微信开发者工具,将主包文件夹导入,在设置在勾选上“不校验合法签名”:
最后一步就是调试,这也是最难点,因为Console会有一些报错信息,需要一一解决。
可以看到第一个报错信息说没有插件注册,定位这个页面,搜索插件,能够看到这里获取WechatSI
的值,获取失败,所以插件plugin显示没有注册,这个错误是因为小程序开发的时候需要用到开发者绑定的
身份id这一类的东西,这里就想办法不让它获取,直接给S置为空对象,后面的给他删除或者注释掉:
同理其它插件未注册错误也类似处理,当然在这个过程可能会遇到其它各种各样的错误,这些都需要自己去学习JS语法,对JS越熟悉解决这个错误越简单。最后错误调试完了之后,就能看到小程序还原的界面了,到了这里就可以开始做安全测试了:
案例:
上面我讲述了微信小程序反编译的步骤过程,现在拿一个小程序举例进行一次水平越权漏洞的探寻:
一、反编译小程序找敏感数据
首先是反编译一个小程序源码(当然它已经做过混淆了),能够看到这个小程序里面是用AES加密处理数据之间的传输的。能够发现其中的key和iv值(其实开发一开始是直接给key和iv赋值的,后来通报漏洞之后,他仅仅隐藏了一下这两个值,然后这边调用。实际上漏洞还是没有修复):
二、敏感数据配合算法合并
可以发现开发人员写好了key和iv值,然后去调用这两个值,然后还对这加密做了混淆处理(大致是这样encryptzmt加密,decrytzmt解密两个过程):
三、加解密数据
接下来将之前得到的key和iv值扣进来然后和这加解密函数放一起写成一个js文件,最后用html引用这个js文件,去尝试F12调用:
将小程序抓到的请求加密包进行解密操作:
能够发现成功解密,接下来就是对customerId进行遍历,将遍历好的ID值再加密,加密之后进行burpsuite重放,得到其他人信息加密的响应包,将加密的响应包再次解密就能看到敏感信息。至此证明水平越权漏洞存在。
原文作者:天下第一
转载来自FreeBuf.COM
原文始发于微信公众号(听风安全):微信小程序反编译浅析及实战
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论