Reflect.smali
.class public Lorg/acdd/hack/Reflect;
.super Ljava/lang/Object;
.source "Reflect.java"
# static fields
.field public static sActivityThread:Ljava/lang/Object;
.field public static sInstrumentation:Landroid/app/Instrumentation;
.field public static sLoadedApk:Ljava/lang/Object;
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 12
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static getActivityThread(Landroid/content/Context;)Ljava/lang/Object;
.registers 5
.prologue
const/4 v0, 0x0
.line 91
sget-object v1, Lorg/acdd/hack/Reflect;->sActivityThread:Ljava/lang/Object;
if-nez v1, :cond_23
.line 93
:try_start_5
const-string v1, "android.app.ActivityThread"
invoke-static {v1}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
:try_end_a
.catch Ljava/lang/Exception; {:try_start_5 .. :try_end_a} :catch_26
move-result-object v1
.line 96
const/4 v2, 0x0
:try_start_c
const-string v3, "sCurrentActivityThread"
invoke-static {v1, v2, v3}, Lorg/acdd/hack/Reflect;->getField(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
:try_end_11
.catch Ljava/lang/Exception; {:try_start_c .. :try_end_11} :catch_2b
move-result-object v0
.line 100
:goto_12
if-nez v0, :cond_21
.line 101
const/4 v0, 0x0
:try_start_15
const-string v2, "sThreadLocal"
invoke-static {v1, v0, v2}, Lorg/acdd/hack/Reflect;->getField(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
.line 103
:cond_21
sput-object v0, Lorg/acdd/hack/Reflect;->sActivityThread:Ljava/lang/Object;
:try_end_23
.catch Ljava/lang/Exception; {:try_start_15 .. :try_end_23} :catch_26
.line 109
:cond_23
:goto_23
sget-object v0, Lorg/acdd/hack/Reflect;->sActivityThread:Ljava/lang/Object;
return-object v0
.line 104
:catch_26
move-exception v0
.line 105
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
goto :goto_23
.line 97
:catch_2b
move-exception v2
goto :goto_12
.end method
.method public static getField(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.prologue
.line 19
invoke-virtual {p0, p2}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
.line 20
const/4 v1, 0x1
invoke-virtual {v0, v1}, Ljava/lang/reflect/Field;->setAccessible(Z)V
.line 21
invoke-virtual {v0, p1}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
return-object v0
.end method
.method public static getFieldNoException(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
.registers 4
.prologue
.line 26
:try_start_0
invoke-static {p0, p1, p2}, Lorg/acdd/hack/Reflect;->getField(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
:try_end_3
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_3} :catch_5
move-result-object v0
.line 31
:goto_4
return-object v0
.line 27
:catch_5
move-exception v0
.line 31
const/4 v0, 0x0
goto :goto_4
.end method
.method public static getInstrumentation(Landroid/content/Context;)Landroid/app/Instrumentation;
.registers 5
.prologue
.line 113
invoke-static {p0}, Lorg/acdd/hack/Reflect;->getActivityThread(Landroid/content/Context;)Ljava/lang/Object;
move-result-object v0
if-eqz v0, :cond_1b
.line 115
:try_start_6
sget-object v0, Lorg/acdd/hack/Reflect;->sActivityThread:Ljava/lang/Object;
.line 116
invoke-virtual {v0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v0
sget-object v1, Lorg/acdd/hack/Reflect;->sActivityThread:Ljava/lang/Object;
const-string v2, "getInstrumentation"
const/4 v3, 0x0
new-array v3, v3, [Ljava/lang/Object;
.line 115
invoke-static {v0, v1, v2, v3}, Lorg/acdd/hack/Reflect;->invoke(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/app/Instrumentation;
sput-object v0, Lorg/acdd/hack/Reflect;->sInstrumentation:Landroid/app/Instrumentation;
:try_end_1b
.catch Ljava/lang/Exception; {:try_start_6 .. :try_end_1b} :catch_1e
.line 122
:cond_1b
:goto_1b
sget-object v0, Lorg/acdd/hack/Reflect;->sInstrumentation:Landroid/app/Instrumentation;
return-object v0
.line 117
:catch_1e
move-exception v0
.line 118
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
goto :goto_1b
.end method
.method public static getPackageInfo(Landroid/content/Context;)Ljava/lang/Object;
.registers 3
.prologue
.line 134
sget-object v0, Lorg/acdd/hack/Reflect;->sLoadedApk:Ljava/lang/Object;
if-nez v0, :cond_10
.line 136
:try_start_4
invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v0
const-string v1, "mPackageInfo"
invoke-static {v0, p0, v1}, Lorg/acdd/hack/Reflect;->getField(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
move-result-object v0
sput-object v0, Lorg/acdd/hack/Reflect;->sLoadedApk:Ljava/lang/Object;
:try_end_10
.catch Ljava/lang/Exception; {:try_start_4 .. :try_end_10} :catch_13
.line 142
:cond_10
:goto_10
sget-object v0, Lorg/acdd/hack/Reflect;->sLoadedApk:Ljava/lang/Object;
return-object v0
.line 137
:catch_13
move-exception v0
.line 138
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
goto :goto_10
.end method
.method public static varargs invoke(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;
.registers 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.prologue
.line 67
invoke-virtual {p0, p2, p3}, Ljava/lang/Class;->getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
move-result-object v0
.line 68
const/4 v1, 0x1
invoke-virtual {v0, v1}, Ljava/lang/reflect/Method;->setAccessible(Z)V
.line 69
invoke-virtual {v0, p1, p4}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
return-object v0
.end method
.method public static varargs invoke(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
.registers 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.prologue
.line 51
const/4 v0, 0x0
.line 52
if-eqz p3, :cond_16
.line 53
array-length v0, p3
new-array v1, v0, [Ljava/lang/Class;
.line 54
const/4 v0, 0x0
:goto_7
array-length v2, p3
if-ge v0, v2, :cond_15
.line 55
aget-object v2, p3, v0
invoke-virtual {v2}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v2
aput-object v2, v1, v0
.line 54
add-int/lit8 v0, v0, 0x1
goto :goto_7
:cond_15
move-object v0, v1
.line 59
:cond_16
invoke-virtual {p0, p2, v0}, Ljava/lang/Class;->getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
move-result-object v0
.line 60
const/4 v1, 0x1
invoke-virtual {v0, v1}, Ljava/lang/reflect/Method;->setAccessible(Z)V
.line 61
invoke-virtual {v0, p1, p3}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
return-object v0
.end method
.method public static varargs invokeConstructor(Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.prologue
.line 85
invoke-virtual {p0, p1}, Ljava/lang/Class;->getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
move-result-object v0
.line 86
const/4 v1, 0x1
invoke-virtual {v0, v1}, Ljava/lang/reflect/Constructor;->setAccessible(Z)V
.line 87
invoke-virtual {v0, p2}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
return-object v0
.end method
.method public static varargs invokeNoException(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;
.registers 6
.prologue
.line 75
:try_start_0
invoke-static {p0, p1, p2, p3, p4}, Lorg/acdd/hack/Reflect;->invoke(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;
:try_end_3
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_3} :catch_5
move-result-object v0
.line 79
:goto_4
return-object v0
.line 76
:catch_5
move-exception v0
.line 79
const/4 v0, 0x0
goto :goto_4
.end method
.method public static setField(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
.registers 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.prologue
.line 35
invoke-virtual {p0, p2}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
.line 36
const/4 v1, 0x1
invoke-virtual {v0, v1}, Ljava/lang/reflect/Field;->setAccessible(Z)V
.line 37
invoke-virtual {v0, p1, p3}, Ljava/lang/reflect/Field;->set(Ljava/lang/Object;Ljava/lang/Object;)V
.line 38
return-void
.end method
.method public static setFieldNoException(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
.registers 5
.prologue
.line 42
:try_start_0
invoke-static {p0, p1, p2, p3}, Lorg/acdd/hack/Reflect;->setField(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
:try_end_3
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_3} :catch_4
.line 46
:goto_3
return-void
.line 43
:catch_4
move-exception v0
goto :goto_3
.end method
.method public static setHandlerCallback(Landroid/content/Context;Landroid/os/Handler$Callback;)V
.registers 6
.prologue
.line 147
:try_start_0
invoke-static {p0}, Lorg/acdd/hack/Reflect;->getActivityThread(Landroid/content/Context;)Ljava/lang/Object;
move-result-object v1
.line 148
invoke-virtual {v1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v2
const-string v3, "getHandler"
const/4 v0, 0x0
check-cast v0, [Ljava/lang/Object;
invoke-static {v2, v1, v3, v0}, Lorg/acdd/hack/Reflect;->invoke(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/os/Handler;
.line 149
const-class v1, Landroid/os/Handler;
const-string v2, "mCallback"
invoke-static {v1, v0, v2, p1}, Lorg/acdd/hack/Reflect;->setField(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
:try_end_1a
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_1a} :catch_1b
.line 153
:goto_1a
return-void
.line 150
:catch_1b
move-exception v0
.line 151
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
goto :goto_1a
.end method
.method public static setInstrumentation(Ljava/lang/Object;Landroid/app/Instrumentation;)V
.registers 4
.prologue
.line 127
:try_start_0
invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v0
const-string v1, "mInstrumentation"
invoke-static {v0, p0, v1, p1}, Lorg/acdd/hack/Reflect;->setField(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
:try_end_9
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_9} :catch_a
.line 131
:goto_9
return-void
.line 128
:catch_a
move-exception v0
.line 129
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
goto :goto_9
.end method