title: Google in app purchase and cracking
body: <p>i developed an app that's become very popular and someone cracked it. I would like to know if someone know, first of all: how?, if someone know any workaround to avoid this. The app is using the in-app purchase as per google example to unlock some premium features in this way:</p>
  
  <pre><code> 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 &amp;&amp; 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;
          }
      }
  </code></pre>
  
  <p>and for the purchase process:</p>
  
  <pre><code>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);
          }
      });
  </code></pre>
  
  <hr>
  
  <p>Ok, someone in someway cracked it. This means the content available in the pro version are free without paid. Maybe someone can share his experience and suggest some way to avoid this?</p>
  
  <p>And also, does anyone know how can that be done? Thanks</p>