有什么办法只允许我开发的 APP 访问我的 WEB 服务吗?

2021-11-11 11:12:48 +08:00
 villivateur

给客户做了一个 Windows WPF APP ,它需要访问我的 WEB 服务,但是我不想让除了这个客户端以外的其他工具访问 WEB 服务。

目前已经添加了 HTTPS 。

但是由于 APP 是用 C# 写的,反编译很方便,把认证做在 APP 内部恐怕等于没做。

7376 次点击
所在节点    信息安全
55 条回复
libook
2021-11-11 12:34:03 +08:00
看到补充内容,破解思路其实就是调试你的程序,找到解密二进制之后的程序,把解密后的内容从内存里读出来。
你要做的就是让破解者更难以调试出可以拿到解密内容的地方,比如解密方法的返回值,以及烧录方法的参数。

另一个思路就是者拿到解密内容也不能用,比如解密的内容不是通用的,仅当前烧录的设备可用。
masterclock
2021-11-11 12:39:20 +08:00
简单加密一下就行了,别搞复杂了
如果有人搞破解,说明你的服务端做得真 TMD 好,还做什么客户端,收服务端的钱就得了
skiy
2021-11-11 12:54:14 +08:00
微信扫码登录(逃
s0nnse
2021-11-11 13:52:06 +08:00
HTTPS 双向证书 差不多了,app 有破解风险就上 app 加固。
powerman
2021-11-11 14:30:38 +08:00
没有这个必要,微信搞得这么复杂,不还是有人去研究破解微信的协议,想啥呢,老哥,只要有利益驱动,自然有人去研究你的协议,技术手段只是防止对方低成本破解罢了。
devcat9
2021-11-11 14:31:13 +08:00
ssl pinning
GRPC 证书
tmtstudio
2021-11-11 14:59:40 +08:00
AES+RSA
zzzmh
2021-11-11 15:08:06 +08:00
虽然 C#我是外行,但这个前提来说我感觉几乎做不到,再强的 app 也能被破解,就是值不值得和有没有人折腾的问题。你能做的就是请求全部加密,客户端加壳加密,但也就防住 99%的人了。如果要彻底防住,加个用户名密码,加个 token ,然后可以把没密码的人防住,但这也就不符合你的需求了。
zjsxwc
2021-11-11 15:11:51 +08:00
隔三差五更换 api ,发布新版本呗
2i2Re2PLMaDnghL
2021-11-11 15:39:25 +08:00
首先明确一个问题

只允许我开发的 APP 访问我的 WEB 服务 —— 这是不可行的
禁止别人开发的 APP 访问我的 WEB 服务 —— 这是可行的

我直击一个本源:如果别人搞一个虚拟的下位机把你的 App 烧录的内容截取下来,你怎么处理?
如果下位机设备你可控,那就在下位机上做处理。
如果下位机设备通用且你不可控,那就把这个二进制进行等功能性的混淆,尽管可用但几乎不可读更难以下手修改。
excitedXXX
2021-11-11 15:44:55 +08:00
效验 app 签名的 MD5 不知道这个思考可行不
jmk92
2021-11-11 15:47:08 +08:00
最好加商业壳,不然即便是混淆也容易搞出来源码,源码到手,你怎么写加密过程都没意义了,他完全可以提取出来。
不需要登录,那么你针对人群有限的话可以搞双向证书,如果是面向全网都可以下载的,那就做机器码、AES 加密。
当然,前提还是加壳,不然一直盯着数据统计,看有没有虚假请求,也能累坏你啊
bruce0
2021-11-11 16:24:55 +08:00
不想被别人调用服务 HTTPS 双向认证应该能满足你的需求, 如果怕别人破解 app 拿到证书, 用 C++写相关的代码, 加大反编译难度
ivan_wl
2021-11-11 20:15:57 +08:00
我和你的场景差不多,可以用 ReadyToRun 做 AOT 编译,编译成 native 指令,至少增加破解难度。客户端认证可以用 WatsonTcp ,支持双向证书认证。客户端的私钥可以混淆后嵌入到 resource 里,代码里处理一下。
dadachen1997
2021-11-11 22:15:12 +08:00
添加一个 header 字段吧,x-functions-key 做 check
ZeroClover
2021-11-11 22:21:44 +08:00
加钱 VMProtect ,除非你的 App 有很大的商业价值否则不会有多少人愿意搞动态分析的。

然后 TLS 相互认证。
ColinWei
2021-11-11 22:46:44 +08:00
Dnguard HVM 用好几年了,火车头也是用这个
march1993
2021-11-11 22:48:40 +08:00
下位机读取网卡的 mac 然后用代码验证
22too
2021-11-11 22:49:59 +08:00
加一个识别,每次访问必须上传口令,口令认证在另外一个域名下。口令成功,然后再使用口令给业务的域名使用。应该就切割开了。
XiLingHost
2021-11-11 22:55:25 +08:00
每次访问服务端生成一个二进制可执行文件,然后覆写本地的程序用于下次请求,结合服务端 /客户端双向签名认证,一次访问生成一次新的证书并吊销旧证书,证书加密硬编码在二进制文件中

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

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

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

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

© 2021 V2EX