.line 13 invoke-virtual {p0}, Lcn/feicong/HelloAndroid/HelloAndroidActivity;->ShowString()V .line 14 return-void .end method 可以看到 const/high16 v1, 0x7f04 将 V1 寄存器的高 16 位设置为 0x7f04,低位未设置则 为 0,然后调用 getString()将结果保存到 v0 并设置到 str 中,在这里注意一下 invoke-virtual 之类调用的格式,在 OpCode 后面的括号中是参数列表,用逗号分隔,后面 'L'打头的是相应参数的数据类型,用分号隔开,大写字符'I’表示为 int 类型。我们在反 编译的 文件夹 中搜 索 调用了 ID 为 0x7f060167 文 件。 发 现 R$string.smali 与 DocumentManager.smali 两个文件中有调用,第 1 个为代码编写时自动生成的,可以无视,第 2 个就是重点了,我们打开 DocumentManager.smali 文件查找调用处,代码为: .method static synthetic e(Lcn/wps/moffice/documentmanager/DocumentManager;)V .locals 3 iget-object v0, p0, Lcn/wps/moffice/documentmanager/DocumentManager;->cPj:Lcn/wps/moffice/write r/view/beans/g; if-eqz v0, :cond_0 //如果 g 对象获取失败就跳到过期提示,这里是爆破点(g 就是我们见到的过期提示框) iget-object v0, p0, Lcn/wps/moffice/documentmanager/DocumentManager;->cPj:Lcn/wps/moffice/write r/view/beans/g; invoke-virtual {v0}, Lcn/wps/moffice/writer/view/beans/g;->isShowing()Z //g 对象是否已经显示 move-result v0 if-nez v0, :cond_1 //如果 g 显示了就直接返回就直接返回 :cond_0 new-instance v0, Lcn/wps/moffice/writer/view/beans/g; //创建一个 g 的实 例 invoke-direct {v0, p0}, Lcn/wps/moffice/writer/view/beans/g;-><init>(Landroid/content/Context;)V // 构造函数 const v1, 0x7f060166 //字符串常量产品过期 invoke-virtual {v0, v1}, Lcn/wps/moffice/writer/view/beans/g;->eb(I)Lcn/wps/moffice/writer/view/bean s/g; move-result-object v0 //调用 g 的 eb()方法,应该是设置弹出框的标题 const v1, 0x7f060167 //字符串常量这是一个有使用期限的版本,从 2012 年 1 月 1 日开始此版本已过期, 请确保网络通畅,并立即检查升级。 invoke-virtual {p0, v1}, Lcn/wps/moffice/documentmanager/DocumentManager;->getString(I)Ljava/lan g/String; move-result-object v1 //取得字符串 invoke-virtual {v0, v1}, Lcn/wps/moffice/writer/view/beans/g;->be(Ljava/lang/String;)Lcn/wps/moffice /writer/view/beans/g;
move-result-object v0//调用 g 的 be()方法,应该是设置弹出框的内容 const v1, 0x7f060112 new-instance v2, Lcn/wps/moffice/documentmanager/DocumentManager$4; invoke-direct {v2, p0}, Lcn/wps/moffice/documentmanager/DocumentManager$4;-><init>(Lcn/wps/moffice/docu |