各位彭于晏们,最牛逼的纯前端加密,欢迎挑战。

2023-08-25 11:02:39 +08:00
 hsuehly

闲来没事,简简单单写了一个 demo ,欢迎各位大佬前来挑战,地址: https://hsuehly.github.io/wasm_test/ 期待宴晏们各显神通。

6880 次点击
所在节点    程序员
45 条回复
maybedk
2023-08-25 11:41:49 +08:00
不就是多对多加密么,研究过一点
hsuehly
2023-08-25 11:56:28 +08:00
@maybedk 嗯,不错,可以尝试破解一下
tool2d
2023-08-25 12:01:26 +08:00
1. 查看在 wasm 代码,有一个 syscall/js.stringVal 入口,下断点。断在了'syscall/js.stringVal': (_0x2bfa63,_0x135c65,_0x549bc9)=>{

2. 往下找,附近有一个 const _0x5d948b = _0x17e230[_0x3631d8..的语句。把这个_0x5d948b 变量传到外面,就是加密后的文字了。

大部分时候,把 wasm 当成黑盒 RPC API 调用就可以了。没必要白盒破解算法的。
tool2d
2023-08-25 12:11:37 +08:00
wasm 加密有个很严重的问题,就是他最后一定会和 JS 进行交互,想办法把计算后的数据给传出去。

这步不可能省略,一般都是 stringVal/setStringVal 之类的,很容易出问题。

还不如 JS 里套一层 JS 虚拟机进行算法加密,至少可以模糊掉 JS 交互部分。
DreamNya
2023-08-25 12:37:22 +08:00
a='test'
b=window.encrypt(a)
c=window.decrypt(b)
a==c

前端破解加密方式和 key 其实没啥用,我直接调用你的接口达成目的就行了,不需要知道你具体是怎么保证正常运行的。
可能一些后端程序缺少环境才需要破你的加密方式(比如自动签到、自动爬虫)。
shui14
2023-08-25 13:02:17 +08:00
wasm 只是增加成本而已,它不是破不了,最起码的,node py 都有现成工具先转 c 再分析,或者直接调用它
这些都是防君子防不了小人,前端加密,法务兜底

wasm 最大的意义在于抹平差异,比如 webgpu 当前变动大,还有一些传统软件成为部分可能,ffmpeg ,opencv ,tensorflow 等等,再一个它或许可以像 docker 一样,成为边缘计算的容器,比 serverless function 更近一步,加密混淆纯属路走歪了,绝对的安全在后端(边缘节点),当前这些叫混淆“加盐”
hsuehly
2023-08-25 13:14:28 +08:00
@DreamNya 不错不错,那如果我整个页面的生命周期只调用一次加密函数,和解密函数,然后我在 wasm 中判断第二次调用,给你返回错误的密文该怎么破
hsuehly
2023-08-25 13:15:09 +08:00
@shui14 你可以尝试在后端程序直接调用一下我写的 wasm
DreamNya
2023-08-25 13:18:32 +08:00
@hsuehliuyang 把你调用加密函数的函数 hook 掉置空,然后等我来调用,伪装成网页正常的调用…… 类似于破解禁止重放攻击
hsuehly
2023-08-25 13:22:53 +08:00
@DreamNya 但是你只能调一次啊
gps949
2023-08-25 13:37:43 +08:00
AES-CBC?
bigha
2023-08-25 13:54:30 +08:00
@hsuehliuyang

这不是随便调嘛

```
import requests

r=requests.Session()

pdata={
'group':'ceshi',
'action':'decrypt',
'para':'NB_00edbf52008972d16934ab5a45d68a21d7aa6f3ba0d6b3a8d5e61cafd2c0c4777ced03'
}

response=requests.get("https://rpc.ping8.top/business/invoke",params=pdata)
print(response.text)
```

![7afbd1b6257c4f6078ed8.png]( https://tu.ping8.top/file/7afbd1b6257c4f6078ed8.png)
santom
2023-08-25 14:18:22 +08:00
你这个长度无限的吗?
hsuehly
2023-08-25 14:20:21 +08:00
@bigha wasm 限制我去了,你之前逆的那个写了
hsuehly
2023-08-25 14:27:45 +08:00
@gps949 不错,可以找一下 key 藏在哪个地方
tmtstudio
2023-08-25 15:19:03 +08:00
@tool2d #4 大佬试过套虚拟机的方案吗,对性能影响大吗
lisxour
2023-08-25 15:22:01 +08:00
@tool2d #4 一般都用 wasm 做 hash 之类的计算,你就算在 js 层拿到结果没啥用,你不破解算法,你也模拟不了请求
lisxour
2023-08-25 15:26:10 +08:00
@tmtstudio 只要网站不需要非常繁重的 js 运算,对于使用者来说,不会有感官上的慢,但在代码层面可能会慢几倍,甚至十几倍都有可能。
tool2d
2023-08-25 16:24:41 +08:00
@lisxour "你不破解算法,你也模拟不了请求"

以前一直研究游戏的通讯协议,后端有无数种方法可以限制非法调用。总觉得前端这种明文调用,又想分享,又想加密,出发点就挺矛盾的。

我游戏客户端的话,把加密和陷阱做的很复杂,全部走自定义二进制协议,基本上想脱离客户端,后端去模拟请求,是不太可能的事情。
hsuehly
2023-08-25 16:30:44 +08:00
@tool2d wasm 也算虚拟机,逆向加密肯定是先解算法找到 key 优先,这样效率是最高的,最后不行了才会上自动化,现在看来在 wasm 里写加密逻辑还是比较安全的,当然你可以把 wasm 当作库直接调用,但是我可以在 wasm 里直接判断环境,不是我的环境直接终止运行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/968212

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX