为了全速下载某网盘的内容,我破解了一款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”首发

欢迎关注个人公众号
扫码关注公众号,回复“获取资料”有惊喜
相关文章
相关标签/搜索