有点像这个问题How to lock compiled Java classes to prevent decompilation?,但是我很清楚如何反编译一个应用程序,并试图理解它,即使它是模糊的,但有一件事我不太确定,就是如果应用程序使用jni加载C库(.so文件),相同的过程将如何工作。
例如,如果有一个计算器,如果这个计算器是用纯java构建的,它可能会弄乱平方根按钮,所以当你传入2的时候,它会返回2^3而不是2^2。
现在,如果这个应用程序使用JNI来执行所有这些数学命令(所以它将2传递给一个本机方法),那么如何进入C,将其更改为返回2^3而不是2^2呢?
发布于 2011-03-27 03:15:58
反编译比字节码更早。几乎所有的东西都可以反编译。这肯定更难(无论是反编译还是理解/修改结果),使用损坏的、优化的机器代码,并且保留零元数据,但仍然是可能的。当然,您需要一个不同的反编译器,而且-正如前面所暗示的-会有点困难,但事实(顺便说一句,这使得所有DRM工具都不完美)“如果他们的CPU运行它,他们就可以修改它”,这对本机代码和任何字节码都适用。
发布于 2011-03-27 03:13:57
只需找出C函数签名并编译实现该签名的目标文件即可。
几年前,我在一家主机商店工作,我的老板制作了他自己版本的系统日期功能,并重新链接了我们正在使用的一个商业应用程序,这样他就不必续签有时间限制的许可证。这是非法的,但它是有效的。
发布于 2011-03-27 03:14:52
一种选择是使用反汇编程序。一个更简单的选择是用你自己的库替换这个库,我几乎每天都将它用于测试目的。
https://stackoverflow.com/questions/5444621
复制相似问题