android 游戏总结
2015-11-25 10:38
246 查看
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
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>
移动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>
相关文章推荐
- android中的文件操作详解以及内部存储和外部存储
- android组件之一BroadCastReceiver
- Android Studio 签名、打包、生成jks密钥
- Android 中的BroadCastReceiver
- 【FastDev4Android框架开发】神器ViewDragHelper完全解析,妈妈再也不担心我自定义ViewGroup滑动View操作啦~(三十三)
- android中Intent和uri的应用实例
- Android自定义View入门(一)
- Android studio 2.0 预览版发布
- 关于在TextView中设置DrawableLeft,DrawableRight等不显示的问题
- Android Studio怎么删除项目
- 10 条提升 Android 性能的建议
- 阿拉伯语、波斯语等RTL语言下部分控件位置不对
- MediaScanner扫描文件和文件目录
- Android EditView
- Android Activity启动过程全解析
- android学习笔记5——安全方面知识
- android 广告页自动切换
- L版本开机提示“Android正在升级或启动”
- Android&Mockito 模拟测试框架
- android中activity设置全屏显示无效问题解决。