)V #设置取消按钮的监听器
invoke-virtual {p0},
Lcom/qihoo360/mobilesafe/ui/privatespace/PrivateSetupPreference;->isFinishing() Z
move-result v0
if-nez v0, :cond_0
invoke-virtual {v3}, Lcom/qihoo360/mobilesafe/ui/dialog/DialogFactory;->show()V #显示出来
:cond_0 return-void
.end method
代码我注释的很详细了,关键点也是加黑部分的设置监听器的地方,我们看看 “agj.smali”文件:
.method public onClick(Landroid/view/View;)V
.locals 3
iget-object v0, p0, Lagj;->a:Landroid/widget/EditText;
invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; #
☻获取密码
move-result-object v0
iget-object v1, p0, Lagj;->b:Landroid/widget/EditText;
invoke-virtual {v1}, Landroid/widget/EditText;->getText()Landroid/text/Editable;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/Object;->toString()Ljava/lang/String; #
☻获取确认密码
move-result-object v1
invoke-static {v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z #判断密码是否为空
move-result v2
if-nez v2, :cond_0
invoke-static {v1}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z #判断确认密码是否 为空
move-result v2
if-nez v2, :cond_0
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
#判断两密码是否相等
move-result v0
if-nez v0, :cond_1
:cond_0
iget-object v0, p0, Lagj;->d:Lcom/qihoo360/mobilesafe/ui/privatespace/PrivateSetupPreference;
const v1, 0x7f0b009d
const/4 v2, 0x0
invoke-static {v0, v1, v2}, Landroid/widget/Toast;->makeText(Landroid/content/Context;II)Landroid/widget/To
ast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V #提示密码输入错误
:goto_0 return-void
:cond_1
iget-object v0, p0, Lagj;->a:Landroid/widget/EditText;
invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; #
再次获取密码
move-result-object v0
iget-object v1, p0, Lagj;->d:Lcom/qihoo360/mobilesafe/ui/privatespace/PrivateSetupPreference;
invoke-static {v1, v0}, Laue;->g(Landroid/content/Context;Ljava/lang/String;)V # ☻调用 g()方法☻
iget-object v0, p0, Lagj;->c:Lcom/qihoo360/mobilesafe/ui/dialog/DialogFactory;
invoke-virtual {v0}, Lcom/qihoo360/mobilesafe/ui/dialog/DialogFactory;->dismiss()V #退出对话框
goto :goto_0
.end method
处理很简单,如果输入没有错误的话就调用 aue->g()方法,然后退出对话框,我们 继续跟踪代码:
.method public static g(Landroid/content/Context;Ljava/lang/String;)V
.locals 3
sput-object p1, Laue;->u:Ljava/lang/String;
invoke-static {p0}, Laue;->p(Landroid/content/Context;)Ljava/lang/String; #☻调用 aue-p()方法☻
move-result-object v0 #保存“private_security_token”到 v0
invoke-static {p0}, Landroid/preference/PreferenceManager;->getDefaultSharedPreferences(Landroid/co ntent/Context;)Landroid/content/SharedPreferences;
move-result-object v1
invoke-interface {v1}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$E
ditor; #获取一个编辑器
move-result-object v1
const-string v2, "private_password_token" #要写入保存的键值
invoke-static {v0, p1},
Lals;->c(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
#☻调用 als-c()方法进行加密
move-result-object v0
invoke-interface {v1, v2, v0}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/l
ang/String;)Landroid/content/SharedPreferences$Editor; #调用编辑器的方法写入字
符串值
invoke-interface {v1}, Landroid/content/SharedPreferences$Editor;->commit()Z#提交保存
return-void
.end method
这里将要保存的密码进行加密后保存,关键点就在于分析 aue-p()与 als-c()了。这里 我 再 跟下 去怕 没完没 了 ,说下 aue-p() 吧,它 的作 用是 写 入并保 存 “ private_security_token”, 而 als-c()方法 则 传入“ private_password_token”与 “private_security_token”进行 DES 加密,最后调用 als-a()方法进行位移与运算,最后 写入配置文件中。总结下代码的步骤为 |