關於反編譯後顯示盜版

反編譯後顯示盜版,有可能在服務器端校驗,也有可能是本地校驗。
我以壓縮包形式打開apk,刪除簽名信息重新簽名,安裝好後打開,提示盜版。可以肯定這是簽名校驗。
用androidkiller打開,搜索signatures,找到獲取簽名的位置,在用jd-gui查看java代碼

  public static String getAPPSecretString(Context paramContext)
  {
    String str1 = paramContext.getPackageName();
    try
    {
      PackageInfo localPackageInfo = paramContext.getPackageManager().getPackageInfo(str1, 64);
      String str2 = digest(localPackageInfo.signatures[0].toByteArray());
      return str2;
    }
    catch (PackageManager.NameNotFoundException localNameNotFoundException)
    {
      localNameNotFoundException.printStackTrace();
    }
    return "";
  }

digest函數只是對簽名信息做處理,我沒有關心它。
繼續查找哪裏調用了getAPPSecretString()
查看代碼

  if (localHttpResponse.getStatusLine().getStatusCode() != 200)
   {   break label649;  }

發現這是服務器端校驗簽名

 if (this.updateItem.getStatus() == 1103) {
      this.mHandler.sendEmptyMessage(1000);
    }

在handleMessage裏

 if (paramAnonymousMessage.what == 1000)
      {
        BlackName.this.popKuangInfo();
        return;
      }

而這個popKuangInfo()提示 VerLog.v(“有侵權”);並且會調用一個AlertDialog,這個dialog正好與盜版提示吻合。
提示盜版

for (String str1 = "確定";; str1 = "下載")
    {
      str2 = "退出";
      AlertDialog.Builder localBuilder = new AlertDialog.Builder(this.mContext);
      localBuilder.setTitle(this.updateItem.getTitle());
      localBuilder.setMessage(this.updateItem.getDescription());
      localBuilder.setPositiveButton(str1, this.mWarnClick);
      localBuilder.setNegativeButton(str2, this.mWarnClick);
      localBuilder.setCancelable(false).show();
      return;
    }

由於只知道error返回1103會顯示盜版,所以我直接讓getStatus的返回值爲其他(1101)

.method public getStatus()I
    .locals 2
    .prologue
    .line 23
    iget v0, p0, Lcn/easymobi/checkversion/item/UpdateItem;->status:I
    const/16 v1,0x44d
    return v1
.end method

編譯過後,正常進入app,接下來就可以進行購買破解了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章