比来换了一个新手机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;"。
那两个办法在理论上都是可行的。