关于反逆向方面想请教一下各位

2023-08-16 08:04:25 +08:00
 s7964926

业余时间用 c++做了个很小众的翻译软件,调用我 java 后端的翻译接口。 翻译方面是我自己购买的腾讯机器翻译的 api 。 我在软件里根据机器信息,时间戳,nonce 生成了一个 sign ,连同需要翻译的原文一起提交到我后端的接口进行验证,如果 sign 验证通过才返回信息,不通过直接拒绝。 想请问下各位,这个算法我使用了 vmp 的 sdk 虚拟化+混淆,在不会被脱壳的情况下,是不是不会被破解? 对软件逆向一窍不通,希望能得到各位大佬的指点,十分感谢。

5516 次点击
所在节点    程序员
64 条回复
levelworm
2023-08-16 08:10:16 +08:00
中间人攻击呢?或者直接攻击你的服务器?
rekulas
2023-08-16 08:26:53 +08:00
不会被破解太绝对了,我的理解是脱壳只是方便逆向但不是说必要条件,如果对方直接转汇编也不是不能分析出核心签名逻辑
exch4nge
2023-08-16 08:31:07 +08:00
翻译软件做到这程度已经很不错了,大幅度提高了破解成本,虽然 vmp 不是完全安全的,但应该很少会有人花时间成本来破解。
楼上说的通信部分以及服务器本身安全可以多考虑下,比如用上证书双向认证,通信数据二次加密之类的,服务器防 ddos 等
liuidetmks
2023-08-16 08:36:51 +08:00
最好把翻译原文也加入计算 sign ,
差不多了,没人花大经历搞你的
Borch
2023-08-16 08:40:07 +08:00
可以破解。最简单的,加了 vmp 的算法可以通过模拟执行引擎如 unicorn 还原内存环境后直接调用,根本不用逆向 vmp 。另外问一下是哪家的 vmp 以及什么版本?有些 vmp 的一些版本快被分析烂了。
lsk569937453
2023-08-16 08:42:02 +08:00
我理解你原文中的"破解"等于接口被破解,然后被第三方滥调用。毕竟是自己花钱买的 api ,如果被第三方滥调用,那等于是自己花钱给别人做嫁衣了。

理论上只要你的 sign 生成的算法破解不了,那么别人就不知道怎么调用。但是想要破解你接口的人,可能也会用各种反汇编工具去分析你的 c++代码。而且我理解你现在 java 服务端是没有保存客户端的唯一标识的,只要 sign 通过,你就认为是合法的请求,这个是比较危险的。因为你后端接口的安全性只依赖 c++的混淆。


所以还有几个方法去加固安全性:
1.c++首次请求 java 的时候,根据当前的机器信息,去 java 端生成一个 token ,存储到后端数据库也返回给 c++,后续的每次 c++请求必带这个标识,而且后端 java 的每个请求都需要去校验 token 。

这样的好处是,针对每个 token ,可以做限流,如果你的接口被同一个 token 频繁调用,很快就能发现。
其次,如果你的 sign 生成算法被破解,那么由于你的接口限流了,黑客为了能请求多次,肯定会频繁调用你 java 的接口生成新 token ,这样也很容易被识别。

2.如果是匿名使用你的 c++客户端,可以使用 1 方案。如果是登录用户使用 c++客户端,则将 1 中的 token 换成登录的 token 即可。
yyf1234
2023-08-16 08:42:25 +08:00
这个算法最好足够复杂,不要是参数拼接然后 md5 ,这种动态调试很容易看出来,当破解付出的成本远大于收获的时候就没人愿意破解了
pengtdyd
2023-08-16 08:45:13 +08:00
如果有人能逆向了,那么他为什么不直接使用腾讯机器翻译的 api 呢?何必多此一举?
leokun
2023-08-16 08:47:59 +08:00
@lsk569937453 如果连 sign 算法都能破解,网络层面的标识换 token 简直是小意思,前面这个个人感觉没有必要
joApioVVx4M4X6Rf
2023-08-16 08:48:39 +08:00
既然都用接口了,应该引入登陆机制,用登陆的账号调用翻译 API ,经过服务器控制,比如速率啊,字数啊什么的,甚至不用管破解。。只要花钱了,任何账号都能用。即使他破解了接口,也是花账号里的余额
0o0O0o0O0o
2023-08-16 08:53:48 +08:00
所有防护手段提升的是破解难度,而不存在不会被破解;
加 vmp 也有需要注意的事项,多读文档;
密码学最佳实践是绝对不建议自己实现、修改加密算法的,但你做这类客户端防护却可以来上几个,而不是调用常用库;
当然最好还是别信任任何客户端信息,前端对抗无止境也不靠谱。尤其是你这种要保护的核心在后端 API ,其实非常简单,建议做个有注册成本的用户系统,例如小众你完全可以人工审核,后端按用户过滤、限频即可,另外做好服务器防护。
lsk569937453
2023-08-16 08:54:38 +08:00
@leokun token 是服务端生成的,你换 token ,服务端也很容易识别。

以下情况可以酌情弹验证码:

1.同一个 token 调用 api 的频率小于 1s(判断不是人为多次点击,而是机器调用 api)
2.新 token 生成后,3s 内马上请求后端接口(人为复制粘贴不可能这么快)


反爬是为了增加爬虫的成本,道阻且长。
ajaxgoldfish
2023-08-16 09:00:42 +08:00
我只能说小意思,不知老兄有没有听说过 frida+tcpdump 直接得到 sslkey ,然后解密,这是从 tcp 层 hook ssllib.so 就算你加 sdk 也白瞎,也能抓的到,至于 sign 直接 frida 一点一点看你调用然后还原就行了,最难得是脱壳。因为我刚复现吾爱 pj 论坛上的 https://www 点 52pojie 点 cn/forum.php?mod=viewthread&tid=1789310&highlight=%C4%B3%C2%F3 这个帖子。所以在这直接加壳就行了
ajaxgoldfish
2023-08-16 09:06:50 +08:00
我眼瞎了,没看清 C++软件,windows 抓更好抓了,其他的思路不变。同样是 hook 大法
ding2dong
2023-08-16 09:08:38 +08:00
没什么好办法,连微信这样的都被人破的干干净净。。 还是上账号机制吧
s7964926
2023-08-16 09:17:44 +08:00
@lsk569937453 感谢大佬的热心回复!目前我没有采用注册账号的方式,因为软件定位就是打开直接使用。我在数据库中存储了一个身份验证码,但是并不绝对保证唯一性,只是电脑的 mac 地址,系统架构版本等,sha256 加密后存储到服务器上。时间戳方面我做了防重放验证,nonce 只能使用一次。
从接口的调用频率可能没办法判断到底是不是正常的请求,因为是翻译视觉小说的,点击一次字幕就提交一次请求,大部分都比较频繁。
s7964926
2023-08-16 09:18:51 +08:00
@v2exblog 这个是纯粹的为爱发电,花钱买来给圈子内的朋友们用的,但是就怕被传到外面去被坏心眼的人利用了。
s7964926
2023-08-16 09:21:20 +08:00
@levelworm 中间人攻击的话我个人的理解是 MitM 替换掉请求中的参数,但是 sign 算法他逆向不出来,服务器是不会给他传有效信息的呀。DDoS 这种……那我就没办法啦哈哈哈
s7964926
2023-08-16 09:22:21 +08:00
@Borch 感谢大佬的回复。vmp 的版本是目前的最新版 3.8.4 ,个人的 Lite 授权。有种大炮打蚊子的感觉……
s7964926
2023-08-16 09:23:54 +08:00
@pengtdyd 可能是我没有说明白哈,这个腾讯机器翻译的 api 是我自己购买的,他需要访问我后端的接口去调用。如果他破解我的 sign ,那么就遭重了

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

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

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

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

© 2021 V2EX