ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

小程序逆向加解密实录-元一软件

小程序逆向加解密实录-元一软件 小程序逆向加解密实录反编译想要逆向wx小程序首先要找到小程序的路径Android/data/data/com.tencent.mm/MicroMsg/xxxxxxxxxxxxxxxxxxxxxxxxx(wxid)/appbrand/pkg/xxx.wxapkg(小程序版本号.wxapkg)iOS/User/Containers/Data/Application/xxxx-xxx-xxxxx-xxxx-xxxxxxx(wx安装后的uuid)/Library/WechatPrivate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(wxID)/WeApp/LocalCache/release或debug/wxxxxxxxxxxxxxxxx(小程序id)/xxx.wxapkg(小程序版本号.wxapkg)此目录下存放的.wxapkg文件就是小程序打包后的文件。如果想找到自己需要的小程序可将此目录下的文件都删除重新打开小程序新生成的wxapkg文件就是要找的小程序。小程序逆向工具https://github.com/xuedingmiaojun/wxappUnpacker解包主包windows系统使用: ./bingo.bat testpkg/master-xxx.wxapkg Linux系统使用: ./bingo.sh testpkg/master-xxx.wxapkg解包子包windows系统使用: ./bingo.bat testpkg/sub-1-xxx.wxapkg-s../master-xxx Linux系统使用: ./bingo.sh testpkg/sub-1-xxx.wxapkg-s../master-xxx静态分析通过抓包分析登录包及以前的数据包均未加密只采用了base64编码而登录后的包则使用了加密我们打开反编译后的项目通过接口名称搜索该接口其实就是传了一个{}大括号关键则是t方法。我们继续追踪该方法最终发现data段会通过 header中有没有flag为1的标志以及有没有access_token去判断是否要加密加密则使用aes128 CBC的加密模式密钥和IV则是从一个randomString中取的现在我们来看一下这个randomString原来这个randomString是在登录时生成的一个32位的字符串本地在Storage中存储在登录时会由RSA加密通过factor字段发送至服务器我们再看一下登录包中的内容果然有factor字段。动态调试由于密钥并不固定那我们应该如何测试呢虽然js代码我们无法Hook但是却可以动态调试呀。首先安装wx开发者工具将反编译后的包导入wx开发者工具当中AppID我们使用测试号即可将项目导入后首先会报_typeof3 is not a function的错误此时我们需要将详情-本地设置-将JS编译成ES5取消勾选之后项目又会报错不在合法域名列表中此时我们需要将详情-本地设置-将不校验合法域名勾选再次编译项目发现仍有问题提示VM2_INTERNAL_STATE_DO_NOT_USE_OR_PROGRAM_WILL_FAIL is not defined后发现出现的几处均为处理异常时调用代码直接注释掉即可再次编译已无报错信息产生现在我们直接选择真机调试发现应用已经可以调试了提示第一次调试时尽量不要挂代理否则可能连不上调试器。可以先正常启动一次调试然后结束调试再挂代理再选择真机调试。我们在登录时下断点登录时会触发断点这样我们就知道randomString的值了再由之前静态分析加解密可知randomString会被分成两部分前16位为key后16位为iv。我们查看一下现在加密的数据再使用此次生成的randomString来解密发现可正常解密可以愉快的测试了。
返回列表