admin管理员组文章数量:1532221
2024年2月9日发(作者:)
大D在和谐游戏研究室发了个游戏,本身收费很容易破解,用HALO就可以搞定了,但游戏不能在模拟器运行,开头动画完毕后提示请使用手机运行游戏.然后游戏就不动了,如果是手机会提示按任意键继续.如图:
在HALO里搜索"请使用手机" 这个关键词,得到结果在g类的b方法里,我用DJ反编译了源代码,其它没有什么特别.有一句time().totalMemory(),比较特别以前从没见过,到GOOGLE查了下,这句是用来得到当前JAVA虚拟机正在使用的内存大小,那就很清楚了,如果正在使用的内存大小大于用来对比的的内存,也就是6M,那就不是手机,因为手机上JVM的内存只有几十K,百K或1-2M,没有太大的,因为J2ME本来就是为小内存掌上设备设计的.把思想定位在这里了,因为这没办法用HALO的字节码来讲清楚,只能用JAVA代码来讲,大家见谅,这只是个思路,看代码.
这是q方法的代码:
private void q(Graphics g1)
{
if(bh == 0)
a(0, g1);
if(bi == 99)
{
int i1 = o.F - p.c;
int j1 = (o.G - p.d) + 42;
o.p.a(o.c, g1, i1, j1);
o.o.a(o.c + 20, g1, i1, j1);
return;
}
bg.a(bi, g1, 120, 160);
if(p.p == 99)
{
if(time().totalMemory() >> 20 > 6L)
{
if(w % 4 < 2)
0xffffff);
else
0xffff00);
} else
if(w % 4 < 2)
.a.a(g1, "u4EFBu610Fu952Eu7EE7u7EED", 120, 278, 65, 0, 0xffffff);
else
.a.a(g1, "u4EFBu610Fu952Eu7EE7u7EED", 120, 278, 65, 0, 0xffff00);
if(w < 120)
{
w++;
return;
}
w = 0;
}
}
看了下代码,追了几个类手发现 bg.a(bi, g1, 120, 160);这句是用来画一骑当千那个动画图片的而
if(time().totalMemory() >> 20 > 6L)
{
if(w % 4 < 2)
0xffffff);
else
0xffff00);
} else
if(w % 4 < 2)
.a.a(g1, "u4EFBu610Fu952Eu7EE7u7EED", 120, 278, 65, 0, 0xffffff);
else
.a.a(g1, "u4EFBu610Fu952Eu7EE7u7EED", 120, 278, 65, 0, 0xffff00);
就是用来提示的,除了提示一点作用都没有,这段只要留下最后一句.a.a(g1,
"u4EFBu610Fu952Eu7EE7u7EED", 120, 278, 65, 0, 0xffff00);就行,如果不留会觉得卡在那里了,这句提示按任意键继续.用DJ查JVM,从if(runtime到最后一个else是55-100句,在HALO里删除56-101,保存方法这个方法里只删除
.a.a(g1,
"u8BF7u4F7Fu7528u624Bu673Au624Du80FDu7EE7u7EEDu6E38u620F", 120, 278, 65, 0,
.a.a(g1,
"u8BF7u4F7Fu7528u624Bu673Au624Du80FDu7EE7u7EEDu6E38u620F", 120, 278, 65, 0,
.a.a(g1,
"u8BF7u4F7Fu7528u624Bu673Au624Du80FDu7EE7u7EEDu6E38u620F", 120, 278, 65, 0,
.a.a(g1,
"u8BF7u4F7Fu7528u624Bu673Au624Du80FDu7EE7u7EEDu6E38u620F", 120, 278, 65, 0,
if(time().totalMemory() >> 20 > 6L)
{
if(w % 4 < 2)
0xffffff);
else
0xffff00);
} else
if(w % 4 < 2)
.a.a(g1, "u4EFBu610Fu952Eu7EE7u7EED", 120, 278, 65, 0, 0xffffff);
else
就行了,不要删其它的,我删了之后到那里就动不了了.
前面说过了这只是提示用的,提示用到了time().totalMemory() >> 20 > 6L这句,那不让在模拟器运行肯定也用了这个,全文搜索runtime,看到那个大X了吧
.a.a(g1,
"u8BF7u4F7Fu7528u624Bu673Au624Du80FDu7EE7u7EEDu6E38u620F", 120, 278, 65, 0,
.a.a(g1,
"u8BF7u4F7Fu7528u624Bu673Au624Du80FDu7EE7u7EEDu6E38u620F", 120, 278, 65, 0,
上面的q方法我们已经改过了,现在看下X()方法的源代码.
private void X()
{
label0:
{
if(bi == 99)
{
o.o.a(o.c + 20, 1);
if(!o.o.b(o.c + 20))
break label0;
} else
{
bg.a(bi, bj);
if((bj != -1 || !v()) && (bj == -1 || !bg.b(bi)))
break label0;
if(time().totalMemory() >> 20 > 6L)
return;
}
bk = false;
r.a = false;
}
}
看到那句了吧,这个方法是真正判断模拟器的,我们把
if(time().totalMemory() >> 20 > 6L)
return;
这两句删掉就可以了.
我觉得这个就用不着用DJ看JVM来对比了.在HALO里双击搜索结果里的那个X方法,HALO自动定位到了行.
下面那个return很明显吧,删除45-52,保存方法,然后把HALO的自动破解短信打上勾,这游戏用HALO就可以自动破解了,然后编译-打包-运行,一切顺利吧.
版权声明:本文标题:一个禁止在模拟器运行游戏的解决方法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1707452779a197981.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论