Android反编译破解签名验证

作者: 2b75747cf703 | 来源:发表于2016-12-18 01:23 被阅读4000次

    Android Studio无源码调试app

    很多apk对签名做了验证,重新打包的apk没办法运行,不过签名验证都是可破解的。

    Paste_Image.png

    不管代码如何混淆,核心代码怎么藏,肯定离不开签名获取的API调用。
    如果涉及到服务端验证,先安装原包,读取原包的签名数据,得到签名数据后原包就可以删除了。

    android获取APK签名信息及MD5指纹

    Paste_Image.png

    从这里我们可以知道,获取签名肯定离不开signatures这个变量,对反编译出来smali文件夹全文查找。
    推荐使用Sublime Text

    Paste_Image.png Paste_Image.png
    Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/Signature;
    

    可能会搜索出很多地方,不过一般第三方sdk可以不用考虑,比如支付、推送、广告等。

    Paste_Image.png

    然后分析一下前后代码,看不懂smali语法也没关系,切换到Java Decompiler看java代码就行。

    Paste_Image.png

    前后可能看不到最终的验证结果判断,所以要能够知道函数调用堆栈。

    invoke-static { }, Lcom/qiang/framework/LogHelper;->debug()V
    

    在logcat中可以看到如下结果


    Paste_Image.png

    LogHelper.java

    package com.qiang.framework;
    
    import android.util.Log;
    import com.qiang.gson.Gson;
    import com.qiang.gson.GsonBuilder;
    
    public class LogHelper
    {
        private static final String TAG = "Debug";
        private static Gson gson = new GsonBuilder().setPrettyPrinting().create();
    
        public static String getStackTrace(int start)
        {
            return getStackTrace(start, 5);
        }
    
        public static String getStackTrace(int start, int count)
        {
            StringBuilder stringBuilder = new StringBuilder();
            StackTraceElement[] stackTraceElements = new RuntimeException().getStackTrace();
            int i = start;
            while (i < stackTraceElements.length && i < start + count)
            {
                stringBuilder.append("\t");
                stringBuilder.append("at");
                stringBuilder.append(" ");
                stringBuilder.append(stackTraceElements[i].toString());
                stringBuilder.append("\n");
                i += 1;
            }
    
            return stringBuilder.toString();
        }
    
        public static int debug(String tag, String msg)
        {
            return Log.d(TAG, tag + ": " + msg + "\n" + getStackTrace(3));
        }
    
        public static int debug(String tag, String msg, Throwable throwable)
        {
            return Log.d(TAG, tag + ": " + msg + "\n" + getStackTrace(3), throwable);
        }
    
        public static void debug()
        {
            Log.d(TAG, TAG + "\n" + getStackTrace(3));
        }
    
        public static void debug(Object msg)
        {
            Log.d(TAG, gson.toJson(msg) + "\n" + getStackTrace(3));
        }
    
        public static void debug(Object msg, int count)
        {
            Log.d(TAG, gson.toJson(msg) + "\n" + getStackTrace(3, count));
        }
    
        public static int error(String tag, String msg)
        {
            return Log.e(TAG, tag + ": " + msg + "\n" + getStackTrace(3));
        }
    
        public static int error(String tag, String msg, Throwable throwable)
        {
            return Log.e(TAG, tag + ": " + msg + "\n" + getStackTrace(3), throwable);
        }
    
        public static void error()
        {
            Log.e(TAG, TAG + "\n" + getStackTrace(3));
        }
    
        public static void error(Object msg)
        {
            Log.e(TAG, gson.toJson(msg) + "\n" + getStackTrace(3));
        }
    
        public static void error(Object msg, int paramInt)
        {
            Log.e(TAG, gson.toJson(msg) + "\n" + getStackTrace(3, paramInt));
        }
    
        public static int info(String tag, String msg)
        {
            return Log.i(TAG, tag + ": " + msg + "\n" + getStackTrace(3));
        }
    
        public static int info(String tag, String msg, Throwable throwable)
        {
            return Log.i(TAG, tag + ": " + msg + "\n" + getStackTrace(3), throwable);
        }
    
        public static void info()
        {
            Log.i(TAG, TAG + "\n" + getStackTrace(3));
        }
    
        public static void info(Object msg)
        {
            Log.i(TAG, gson.toJson(msg) + "\n" + getStackTrace(3));
        }
    
        public static void info(Object msg, int count)
        {
            Log.i(TAG, gson.toJson(msg) + "\n" + getStackTrace(3, count));
        }
    
        public static int warning(String tag, String msg)
        {
            return Log.w(TAG, tag + ": " + msg + "\n" + getStackTrace(3));
        }
    
        public static int warning(String tag, String msg, Throwable throwable)
        {
            return Log.w(TAG, tag + ": " + msg + "\n" + getStackTrace(3), throwable);
        }
    
        public static void warning()
        {
            Log.w(TAG, TAG + "\n" + getStackTrace(3));
        }
    
        public static void warning(Object msg)
        {
            Log.w(TAG, gson.toJson(msg) + "\n" + getStackTrace(3));
        }
    
        public static void warning(Object msg, int count)
        {
            Log.w(TAG, gson.toJson(msg) + "\n" + getStackTrace(3, count));
        }
    }
    

    LogHelper.smali

    .class public Lcom/qiang/framework/LogHelper;
    .super Ljava/lang/Object;
    .source "LogHelper.java"
    
    
    # static fields
    .field private static final TAG:Ljava/lang/String; = "Debug"
    
    .field private static gson:Lcom/qiang/gson/Gson;
    
    
    # direct methods
    .method static constructor <clinit>()V
        .locals 1
    
        .prologue
        .line 10
        new-instance v0, Lcom/qiang/gson/GsonBuilder;
    
        invoke-direct {v0}, Lcom/qiang/gson/GsonBuilder;-><init>()V
    
        invoke-virtual {v0}, Lcom/qiang/gson/GsonBuilder;->setPrettyPrinting()Lcom/qiang/gson/GsonBuilder;
    
        move-result-object v0
    
        invoke-virtual {v0}, Lcom/qiang/gson/GsonBuilder;->create()Lcom/qiang/gson/Gson;
    
        move-result-object v0
    
        sput-object v0, Lcom/qiang/framework/LogHelper;->gson:Lcom/qiang/gson/Gson;
    
        return-void
    .end method
    
    .method public constructor <init>()V
        .locals 0
    
        .prologue
        .line 7
        invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    
        return-void
    .end method
    
    .method public static debug(Ljava/lang/String;Ljava/lang/String;)I
        .locals 3
        .param p0, "tag"    # Ljava/lang/String;
        .param p1, "msg"    # Ljava/lang/String;
    
        .prologue
        .line 37
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, ": "
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    
        move-result v0
    
        return v0
    .end method
    
    .method public static debug(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
        .locals 3
        .param p0, "tag"    # Ljava/lang/String;
        .param p1, "msg"    # Ljava/lang/String;
        .param p2, "throwable"    # Ljava/lang/Throwable;
    
        .prologue
        .line 42
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, ": "
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
    
        move-result v0
    
        return v0
    .end method
    
    .method public static debug()V
        .locals 3
    
        .prologue
        .line 47
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        const-string v2, "Debug\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 48
        return-void
    .end method
    
    .method public static debug(Ljava/lang/Object;)V
        .locals 3
        .param p0, "msg"    # Ljava/lang/Object;
    
        .prologue
        .line 52
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        sget-object v2, Lcom/qiang/framework/LogHelper;->gson:Lcom/qiang/gson/Gson;
    
        invoke-virtual {v2, p0}, Lcom/qiang/gson/Gson;->toJson(Ljava/lang/Object;)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 53
        return-void
    .end method
    
    .method public static debug(Ljava/lang/Object;I)V
        .locals 3
        .param p0, "msg"    # Ljava/lang/Object;
        .param p1, "count"    # I
    
        .prologue
        .line 57
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        sget-object v2, Lcom/qiang/framework/LogHelper;->gson:Lcom/qiang/gson/Gson;
    
        invoke-virtual {v2, p0}, Lcom/qiang/gson/Gson;->toJson(Ljava/lang/Object;)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2, p1}, Lcom/qiang/framework/LogHelper;->getStackTrace(II)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 58
        return-void
    .end method
    
    .method public static error(Ljava/lang/String;Ljava/lang/String;)I
        .locals 3
        .param p0, "tag"    # Ljava/lang/String;
        .param p1, "msg"    # Ljava/lang/String;
    
        .prologue
        .line 62
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, ": "
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
    
        move-result v0
    
        return v0
    .end method
    
    .method public static error(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
        .locals 3
        .param p0, "tag"    # Ljava/lang/String;
        .param p1, "msg"    # Ljava/lang/String;
        .param p2, "throwable"    # Ljava/lang/Throwable;
    
        .prologue
        .line 67
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, ": "
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1, p2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
    
        move-result v0
    
        return v0
    .end method
    
    .method public static error()V
        .locals 3
    
        .prologue
        .line 72
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        const-string v2, "Debug\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 73
        return-void
    .end method
    
    .method public static error(Ljava/lang/Object;)V
        .locals 3
        .param p0, "msg"    # Ljava/lang/Object;
    
        .prologue
        .line 77
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        sget-object v2, Lcom/qiang/framework/LogHelper;->gson:Lcom/qiang/gson/Gson;
    
        invoke-virtual {v2, p0}, Lcom/qiang/gson/Gson;->toJson(Ljava/lang/Object;)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 78
        return-void
    .end method
    
    .method public static error(Ljava/lang/Object;I)V
        .locals 3
        .param p0, "msg"    # Ljava/lang/Object;
        .param p1, "paramInt"    # I
    
        .prologue
        .line 82
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        sget-object v2, Lcom/qiang/framework/LogHelper;->gson:Lcom/qiang/gson/Gson;
    
        invoke-virtual {v2, p0}, Lcom/qiang/gson/Gson;->toJson(Ljava/lang/Object;)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2, p1}, Lcom/qiang/framework/LogHelper;->getStackTrace(II)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 83
        return-void
    .end method
    
    .method public static getStackTrace(I)Ljava/lang/String;
        .locals 1
        .param p0, "start"    # I
    
        .prologue
        .line 14
        const/4 v0, 0x5
    
        invoke-static {p0, v0}, Lcom/qiang/framework/LogHelper;->getStackTrace(II)Ljava/lang/String;
    
        move-result-object v0
    
        return-object v0
    .end method
    
    .method public static getStackTrace(II)Ljava/lang/String;
        .locals 4
        .param p0, "start"    # I
        .param p1, "count"    # I
    
        .prologue
        .line 19
        new-instance v2, Ljava/lang/StringBuilder;
    
        invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
    
        .line 20
        .local v2, "stringBuilder":Ljava/lang/StringBuilder;
        new-instance v3, Ljava/lang/RuntimeException;
    
        invoke-direct {v3}, Ljava/lang/RuntimeException;-><init>()V
    
        invoke-virtual {v3}, Ljava/lang/RuntimeException;->getStackTrace()[Ljava/lang/StackTraceElement;
    
        move-result-object v1
    
        .line 21
        .local v1, "stackTraceElements":[Ljava/lang/StackTraceElement;
        move v0, p0
    
        .line 22
        .local v0, "i":I
        :goto_0
        array-length v3, v1
    
        if-ge v0, v3, :cond_0
    
        add-int v3, p0, p1
    
        if-ge v0, v3, :cond_0
    
        .line 24
        const-string v3, "\t"
    
        invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        .line 25
        const-string v3, "at"
    
        invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        .line 26
        const-string v3, " "
    
        invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        .line 27
        aget-object v3, v1, v0
    
        invoke-virtual {v3}, Ljava/lang/StackTraceElement;->toString()Ljava/lang/String;
    
        move-result-object v3
    
        invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        .line 28
        const-string v3, "\n"
    
        invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        .line 29
        add-int/lit8 v0, v0, 0x1
    
        goto :goto_0
    
        .line 32
        :cond_0
        invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v3
    
        return-object v3
    .end method
    
    .method public static info(Ljava/lang/String;Ljava/lang/String;)I
        .locals 3
        .param p0, "tag"    # Ljava/lang/String;
        .param p1, "msg"    # Ljava/lang/String;
    
        .prologue
        .line 87
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, ": "
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
    
        move-result v0
    
        return v0
    .end method
    
    .method public static info(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
        .locals 3
        .param p0, "tag"    # Ljava/lang/String;
        .param p1, "msg"    # Ljava/lang/String;
        .param p2, "throwable"    # Ljava/lang/Throwable;
    
        .prologue
        .line 92
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, ": "
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1, p2}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
    
        move-result v0
    
        return v0
    .end method
    
    .method public static info()V
        .locals 3
    
        .prologue
        .line 97
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        const-string v2, "Debug\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 98
        return-void
    .end method
    
    .method public static info(Ljava/lang/Object;)V
        .locals 3
        .param p0, "msg"    # Ljava/lang/Object;
    
        .prologue
        .line 102
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        sget-object v2, Lcom/qiang/framework/LogHelper;->gson:Lcom/qiang/gson/Gson;
    
        invoke-virtual {v2, p0}, Lcom/qiang/gson/Gson;->toJson(Ljava/lang/Object;)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 103
        return-void
    .end method
    
    .method public static info(Ljava/lang/Object;I)V
        .locals 3
        .param p0, "msg"    # Ljava/lang/Object;
        .param p1, "count"    # I
    
        .prologue
        .line 107
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        sget-object v2, Lcom/qiang/framework/LogHelper;->gson:Lcom/qiang/gson/Gson;
    
        invoke-virtual {v2, p0}, Lcom/qiang/gson/Gson;->toJson(Ljava/lang/Object;)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2, p1}, Lcom/qiang/framework/LogHelper;->getStackTrace(II)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 108
        return-void
    .end method
    
    .method public static warning(Ljava/lang/String;Ljava/lang/String;)I
        .locals 3
        .param p0, "tag"    # Ljava/lang/String;
        .param p1, "msg"    # Ljava/lang/String;
    
        .prologue
        .line 112
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, ": "
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
    
        move-result v0
    
        return v0
    .end method
    
    .method public static warning(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
        .locals 3
        .param p0, "tag"    # Ljava/lang/String;
        .param p1, "msg"    # Ljava/lang/String;
        .param p2, "throwable"    # Ljava/lang/Throwable;
    
        .prologue
        .line 117
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, ": "
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1, p2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
    
        move-result v0
    
        return v0
    .end method
    
    .method public static warning()V
        .locals 3
    
        .prologue
        .line 122
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        const-string v2, "Debug\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 123
        return-void
    .end method
    
    .method public static warning(Ljava/lang/Object;)V
        .locals 3
        .param p0, "msg"    # Ljava/lang/Object;
    
        .prologue
        .line 127
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        sget-object v2, Lcom/qiang/framework/LogHelper;->gson:Lcom/qiang/gson/Gson;
    
        invoke-virtual {v2, p0}, Lcom/qiang/gson/Gson;->toJson(Ljava/lang/Object;)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2}, Lcom/qiang/framework/LogHelper;->getStackTrace(I)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 128
        return-void
    .end method
    
    .method public static warning(Ljava/lang/Object;I)V
        .locals 3
        .param p0, "msg"    # Ljava/lang/Object;
        .param p1, "count"    # I
    
        .prologue
        .line 132
        const-string v0, "Debug"
    
        new-instance v1, Ljava/lang/StringBuilder;
    
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
    
        sget-object v2, Lcom/qiang/framework/LogHelper;->gson:Lcom/qiang/gson/Gson;
    
        invoke-virtual {v2, p0}, Lcom/qiang/gson/Gson;->toJson(Ljava/lang/Object;)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const-string v2, "\n"
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        const/4 v2, 0x3
    
        invoke-static {v2, p1}, Lcom/qiang/framework/LogHelper;->getStackTrace(II)Ljava/lang/String;
    
        move-result-object v2
    
        invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        move-result-object v1
    
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v1
    
        invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
    
        .line 133
        return-void
    .end method
    

    只要把LogHelper.smali和反编译出来的smali文件一起重新编译就能够使用了。
    gson多版本兼容问题

    最终确定了验证结果所在行,修改为true即可。

    破解别人的apk添加自己的功能,可能会 最好用git或svn进行版本管理。

    Paste_Image.png

    相关文章

      网友评论

      • fa3af8e8e1c8:老师你好,我的QQ是81681140,可以请教个问题么?谢谢!!

      本文标题:Android反编译破解签名验证

      本文链接:https://www.haomeiwen.com/subject/pxjamttx.html