java认证辅导:J2ME游戏破解Java认证考试
文章作者 100test 发表时间 2010:01:01 15:50:57
来源 100Test.Com百考试题网
最近换了一个新手机samsung F488E,终于可以在自己的手机上耍耍游戏了(以前开发J2ME的游戏,都是用的公司测试机)。于是疯狂的下载了一些适合触摸屏240*320的 java游戏,其中有一款RPG游戏玩得很开心,可惜某些地方要发短信收费,一气之下动了破解的念头。以前做过J2ME的开发,熟知J2ME程序都会在最终发布的时候进行混淆编译,一是避免程序被反编译,二是可以大大的减小程序包体积。
破解的思路很简单:找到实际调用发送接口的方法,让它始终返回“发送成功”,于是多种工具齐上阵就开始干了。
首先需要把class文件都反编译出来,java反编译工具很多,网上评论也不尽相同,但我试过很多,面对混淆后的字节码,表现得都一样。我使用的是XJad。经过一番查找,找到这样一个方法:
view plaincopy to clipboardprint?
private static boolean a(String s1, String s2)
{
MessageConnection messageconnection.
TextMessage textmessage = (TextMessage)(messageconnection = (MessageConnection)Connector.open(s1)).newMessage("text").
if (ad.a(messageconnection) || ad.a(textmessage))
return false.
textmessage.setAddress(s1).
textmessage.setPayloadText(s2).
messageconnection.send(textmessage).
messageconnection.close().
return true.
JVM INSTR pop .
return false.
}
private static boolean a(String s1, String s2)
{
MessageConnection messageconnection.
TextMessage textmessage = (TextMessage)(messageconnection = (MessageConnection)Connector.open(s1)).newMessage("text").
if (ad.a(messageconnection) || ad.a(textmessage))
return false.
textmessage.setAddress(s1).
textmessage.setPayloadText(s2).
messageconnection.send(textmessage).
messageconnection.close().
return true.
JVM INSTR pop .
return false.
}
毫无疑问,这就是实际发送短信的地方了。我曾试着把所有反编译过来的java文件中的错误全部改掉,里面有很多乱七八糟的代码,最终自然是编译通过,但不能运行。
接下来,就要针对这个方法做处理了,有两个思路:一是直接修改字节码,把上述的"return false"的地方统统改成"return true";二是在这个方法的开始加入这段代码"if(true)return true."。这两个方法在理论上都是可行的。