iput v5, p0, MainActivity->n:I 00000070 new-array v1, v9, [String 00000074 const-string v5, "CPU: Paper" 00000078 aput-object v5, v1, v7 0000007C const-string v5, " CPU: Rock" 00000080 aput-object v5, v1, v6 00000084 const-string v5, "CPU: Scissors" iget-object v5, p0, MainActivity->P:Button 0000009E if-ne p1, v5, :B0 :A2 000000A2 const-string iget-object v5, p0, MainActivity->r:Button 000000B4 if-ne p1, v5, :C6 :B8 000000B8 const-string
1.打开killer,搜索AndroidManifest.xml 搜索到--- const-string v4, "Missing internet permission in AndroidManifest.xml v4}, Landroid/content/Context;->getPackageName()Ljava/lang/String; move-result-object v4 const-string android/gms/ads/internal/zzs;->zzrp:Lcom/google/android/gms/ads/internal/client/AdSizeParcel; const-string const-string v5, "Missing internet permission in AndroidManifest.xml. const-string v5, "Missing AdActivity with android:configChanges in AndroidManifest.xml.
move-result-object v3 invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V const-string StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 const-string Ljava/lang/String; move-result-object v0 .line 11 .local v0, pre:Ljava/lang/String; const-string virtual methods .method public o()Ljava/lang/String; .locals 1 .prologue .line 15 const-string
假如在一个方法中包含了五个寄存器(V0-V4),如下: .method public callMe(II)V const-string v0,"1" const-string v1,"1" 如下: .method public callMe(II)V .registers 5 const-string v0,"1" const-string v1,"1" v3= V4==>P1 V5==>P2 return-void .end method 或者 .method public callMe(II)V .locals 2 const-string v0,"1" const-string v1,"1" return-void .end method 该方法被调用的时候,调用方法的对象(即this引用)会保存在V2中,第一个参数在V3
iget-object v0, p0, Lcom/azqqd/主窗口;->有米广告1:Lcom/e4a/runtime/components/impl/android/n43/有米广告; const-string v1, "80b3665dbe24da6c" const-string v2, "b1ec288d42c62f47" move v4, v3 move v5, v3 iget-object v0, p0, Lcom/azqqd/主窗口;->有米广告1:Lcom/e4a/runtime/components/impl/android/n43/有米广告; const-string 在当前文件中搜索139: iget-object v0, p0, Lcom/azqqd/主窗口;->按钮1:Lcom/e4a/runtime/components/impl/android/n1/按钮; const-string 然后找到按钮1$被单击方法: .method public 按钮1$被单击()V .locals 1 .prologue .line 26 const-string v0
sput-boolean v0, Lcom/alibaba/android/arouter/core/LogisticsCenter;->registerByPlugin:Z .line 69 const-string invoke-static {v0}, Lcom/alibaba/android/arouter/core/LogisticsCenter;->register(Ljava/lang/String;)V const-string invoke-static {v0}, Lcom/alibaba/android/arouter/core/LogisticsCenter;->register(Ljava/lang/String;)V const-string invoke-static {v0}, Lcom/alibaba/android/arouter/core/LogisticsCenter;->register(Ljava/lang/String;)V const-string invoke-static {v0}, Lcom/alibaba/android/arouter/core/LogisticsCenter;->register(Ljava/lang/String;)V const-string
"crack.java" .method public static log(Ljava/lang/String;)V .locals 1 .prologue const-string [Ljava/lang/String; .line 21 .local v1, "str":[Ljava/lang/String; const/4 v2, 0x0 const-string method public static puts(Ljava/lang/String;)V .locals 7 .prologue :try_start_0 const-string <init>(Ljava/lang/String;Z)V .line 19 new-instance v4, Ljava/io/OutputStreamWriter; const-string v5, "debug" const-string v6, "file write error" invoke-static {v5, v6}, Landroid/util/Log
我们搜索“您获得”,定位到了bu.smali: new-instance v0, Ljava/lang/StringBuilder; const-string v1, "\u60a8\u83b7\u5f97 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v0 const-string
)V .registers 3 .param p1, "string" # Ljava/lang/String; .prologue .line 29 const-string 中会使用 .method 方法 .parameter 方法参数 .prologue 方法开始 .line 12 此方法位于第12行 move v0, v3 把v3寄存器的值移动到寄存器v0上 const-string v0, "she is a baby" .line 25 goto :goto_0 #跳转到goto_0标号处 .line 27 :pswitch_1 #case 1 const-string v0, "she is a girl" .line 28 goto :goto_0 #跳转到goto_0标号处 .line 30 :pswitch_2 #case 2 const-string v0, "she is a woman" .line 31 goto :goto_0 #跳转到goto_0标号处 .line 33 :pswitch_3 #case 3 const-string
return "hello"; } } 用smali代码表示为: .method public getName(Ljava/lang/String;)Ljava/lang/String; const-string getName方法 return-void .end method #声明getName方法 .method public getName()Ljava/lang/String; const-string getName方法 return-void .end method #声明getName方法 .method private getName()Ljava/lang/String; const-string 将返回值赋给v0 return-void .end method #声明getName方法 .method public getName()Ljava/lang/String; const-string 32位 最大32位 * const/high16 v0,0xFF7f0000 第二种 const-wide 占用两个容器 64位 const-wide v0,30 #占用v0和v1 总结 const-string
const-string v7, "\u7384\u5965\u516b\u5b577.2\u672a\u6ce8\u518c\uff01" invoke-virtual {p0, v7}, LMy/ LMy/XuanAo/BaZiYi/CSoftReg;->ChkNumC()Z move-result v7 if-eqz v7, :cond_b # 关键跳 # 成功分支 .line 195 const-string
我们点击第一个,文本附近的代码是这样: .line 27 :cond_4 if-nez v0, :cond_1 # return-void .line 28 const-string v0, "\u60a8 关键判断 if-ne v0, v3, :cond_b # 启动福利窗口 # ... .line 48 :cond_b if-nez v0, :cond_1 # return-void .line 49 const-string 那么主窗口中: # 第一处 .line 16 const/4 v0, 0x1 sput-boolean v0, Lcom/dgplay/公用模块;->vip:Z # 第二处 .line 18 :cond_0 const-string
在主窗口的时钟1$周期事件中,出现了: .line 48 const-string v0, "\u767b\u5f55\u5931\u8d25" # 登录失败 sput-object v0, Lcom 我们回到时钟1$周期事件,找到启动登录窗口的代码: .line 70 const-string v0, "\u767b\u5f55" # 登录 invoke-static {v0}, Lcom/e4a
Ljava/lang/String; // move-result-object v0 移动上一次方法调用的对象引用返回值到 v0 move-result-object v0 // const-string vx, 字符串 ID 存入字符串常量引用到 vx,通过字符串 ID 或字符串 const-string v1, "\r|\n" // 同上 const-string v2, " type=3 const-string v4, "\u5f53\u524d\u6821\u9a8c\u7801\u6709\u8bef\uff0c\u8bf7\u6838\u5b9e~\uff01 hlq/apktooldemo/MainActivity$1;->this$0:Lcom/hlq/apktooldemo/MainActivity; // 请输入正确的用户名以及校验码 const-string
hash2&title2 修改 smali\com\xunlei\cloud\action\search\AdviseEngine.smali 239 行 .line 127 :cond_1 const-string lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z move-result v2 if-eqz v2, :cond_2 .line 128 const-string 查看对应的dalvik代码 smali\com\xunlei\cloud\action\search\AdviseEngine.smali 990行 const-string v0, "magnet str3; localArrayList.add(localSnifferData); break; } 对应的dalvik 代码(具体见后面链接) locals 15 //15个寄存器 const-string
String;)V .registers 3 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; const-string
常量操作指令主要是const相关指令,格式如下: const-<类型> 寄存器, 操作数 const-string v1, "test" // 定义字符串“test”并存到 v1 寄存器中 const
activity/fd; .locals 5 const/4 v4, -0x1 new-instance v0, Ljava/lang/StringBuilder; const-string lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v0 const-string Builder; invoke-direct {v5,p0}, Landroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;)V const-string
Settings——Preferences,在general--Loclization处选择中文即可),然后选择上方菜单栏中的“搜索”,选择“在文件中查找”,设置好查找目录为classes文件夹,查找目标为用const-string 修改之后点“格式”->以UTF-8编码,“格式”->以ANSI编码(这一步是为了防止汉化出现乱码问题) 完成后保存,注意const-string后面的不一定是要汉化的,最好对照之前遗漏的单词 将classes
= 0x10 ,跳转至 cond_0 .line 49 const-string v8, "MD5" # 将字符串 "MD5" 存入寄存器 v8 # 调用静态方法 MessageDigest.getInstance move-result-object v0 # 上一步的执行结果存入 v0,是一个 byte[] 对象 .line 53 .local v0, "bytes":[B const-string 打 log 的 smali 代码是固定的,一般格式如下: const-string vX, "TAG" invoke-static {vX,vX}, Landroid/util/Log;->e(Ljava 把这两行代码加到注册码的检验操作之前就可以了: .line 63 .local v6, "userSN":Ljava/lang/String; # userSN = sb.toString() const-string