爲了全速下載某網盤的內容,我破解了一款App

這篇文章已經介紹了破解的緣由,本文就重點介紹一下破解的方法。java

查看服務端是否作校驗

  在動手破解一款app以前最好作一下校驗,看下須要破解的功能是否在服務端作了校驗,若是是服務端作校驗了,那就不必動手破解了,不然,就是破解成功,最後卻發現是白費力氣了。git

  驗證服務端是否作了校驗,最好的方法就是抓包,修改接口的返回值,驗證是否能夠達到本身想要的效果,若是能達到想要的效果,這時就能夠動手來破解app了。github

抓包

  我用的抓包工具是Charles,關於怎麼抓包這裏就不說了,有疑問的話,能夠經過文末的方式聯繫我,這裏就直接看抓包的結果,如圖json

consumeTraffic接口抓包
從上面的抓包的結果,能夠看出這兩個接口是與流量有關的,第一張圖能夠看出應該是判斷用戶是否還用充足的流量來加速的,我第一章圖截得是我流量不足時的返回值,看下接口返回的數據,以下圖。

有經驗的開發同窗都知道,返回值中的 code是用來判斷狀態的,而 message是用來顯示提示信息的,從這個接口中能夠發現提示信息是「流量不足」, code則是「10109」,看下其餘接口的返回值,發現 code的值是0,因而就把這個接口的 code的返回值修改成「0」,看下可否繼續加速,結果並無使人失望,修改後人仍能繼續加速。到這裏,就能知道破解的點是什麼了,只要將代碼中獲取 code的結果改成0便可。

破解

  用jadx-gui工具來查看apk的代碼,直接搜索接口名稱,結果以下圖api

直接進入搜索出來的文件,咱們須要的代碼以下

public static Response a(String str, long j) {
        try {
            return d.newCall(new Request.Builder().url("https://api.enfi.vip/api/consumeTraffic").addHeader("Authorization", str).post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), a(str, j, true, SystemClock.currentThreadTimeMillis()))).build()).execute();
        } catch (Exception unused) {
            return null;
        }
    }
複製代碼

能夠發現上面的代碼只是接口請求,咱們須要的是哪裏使用了這個接口的返回值便是哪裏調用了這個接口。查看的方法是:利用apktool直接反編譯apk,而後將smali代碼導入AndroidStudio,找到上面的代碼,按下Alt(Option)+F7查看哪裏調用了這個方法。搜索到的結果以下app

隨便進入一個文件,查看相應的代碼,這裏進入 EnfiActivity中查看,相關代碼以下

 invoke-static {v4}, Lcom/enficloud/mobile/a/c;->a(Ljava/lang/String;)Lokhttp3/Response;

    move-result-object v0

    if-eqz v0, :cond_1

 .line 682
    invoke-virtual {v0}, Lokhttp3/Response;->isSuccessful()Z

    move-result v12

    if-eqz v12, :cond_1

 .line 686
    :try_start_0
    invoke-virtual {v0}, Lokhttp3/Response;->body()Lokhttp3/ResponseBody;

    move-result-object v0

    invoke-virtual {v0}, Lokhttp3/ResponseBody;->string()Ljava/lang/String;

    move-result-object v0

 .line 688
    new-instance v12, Lorg/json/JSONObject;

    invoke-direct {v12, v0}, Lorg/json/JSONObject;-><init>(Ljava/lang/String;)V

    const-string v0, "code"

 .line 689
    invoke-virtual {v12, v0}, Lorg/json/JSONObject;->getInt(Ljava/lang/String;)I
    
    move-result v0
複製代碼

因爲方法太長,只複製了部分重要的代碼,重點看下這句代碼工具

.line 689
    const-string v0, "code"

    invoke-virtual {v12, v0}, Lorg/json/JSONObject;->getInt(Ljava/lang/String;)I
    
    move-result v0
複製代碼

這句代碼的含義就是經過JsonObject來獲取返回的json中code的值的,咱們要修改的就是這個code的值,怎麼作呢?我這裏採用的是代碼注入的方法,直接拿我本身寫的代碼的返回值。我寫的代碼以下post

public class RegisterGetLong {
    //這部分代碼是修改用戶剩餘流量的
    public static long getLong(String value) {
        return 1024000000000l;
    }
    //這裏的代碼是修改code的返回值的
    public static int getInt(String value) {
        return 0;
    }

}
複製代碼

還須要寫一份調用的代碼,代用的代碼以下學習

public class Test {
    public static void main(String[] args) {
        RegisterGetLong.getLong("quantity");
        RegisterGetLong.getInt("code");
    }
}
複製代碼

上面的是Java代碼,須要轉換成Smali的語法,能夠經過AndroidStudio安裝Code2Smali插件來轉換,因爲轉換成Smali語法後代碼不少,因此這裏只看Test類轉換後的代碼,以下ui

.class public Lsmali/com/enficloud/mobile/activity/Test;
.super Ljava/lang/Object;
.source "Test.java"


# direct methods
.method public constructor <init>()V
 .registers 1

 .prologue
 .line 5
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void .end method

.method public static main([Ljava/lang/String;)V
 .registers 2
 .param p0, "args"    # [Ljava/lang/String;

 .prologue
 .line 7
    const-string v0, "quantity"

    invoke-static {v0}, Lsmali/com/enficloud/mobile/RegisterGetLong;->getLong(Ljava/lang/String;)J

 .line 8
    const-string v0, "code"

    invoke-static {v0}, Lsmali/com/enficloud/mobile/RegisterGetLong;->getInt(Ljava/lang/String;)I

 .line 9
    return-void .end method

複製代碼

這裏只須要這句

 invoke-static {v0}, Lsmali/com/enficloud/mobile/RegisterGetLong;->getInt(Ljava/lang/String;)I
複製代碼

代碼,將上面的經過JsonObject來獲取返回的json中code的值的代碼換成這句便可,這樣獲取到的code的值就一直爲0了。而後就是回編譯,簽名,安裝及驗證了。

  這裏只拿修改code的值來舉例,固然,還能夠修改用戶剩餘流量的值,文中已有部分代碼,修改的原理都同樣。最後看下破解的成果

結束語

  本文的目的但願你們經過文中的方法來提高本身的逆向能力,若是實在水平有限,想體驗一下破解後的軟件,本文開始的一篇文章中有獲取的方法

聲明:破解軟件只爲交流學習使用,不會涉及任何商業用途。如誰用於商業用途,後果自負。

這裏有一羣志趣相投相投的人,掃碼,備註「逆向」,拉你進逆向交流羣

掃碼
掃碼,備註「逆向」,拉你進逆向交流羣

本文已由公衆號「AndroidShared」首發

歡迎關注個人公衆號
掃碼關注公衆號,回覆「獲取資料」有驚喜
相關文章
相關標籤/搜索