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

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

翻译, Sign, 逆向, 软件

levelworm   
中间人攻击呢?或者直接攻击你的服务器?
rekulas   
不会被破解太绝对了,我的理解是脱壳只是方便逆向但不是说必要条件,如果对方直接转汇编也不是不能分析出核心签名逻辑
exch4nge   
翻译软件做到这程度已经很不错了,大幅度提高了破解成本,虽然 vmp 不是完全安全的,但应该很少会有人花时间成本来破解。
楼上说的通信部分以及服务器本身安全可以多考虑下,比如用上证书双向认证,通信数据二次加密之类的,服务器防 ddos 等
liuidetmks   
最好把翻译原文也加入计算 sign ,
差不多了,没人花大经历搞你的
Borch   
可以破解。最简单的,加了 vmp 的算法可以通过模拟执行引擎如 unicorn 还原内存环境后直接调用,根本不用逆向 vmp 。另外问一下是哪家的 vmp 以及什么版本?有些 vmp 的一些版本快被分析烂了。
lsk569937453   
我理解你原文中的"破解"等于接口被破解,然后被第三方滥调用。毕竟是自己花钱买的 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   
这个算法最好足够复杂,不要是参数拼接然后 md5 ,这种动态调试很容易看出来,当破解付出的成本远大于收获的时候就没人愿意破解了
pengtdyd   
如果有人能逆向了,那么他为什么不直接使用腾讯机器翻译的 api 呢?何必多此一举?
leokun   
@lsk569937453 如果连 sign 算法都能破解,网络层面的标识换 token 简直是小意思,前面这个个人感觉没有必要
您需要登录后才可以回帖 登录 | 立即注册

返回顶部