Method Profiling:使用 DDMS 获取触摸微信骰子按钮后所调用的函数并修改点数

原文URL : https://www.52pojie.cn/thread-773691-1-1.html

备用URL : https://blog.csdn.net/qfanmingyiq/article/details/81254913

以下是对以上链接的复制,作为个人参考:

备注:BuildProp Enhancer 是一个Xposed软件,可以让apk在不开启debugable的时候进行动态调试在你无从下手的时候我使用DDMS中的traceView工具来帮助我们减少工作量。


打开微信界面

<ignore_js_op>
 
记得重启手机


3 刷机修改android系统源码中的 ro.debugable=1和ro.secure=1(不推荐)正式开始使用traceView工具(我发现很多人居然不知道这个工具的名字= =但却使用过。)
<ignore_js_op>
 
可不看部分:方法前面有个synthetic注释 。内部类私有属性或者方法被外部类访问时会成成synthetic类或者synthetic方法。比如你会看access$001等。
如何证明? 反射机制就有这个相关api
Method method;
method.isSynthetic()
Method Profiling:使用 DDMS 获取触摸微信骰子按钮后所调用的函数并修改点数
我们在eF函数加入两个函数,一个log,和一个打印方法堆栈函数
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
public static int eF(int i, int i2) {
 
       Thread.dumpStack();
 
       Assert.assertTrue(i > i2);
       int rel = new Random(System.currentTimeMillis()).nextInt((i - i2) + 1) + i2;
 
       Log.d("FMY", "eF() called with: i = [" + i + "], i2 = [" + i2 + "] ,rel =["+rel+"]" );
       return rel;
   }




对应smali:
[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
.method public static eF(II)I
    .registers 6
    .param p0, "i"    # I
    .param p1, "i2"    # I
 
    .prologue
 
    invoke-static {}, Ljava/lang/Thread;->dumpStack()V
 
 
    if-le p0, p1, :cond_4f
 
    const/4 v1, 0x1
 
    :goto_6
    invoke-static {v1}, Ljunit/framework/Assert;->assertTrue(Z)V
 
 
    new-instance v1, Ljava/util/Random;
 
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J
 
    move-result-wide v2
 
    invoke-direct {v1, v2, v3}, Ljava/util/Random;-><init>(J)V
 
    sub-int v2, p0, p1
 
    add-int/lit8 v2, v2, 0x1
 
    invoke-virtual {v1, v2}, Ljava/util/Random;->nextInt(I)I
 
    move-result v1
 
    add-int v0, v1, p1
 
 
    .local v0, "rel":I
    const-string v1, "FMY"
 
    new-instance v2, Ljava/lang/StringBuilder;
 
    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
 
    const-string v3, "eF() called with: i = ["
 
    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
 
    move-result-object v2
 
    invoke-virtual {v2, p0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
 
    move-result-object v2
 
    const-string v3, "], i2 = ["
 
    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
 
    move-result-object v2
 
    invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
 
    move-result-object v2
 
    const-string v3, "] ,rel =["
 
    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
 
    move-result-object v2
 
    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
 
    move-result-object v2
 
    const-string v3, "]"
 
    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
 
    move-result-object v2
 
    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
 
    move-result-object v2
 
    invoke-static {v1, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
 
 
    return v0
 
 
    .end local v0    # "rel":I
    :cond_4f
    const/4 v1, 0x0
 
    goto :goto_6
.end method


smali删除所有java2smali工具生成的行号 就的.line xxx


这里我用apkkiller修改反编译回去即可。然后在安装回手机点击 查看日志


Method Profiling:使用 DDMS 获取触摸微信骰子按钮后所调用的函数并修改点数Ramdom 关键字然后逐个分析,但是我不推荐,前提是你知道他们开发者使用了这个函数用来生成塞子关键代码修改后的微信APK请稍等。。。
<ignore_js_op>