iplay破解点
移动MM
package mm.purchasesdk;
import java.util.HashMap;
public interface OnPurchaseListener {
public static final String LEFTDAY = "LeftDay";
public static final String ORDERID = "OrderId";
public static final String ORDERTYPE = "OrderType";
public static final String PAYCODE = "Paycode";
public static final String TRADEID = "TradeID";
void onAfterApply();
void onAfterDownload();
void onBeforeApply();
void onBeforeDownload();
void onBillingFinish(int arg1, HashMap arg2);
void onInitFinish(int arg1);
void onQueryFinish(int arg1, HashMap arg2);
void onUnsubscribeFinish(int arg1);
}
联通沃商店
com.unicom.dcLoader.Utils
public interface UnipayPayResultListener {
void PayResult(String arg1, int arg2, String arg3);
}
egame
Egamepay:
package cn.egame.terminal.paysdk;
import java.util.Map;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Looper;
import android.util.Log;
public class EgamePay
{
public static final String PAY_PARAMS_KEY_CP_PARAMS = "cpParams";
public static final String PAY_PARAMS_KEY_PRIORITY = "priority";
public static final String PAY_PARAMS_KEY_TOOLS_ALIAS = "toolsAlias";
public static final String PAY_PARAMS_KEY_TOOLS_NAME = "toolsName";
public static final String PAY_PARAMS_KEY_TOOLS_PRICE = "toolsPrice";
public static final String PAY_PARAMS_KEY_USERID = "userId";
public static final String PAY_PARAMS_KEY_USE_SMSPAY = "useSmsPay";
public static int sInitStatus;
static {
EgamePay.sInitStatus = -2;
}
public static void exit(final Context context) {
AlertDialog alertDialog = new AlertDialog.Builder(context).setTitle("退出提醒")
.setMessage("是否退出程序")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
}
}).setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
}).create(); // 创建对话框
alertDialog.show(); // 显示对话框
}
public static void exit(final Activity activity, final EgameExitListener egameExitListener) {
AlertDialog alertDialog = new AlertDialog.Builder(activity).setTitle("退出提醒")
.setMessage("是否退出程序")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
activity.startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
}
}).setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
}).create(); // 创建对话框
alertDialog.show(); // 显示对话框
}
public static void init(final Context context) {
new Thread("pay_sdk_init") {
@Override
public void run() {
Looper.prepare();
// getInstance(context);
// if (EgamePay.sEPIInstance != null) {
// System.out.println("sEPIInstance");
// EgamePay.sEPIInstance.init(context);
// return;
// }
System.out.println("instance is null");
}
}.start();
}
public static void init(final Activity activity) {
new Thread("ipayt") {
@Override
public void run() {
Looper.prepare();
System.currentTimeMillis();
// final ProtocolMessage initPay = EgamePayProtocol.initPay((Context)activity);
System.currentTimeMillis();
// if (initPay != null) {
// EgamePay.sInitStatus = initPay.arg1;
// }
}
}.start();
}
public static void moreGame(final Context context) {
}
public static void moreGame(final Activity activity) {
}
public static void pay(final Activity activity, final Map<String, String> map, final EgamePayListener egamePayListener) {
egamePayListener.paySuccess(map);
}
public static void pay(final Context context, final Map<String, String> map, final EgamePayListener egamePayListener) {
egamePayListener.paySuccess(map);
}
public static void pay(final Context context, String map, final EgamePayListener egamePayListener) {
egamePayListener.paySuccess(map);
}
}
EgamePayListener:
package cn.egame.terminal.paysdk;
import java.util.*;
public interface EgamePayListener
{
void payCancel(Map<String, String> p0);
void payFailed(Map<String, String> p0, int p1);
void paySuccess(Map<String, String> p0);
void paySuccess(String map);
}
migu游戏:
public final class GameInterface
{
public static void initializeApp(final Activity main) {
initializeApp(main, null, null, null, null, null);
}
public static void initializeApp(final Activity main, final String gameName, final String provider, final String serviceTel, final String loginNo, final ILoginCallback callback) {
}
public static void showStartDialog(final Context context, final boolean sound, final boolean lowApi, final String loginCpParam, final ILaunchCallback callback) {
}
public static void doBilling(final Context context, final boolean useSms, final boolean isRepeated, final String billingIndex, final String cpparam, final IPayCallback callback) {
// Log.i("cccc", billingIndex);
callback.onResult(1, billingIndex, new Object());
}
......
}
破解点:
onbillingfinish
payresult
paysuccess
sendsuccess
有时支付流程比较复杂,
会利用handlemessage
public final void handleMessage(Message arg8) {
Object v0 = arg8.obj;
System.out.println("json --> " + (((String)v0)));
try {
JSONObject v1 = new JSONObject(((String)v0));
int v0_2 = v1.getInt("resultCode");
String v2 = v1.getString("desc");
double v3 = v1.getDouble("money");
System.out.println("resultCode = " + v0_2);
System.out.println("desc = " + v2);
System.out.println("money = " + v3);
Toast.makeText(this.a.a, ((CharSequence)v2), 0).show();
switch(v0_2) {
case -2: {
goto label_62;
}
case -1: {
goto label_52;
}
case 0: {
goto label_39;
}
}
return;
label_39:
b.a(this.a).sendMessage(b.a(this.a).obtainMessage(arg8.what, 1, 0));
return;
label_52:
b.a(this.a).sendMessage(b.a(this.a).obtainMessage(arg8.what, -1, 0));
return;
label_62:
b.a(this.a).sendMessage(b.a(this.a).obtainMessage(arg8.what, 0, 0));
}
catch(JSONException v0_1) {
v0_1.printStackTrace();
}
}
skynet idsky 关键点
product_owned
private void preparePayment(int methodId, float price) {
int v0_1;
this.d = methodId;
this.i.product.price = price;
this.p = d.a(((Context)this));
if(this.d == -2) {
this.notifyTransaction(new PluginResult(Status.CANCEL));
}
else {
if(this.i != null && this.d != -1 && this.f > 0) {
if(this.i.isOwned) {
Log.e("SkynetPayActivity", "product already owned.");
this.notifyTransaction(new PluginResult(Status.ERROR, "already owned"));
}
else {
this.h = this.g.getMethod(this.d);
HashMap v0 = new HashMap();
v0.put("context", this);
验证点:
1、跟据提示信息
盗版:\u76d7\u7248
2、killprogram 函数搜索
3、resetgame exit quit
函数搜索
4、 Activity v1 = ay.a().q();
if(v1 != null) {
AlertDialog$Builder v2 = new AlertDialog$Builder(((Context)v1));
v2.setMessage(v0.getString("dialog_initconfig_msg"));
v2.setCancelable(false);
v2.setPositiveButton(v0.getString("DOWNLOAD"), new ac(arg4, v0));
v2.setNegativeButton(v0.getString("EXIT"), new ad());
try {
v2.show();
}
catch(WindowManager$BadTokenException v0_1) {
}
}
5、入口处,一步一步搜索
锁定sim卡
sim
getsim
getimsi
geiimei
46000
46002
46007
中国移动
cmcc
www.10086.cn
46001
中国联通
China Unicom
www.10010.cn
46003
中国电信
www.189.cn
China Telecom
去除短信权限manifest
<sms>