首先运行游戏发现游戏是使用的移动mm支付,这次的破解不在mm支付,在游戏入口页有一个兑换码功能,输入正确的兑换码就会增加金币。
任意输入一个错误的兑换码会提示无效。
因此根据这个错误提示在系统中进行定位,定位到如下代码。
public static int getInviteData(String arg21) {
JSONObject v15;
String v11;
int v16;
HashMap v13 = new HashMap();
((Map)v13).put("inviteCode", arg21);
InputStream v10 = HttpUtil.http("http://115.29.47.196/admintool/protocol/protocol.php", DataTools.writeBody(102, ((Map)v13)).array());
int v17 = 0;
try {
ByteBuffer v4 = ByteBuffer.wrap(HttpUtil.readStream(v10));
int v7 = DataTools.readBody(v4);
v16 = v4.getInt();
byte[] v6 = new byte[v7];
int v9 = 0;
int v12 = v7 - 4;
while(v4.hasRemaining()) {
v6[v9] = v4.get();
++v9;
}
v11 = new String(v6, 0, v12);
v15 = new JSONObject(v11);
}
catch(Exception v8) {
goto label_88;
}
try {
v17 = v15.getInt("data");
System.out.println("msg: " + v11);
System.out.println(" op: " + v16);
if(v17 == 0) {
Toast.makeText(JniTestHelper.instance, "兑换码无效,请重新输入", 100).show();
}
else {
Toast.makeText(JniTestHelper.instance, "兑换成功,获得" + v17 + "钞票", 100).show();
}
return v17;
}
catch(Exception v8) {
goto label_80;
}
label_88:
goto label_80;
return v17;
label_80:
Toast.makeText(JniTestHelper.instance, "兑换码无效,请重新输入", 100).show();
v8.printStackTrace();
return v17;
}
由此可知v17即为兑换获得的金币数目
因此修改smli代码为:
.method public static getInviteData(Ljava/lang/String;)I
.locals 2
.param p0, "name" # Ljava/lang/String;
.prologue
.line 277
const v0, 0x0fffffff
return v0
.end method
重打包后运行如图示: