日期:2014-05-20  浏览次数:20678 次

j2me游戏如何防止被破解呢?
那个专门破解手机游戏的Halo软件好像能够屏蔽MessageConnection接口,短信根本发不出去啊。
我自己有以下几个思路:
1.加入numberOfSegments()>0的判断(Halo返回的是0吧?)
2.加入instanceof MessageConnection的判断,不过好像Halo的XConnection类继承了MessageConnection,不知道这种判断有没有用
3.用getAppProperty()检测jar文件的大小,因为Halo加入补丁后压缩包肯定变大
4.用Class.forName()判断是否存在XConnection和XMessage类。

还有在电脑上用模拟器玩游戏的,不用破解也不会发短信,这种情况要如何应对呢?
我也只想到了用getAppProperty()检测platform属性,以及用runtime.totalMemory()检测总内存,因为模拟器堆栈内存都很大

可是这些方法都是调用了本地函数,还是可以很容易地用一个补丁把这些函数都屏蔽掉,这样工作不就白做了?

大家有什么好办法呢?我知道不能绝对防止破解,但求极大程度地加大破解难度

------解决方案--------------------
呵,这问题我之前也研究过这问题,一起探讨下:

1.知道你据此判断后,可以改成返回其他值,你的判断就无效了
2.因为也继承此类,所以无效
3.通过判断自身JAR包的大小来判断是否被修改过是个好办法,可以防止程序破解
4.XConnection和XMessage这两类名可以随便更换名字的,治标不治本

我之前想的一个办法是用Class.forName()去得到系统相关短信类的具体类名。这方法可以,但有点问题,因为我测试发现不同品牌手机得到的类名是不同的。这样没测到过的手机或新手机会被误判断了。
看来只有你上边的第3个方法是有效且方便的。

防止模拟器貌似很困难,现在很多模拟器返回的platform属性值会和真机一样。除了顽童返回j2me,不过有些手机返回的值也是j2me(如摩托)
用runtime.totalMemory()检测总内存也不可靠,现在模拟器都能调内存大小。