Android 谷歌应用内购买和破解
我开发了一个非常流行的应用程序,有人破解了它。我想知道是否有人知道,首先:如何?是否有人知道避免这种情况的解决方法。该应用程序正在使用谷歌示例中的应用内购买来解锁一些高级功能:Android 谷歌应用内购买和破解,android,in-app-purchase,in-app-billing,cracking,Android,In App Purchase,In App Billing,Cracking,我开发了一个非常流行的应用程序,有人破解了它。我想知道是否有人知道,首先:如何?是否有人知道避免这种情况的解决方法。该应用程序正在使用谷歌示例中的应用内购买来解锁一些高级功能: private IabHelper mHelper; if (!isPro(getActivity())) { mHelper = new IabHelper(getActivity(), KKK); mHelper.enableDebugLogging
private IabHelper mHelper;
if (!isPro(getActivity())) {
mHelper = new IabHelper(getActivity(), KKK);
mHelper.enableDebugLogging(true);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
return;
}
// Have we been disposed of in the meantime? If so, quit.
if (mHelper == null) return;
// IAB is fully set up. Now, let's get an inventory of stuff we own.
mHelper.queryInventoryAsync(mGotInventoryListener);
}
});
}
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
// Have we been disposed of in the meantime? If so, quit.
if (mHelper == null) return;
// Is it a failure?
if (result.isFailure()) {
return;
}
Purchase pro = inventory.getPurchase(PRO_STRING);
SettingsProvider.putSecBoolean(getActivity(), "pro", pro != null && verifyDeveloperPayload(pro));
}
};
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
if (mHelper == null) return;
if (result.isFailure()) {
return;
}
if (purchase.getSku().equals(PRO_STRING)) {
SettingsProvider.putSecBoolean(getActivity(), "pro", true);
}
}
};
boolean verifyDeveloperPayload(Purchase p) {
String payload = p.getDeveloperPayload();
return true;
}
@Override
public void onDestroy() {
super.onDestroy();
if (mHelper != null) {
mHelper.dispose();
mHelper = null;
}
}
对于采购流程:
mPro.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RandomString randomString = new RandomString(36);
String payload = randomString.nextString();
if (mHelper != null) mHelper.flagEndAsync();
mHelper.launchPurchaseFlow(getActivity(), PRO_STRING,
IabHelper.ITEM_TYPE_INAPP, RC_REQUEST,
mPurchaseFinishedListener, payload);
}
});
好吧,有人以某种方式破解了它。这意味着专业版中提供的内容是免费的,无需付费。也许有人可以分享他的经验,并提出一些避免这种情况的方法
还有,有人知道怎么做吗?谢谢简要说明 Android应用程序很容易破解。首先,如果您没有对代码使用任何模糊处理(,DexGuard,…),那么可以使用一些工具轻松阅读和理解代码,例如在某些情况下,
smali
代码也很容易理解
模糊处理本身不会使你免于崩溃。市场上有反模糊器,但有着高超逆向工程技能的人仍然能够想出如何绕过你(或谷歌)的保护
最后,还有一个问题。这可能是破解Android应用程序保护的最著名工具。它专门针对某些类型的保护(谷歌的LVL
,IAP
s,广告网络等),并试图在统计基础上消除这些保护。事实上,它并不能保证100%,但在绝大多数情况下,它都能正常工作
那么如何确保安全呢?
你根本不能
。没有完美的100%安全性,尤其是在移动环境中。然而,你能做的是尽量使一个破解者的工作变得困难
一些想法:
还有一些,我一想起来就会添加它们。您的代码很容易破解,只需替换即可
SettingsProvider.putSecBoolean(getActivity(), "pro", pro != null && verifyDeveloperPayload(pro));
与:
例如,它可以通过多种方式实现,如抗LVL。您需要通过交叉检查您自己的服务器来增加保护。您好,谢谢您的回答!我使用proguard来混淆(忘记回答我的问题)。我要试试德克斯卫士<代码>DexGuard将是一项改进。它提供高级保护功能,首先是字符串加密。但它可能无法将您从LuckyPatcher之类的工具中解救出来。同样,这始终是一个加强安全性和阻止破解的问题:)DexGuard有点贵:不幸的是,数据安全性是有代价的。@iGio90不过,如果你认为我的评论令人满意,请将其作为你问题的答案,以便其他人可以将其作为起点。
SettingsProvider.putSecBoolean(getActivity(), "pro", true);