会员登录 立即注册

搜索

微信小程序接口数据安全

[复制链接]
崎山小鹿 发表于 2024-3-23 16:41:05 | 显示全部楼层 |阅读模式
崎山小鹿
2024-3-23 16:41:05 1510 7 看全部
小程序的本质其实就是一个混合模式应用,小程序的页面样式业务逻辑最终都会被打包成JS代码,代码安全问题的核心就变成了如何给JS代码加密,对于JS代码的保护,必须要混淆和加密共用。单独的JS源代码加密,是行不通的,更不可能有所谓的JS不可逆加密。普通页面的JS代码在浏览器端执行时,必须转解密还原成原始代码,才能被浏览器的JS引擎识别和运行。在解密后,会存在完整的原始JS代码。手机端小程序的JS代码是运行在JSCore中的,必须还原成原始代码才能被JS引擎所识别,还原之后有多种方法可将原始的JS代码显示出来,而混淆只是增加了还原的成本。因为小程序代码是明文存放在微信的CDN服务器上进行分发的,所以如果使用了代码保护或者使用第三方框架比如uniapp、mpvue等进行开发会借助webpack打包器进行压缩混淆操作,那么小程序反编译之后得到的实际上是混淆状态的明文代码,只是易读性差了些。

混淆方案大致有两类,正则替换和语法树替换,语法树替换的混淆方案更加安全.

云开发
什么是微信云开发。它是一项基于微信小程序生态的云服务,提供了完整的后端支持,包括云函数、云数据库、云存储等多个功能模块。通过微信云开发,我们可以快速构建小程序应用,并且无需搭建服务器,仅需使用微信公众平台提供的云服务即可。

重要的东西可以用云函数去实现,这样别人几乎不可能拿到你的核心代码了,而且运维也不用操心。云函数的通讯都是基于微信的私有链路加密的,几乎不存在破解的可能,所以可以放心使用,多去尝试云函数化。
云开发的appid和资源进行绑定的,而且必须走微信私有协议。小程序使用云函数只是根据api(wx.cloud.callFunction)调用,用别的appid也没办法调用私有资源,除非你主动环境共享(也只限制同一主体)就目前情况,被无感盗用几率为0。
iShot_2022-10-17_11.28.07.png

需要注意的是 project.config.json 里要配置好 cloudfunctionRoot ,不配置的话反编译会包含云函数代码。



接口加密
属于协议层的方法了。
通过服务和js的一种协议自动生成。生成的密钥最好也是动态的。比如token转16进制 再通过二进制位移,服务端再通过一样的逻辑去反推密钥。再解密数据。这些密钥生成的逻辑代码要混淆的够好。破解的难度就越高。

TLS通过建立客户端和服务器之间的安全通道,确保传输的数据是 机密的、经认证的和未被修改的。
TLS工作在 传输层协议和应用层协议之间。
TLS通过使用证书和可信证书颁发机构对服务器(或客户端)进行身份验证,从而抵御中间人攻击。

为什么有些软件如Fiddler可以还原https报文?
Fiddler是通过中间代理的方式抓取报文,还原https报文的前提是在客户端的根证书列表下加入Fiddler生成的CA根证书。这样Fiddler就成为CA,可以伪造数字证书,伪装成服务器。但是只能用于测试,不能实现真正意义上的窃取数据。

反抓包策略 那我们应该如何防止被抓包呢?可以使用SSL-Pinning技术来反抓包。因为被抓包主要是由于伪造了一个假的服务端证书给了客户端,音粗可以同时在客户端也保存一份服务端的证书,就可以知道数据来源的证书是不是真实服务端来源了。SSL-pinning有两种方式: 证书锁定(Certificate Pinning) 公钥锁定(Public Key Pinning)
证书锁定 证书锁定是SSL/TLS加密的额外保证手段。它会将服务器的证书公钥预先保存在客户端。在建立安全连接的过程中,客户端会将预置的公钥和接受的证书做比较。如果一致,就建立连接,否则就拒绝连接。在客户端设置证书只允许设置指定域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书。

HTTP公钥锁定是HTTPS网站防止攻击者CA机构错误签发的证书进行中间人攻击的一种安全机制,用于预防CA遭受入侵或其他会造成CA签发未授权证书的情况。采用公钥锁定时,网站会提供已授权公钥的哈希列表,指示客户端在后续通讯中只接受列表上的公钥。提取证书中的公钥并内置到客户端中,通过与服务器对比公钥值来验证连接的正确性。

源码加密
微信小程序源码获取
微信小程序在android系统内的目录:
/data/data/com.tencent.mm/MicroMsg/{{一串32位的16进制字符串名文件夹}}/appbrand/pkg/
也可以搜索*.wxapkg文件
微信截图_20240328131751.png

在windows下的目录
C:\Users\xxx\Documents\WeChat Files\Applet】目录下生成小程序的加密包。
微信截图_20240420091905.png

打开,找到__APP__.wxapkg,用notepad打开,如图,是加密状态。
无标题.png

在mac系统下
几乎所有的加固方式都是针对安卓阵营的,IOS极少会有,原因是Appstore对APP的审核非常严格,导致IOS应用加固后面临无法上架应用商店的问题。

微信小程序的格式就是: .wxapkg,.wxapkg是一个二进制文件,有其自己的一套结构。
小程序只是很简单的将图片、js和json文件压在一起,而压制的过程就是Wxml -> Html、 Wxml -> JS、Wxss -> Css,转换后文件二进制格式跟后缀名为wx二进制格式完全一致。
小程序在代码中被称为appbrand,主要逻辑放在包com.tencent.mm.plugin.appbrand下面(部分抽出的ui控件除外);另外引用了3个js资源,均在/assets/wxa_library/下。虽然很大部分代码被混淆过的,但是适当的反编译后,我们还是能看出绝大部分东西。

解开wxapkg文件的代码:https://gist.github.com/Integ/bcac5c21de5ea35b63b3db2c725f07ad
解开wxapkg文件的代码2:https://gitee.com/ksd/wxappUnpacker/blob/master/README.md

有细心的读者可能会发现,小程序数据包内存在的文件比小程序开发时的原项目文件少了许多文件,每个页面之下的“js”、“json”、“wxml”、“wxss”等许多文件都不见了,取而代之是一个“html”文件,原来,在微信服务器会将小程序源码中所有的“js”文件压入“app-service.js”文件中,将所有的“json”文件压入“app-config.json”中,将所有的“wxml”文件压入“page-frame.html”文件中,“wxss”则在处理之后以“html”文件的形式存留在对应页面目录之下。

微信小程序的基本目录结构
329c5d6112d8b1467bd296d39089f73e_fullsize.jpg
每一个小程序项目主目录下有2个子目录和4个文件,主目录中3个以app开头的文件是微信小程序框架的主描述文件,是应用程序级别的文件,这3个文件不属于任何页面。
project.config.json文件是项目配置文件,包含项目名称、appid等相关信息。pages目录中有2个子目录,分别是index和logs,每个子目录中保存着一个页面的相关文件,通常一个页面包含4个不同扩展名的.wxml、.wxss、.js和.json文件,分别用来表示页面结构文件、页面样式文件、页面逻辑文件和页面配置文件。按照规定同一个页面的4个文件必须具有相同的路径与文件名。

hook修改明文
大家都知道,当一个APP的数据流量加密之后我们在抓包软件中看到的是密文形式,若要想解密->修改->加密这个过程并不容易,甚至需要对APP深入逆向才能解密出明文,那么换个思路,我们可不可以越过加解密过程直接去寻找明文数据呢?答案是肯定的,hook为我们带来了十分开阔的解密思路,不需要逆向出加密算法只需要在送入加密函数之前将明文数据hook住,再其上最修改,再送入加密函数,便可以达到修改数据包的目的。
微信小程序一般会以新进程的方式启动,其进程名为com.tencent.mm:appbrand0、com.tencent.mm:appbrand1、com.tencent.mm:appbrand2、com.tencent.mm:appbrand3、com.tencent.mm:appbrand4。微信最多同时运行5个小程序进程,所以最多只能同时运行5个小程序,如果打开第6个小程序,微信会把最近不怎么用的小程序关掉给新打开的小程序运行,因此,如果直接用frida -U com.tencent.mm -l xxx或者objection -g com.tencent.mm explore来hook的话,是无法看到函数调用的,因为你hook的进程不是微信小程序的进程而是微信的进程。所以我们要指定pid来进行hook,可以使用dumpsys activity top | grep ACTIVITY来得到;也可以使用frida -UF -l xxx来hook当前最顶层的Activity。对于Xposed则没有这个问题,只需指定微信的包名就会自动hook上所有的子进程。结合动态测试的函数调用结果,随便浏览一下被调用的函数的代码,

                        
原文链接:https://blog.csdn.net/weixin_43101935/article/details/135038745



字符转换工具:http://www.kuquidc.com/convert/Unicode.php
密文进行解密:http://sso.tidesec.com/
下载微信旧版:https://www.wandoujia.com/apps/596157/history

参考:
https://cloud.tencent.com/developer/article/1768860
获取微信小程序源码的三种方法
反编译小程序详细教程,处理各种异常报错
微信小程序源码阅读笔记
https://blog.csdn.net/weixin_50123771/article/details/128879523

VX小程序逆向分析
小程序原理解析(三)
从源码看微信小程序启动过程
浅析微信小程序 App() 和 Page() 函数的内部实现

微信小程序云函数使用教程【超详细】
微信小程序云函数操作云数据库Mysql
小程序包浅析
微信小程序云函数抓包(苹果手机、苹果电脑)
mpaas移动开发框架 IDA + Frida + burp 抓包方法
wx小程序云函数抓包教程(无需解包)  (出处: 吾爱汇编)
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 2024-3-31 10:32:01 | 显示全部楼层
崎山小鹿
2024-3-31 10:32:01 看全部
android 7.1.2  微信 8.0.2   小程序位置:/data/data/com.tencent.mm/MicroMsg/{{一串32位的16进制字符串名文件夹}}/appbrand/pkg/   小程序提示:你的微信版本过低,无法正常使用此小程序的服务,请更新微信到最新版本。

android 7.1.2  微信 8.0.28   微信  
android 7.1.2  微信 8.0.42   小程序位置:/data/data/com.tencent.mm/MicroMsg/{{一串32位的16进制字符串名文件夹}}/appbrand/pkg/

android 9  微信8.0.28  无法启动微信小程序列表
android 9  微信8.0.48
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 2024-4-8 12:37:19 | 显示全部楼层
崎山小鹿
2024-4-8 12:37:19 看全部
在Windows防火墙设置中,我们可以通过“高级设置”进入防火墙高级设置界面。在这里,我们可以配置入站规则,来控制哪些程序允许通过Windows防火墙进入计算机。

在Windows防火墙设置中,我们也可以配置出站规则,来控制哪些程序可以从计算机通过Windows防火墙离开。
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 2024-4-10 15:04:46 | 显示全部楼层
崎山小鹿
2024-4-10 15:04:46 看全部
知道 Xposed 框架神器,以及与前者类似的 Edxposed、LSPosed 等框架。LSPosed 是 Edxposed 的一个分支,它是一个流行的安卓框架工具,用户可以通过其安装多种模块,在不接触任何 APK 的情况下更改系统和应用。LSposed模块是一个基于Magisk框架的Xposed框架实现,用于在Android设备上对应用程序进行修改和定制。
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 2024-4-20 20:02:12 | 显示全部楼层
崎山小鹿
2024-4-20 20:02:12 看全部
微信小程序的开发流程大致可以分为以下几个步骤:

1.注册微信小程序账号。首先,需要在微信公众平台注册小程序账号,可以使用微信公众平台的账号注册,也可以使用企业邮箱进行注册。
2.下载开发工具。根据自身操作系统下载微信提供的小程序开发工具。2
3.创建小程序项目。在开发工具中创建新的小程序项目,并填写小程序的名称、分类、图标等信息。
4.了解项目结构和基本配置。小程序项目的结构目录包含了必备的文件和目录,如app.js、app.json、app.wxss等。其中,app.json是小程序的全局配置文件,可以在此配置小程序的页面路径、窗口样式、网络超时设置、底部tab栏等。
5.页面开发和调试。通过编辑.wxml文件实现页面布局和内容展示,通过编辑.wxss文件添加样式,通过编辑.js文件编写页面交互逻辑和数据处理。开发工具提供实时预览功能,便于开发者预览并调试小程序的展示效果和交互逻辑。
6.编写小程序逻辑。在小程序中编写业务逻辑,包括用户登录、数据处理、API调用等。1
7.调试和测试。使用开发工具进行调试和测试,确保小程序能够正常运行。
8.提交审核和发布。在开发完成后,将小程序提交审核,审核通过后即可在微信小程序平台发布。开发者需要登录微信公众平台,填写小程序的基本信息、设置小程序的功能权限和接入能力,然9.后按照微信的要求提交审核申请,并等待微信平台的审核结果。
10.发布和推广。在微信小程序平台发布小程序,并通过微信朋友圈、微信公众号等渠道进行推广,吸引用户使用。
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 2024-4-20 21:09:02 | 显示全部楼层
崎山小鹿
2024-4-20 21:09:02 看全部
1.什么是WXML
WXML全程WeiXin Markup Language 是小程序框架设计的一套 标签语言 用来构建小程序页面的结构,起作用类似于网页开发中的HTML。

2.WXML 和 HTML 的区别?
1标签名称不用
     HTML常见的标签有(div,span,img,a)
     WXML常见的标签有(view,text,image,navigator)
2属性节点不同
     <a href=“#”>超链接</a>
     <navigator url=“#”>超链接</navigator>
3提供了类似于Vue中的模板语法
     数据绑定
     列表渲染
     条件渲染
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 2024-4-20 22:47:05 | 显示全部楼层
崎山小鹿
2024-4-20 22:47:05 看全部
解包的时候出现如下错误提示:
TypeError: subPackage.pages is not iterable
    at C:\Users\**\Desktop\小程序抓包\wxappUnpacker\wuConfig.js:49:45

49-58行做如下修改:
if(subPackage.pages){
                for (let page of subPackage.pages) {
                    let items = page.replace(root, '');
                    newPages.push(items);
                    let subIndex = pages.indexOf(root + items);
                    if (subIndex !== -1) {
                        pages.splice(subIndex, 1);
                    }
                }
}
就可以解决了。
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 2024-4-21 11:23:49 | 显示全部楼层
崎山小鹿
2024-4-21 11:23:49 看全部
运行时出现如下错误:
初次用微信开发者工具开启云开发的时候,会出现以下的报错cloud init error: Error: invalid scope 没有权限,请先开通云服务

点击云开发,进行基础项的配置,创建新环境,之后把云开发窗口关掉,再重启之后,报错就会解决掉
回复

使用道具 举报

  • 您可能感兴趣
  • 站长日记-天道与畜生道
    站长日记-天道与畜生道
    天道无情,但众生平等,无为却处处体现博爱。畜生道有情,讲的是尊卑次序只为繁衍,处
    06-20
  • 独爱墨子
    独爱墨子
    也许是天生的吧,在中小学的时候接触到一些良言警句,读起来觉得非常舒服,非常认同
    07-25
  • 墨子
    墨子
    墨子(公元前476或480年—公元前390或420年),名翟,春秋末期战国初期宋国人 [1-2],
    07-22
  • 3D数字人制作-Character creator
    3D数字人制作-Character creator
    Character creator 《角色创建者》是由Reallusion [1]公司推出的一款3D角色建模软件,
    07-08
  • discuz如何上传并插入一段本地视频并支持播放
    discuz如何上传并插入一段本地视频并支持播
    前提是论坛已经开启了插入视频的功能。 1.打开查看附件地址的功能 请到管理后台进行设
    03-11
您需要登录后才可以回帖 登录 | 立即注册 |

本版积分规则 返回列表

查看:1510 | 回复:7

  • 独爱墨子

    也许是天生的吧,在中小学的时候接触到一些良言警句,读起来觉得非常舒服,非常认同

    阅读:90|2024-07-25
  • 2 墨子
    墨子

    墨子(公元前476或480年—公元前390或420年),名翟,春秋末期战国初期宋国人 [1-2],

    阅读:200|2024-07-22
  • 全球大量用户系统蓝屏现象始末

    日本东京时间2024年7月19日13时30分左右开始,日本地区运行微软视窗(Windows)操作系

    阅读:244|2024-07-20
  • 免费在线 Autodesk FBX 到 OpenUSD 转换器

    免费在线 Autodesk FBX 到 OpenUSD 转换器 https://products.aspose.app/3d/zh-cn/co

    阅读:426|2024-07-10
  • 3D数字人制作-Character creator

    Character creator 《角色创建者》是由Reallusion [1]公司推出的一款3D角色建模软件,

    阅读:638|2024-07-08
  • 第九区

    第九区的本质是创建一个世界模型,希望用这个世界模型能为老百姓和政府提供数据和推理

    阅读:426|2024-07-07
  • Discuz强大的广告系统

    强大的广告系统 页头通栏广告:页头通栏广告显示于论坛页面右上方 全局 页尾通栏广

    阅读:286|2024-07-07
  • 对于老百姓而言VR到底能做什么?

    VR技术自诞生以来不断发展,已经广泛应用于教育、医疗、工程、军事、航空、航海、影视

    阅读:381|2024-07-06
  • 剪映数字人口播原理

    剪映版本升级了,新版本6.0.1支持数字人定制,于是我赶紧申请了使用资格 目前的价格

    阅读:520|2024-07-03
  • 科学作息AI助手

    在魔塔空间创建了一个作息时间管理的agent >>>>>点我体验

    阅读:463|2024-07-01
金双石科技,软件开发20年,技术行业领先,您的满意,就是我们的目标,认真负责,开拓进取,让成品物超所值
关于我们
公司简介
发展历程
联系我们
本站站务
友情链接
新手指南
内容审核
商家合作
广告合作
商家入驻
新闻合作

手机APP

官方微博

官方微信

联系电话:15876572365 地址:深圳市宝安区西乡街道宝民二路宝民花园 ( 粤ICP备2021100124号-1 ) 邮箱:qishanxiaolu@qq.com
QQ|Powered by Discuz! X3.5 © 2001-2024 Discuz! Team.
快速回复 返回顶部 返回列表