首先先解密一个最为简单的apk程序,这个apk的界面如下:
这个apk很简单,功能更简单,在输入框中输入内容,然后点击“验证”按钮,如果序列号正确,那么输入框中显示“lisence correct!”
输入的序列号不正确,那么输入框中显示“lisence uncorrect!”
通过点击“清除”按钮,情况输入框内的内容,重新输入。
我们的目的,当然就是要找出这个正确的序列号。
解密过程:
1.1、apktool反编译该apk文件
解压后出现CrackMe_ConstantString.apk同名文件夹:
1.2、理解LisenceCheck$1.smali中的代码含义,得到序列号
代码节选:
…
//获取EditText中的内容,保存在v0内
1 iget-object v0, p0, Lcom/mstar/test/LisenceCheck$1;->this$0:Lcom/mstar/test/LisenceCheck;
2
3 iget-object v0, v0, Lcom/mstar/test/LisenceCheck;->medittext:Landroid/widget/EditText;
4
5 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;
6
7 move-result-object v0
8
9 invoke-interface {v0}, Landroid/text/Editable;->toString()Ljava/lang/String;
10
11 move-result-object v0
2
3 iget-object v0, v0, Lcom/mstar/test/LisenceCheck;->medittext:Landroid/widget/EditText;
4
5 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;
6
7 move-result-object v0
8
9 invoke-interface {v0}, Landroid/text/Editable;->toString()Ljava/lang/String;
10
11 move-result-object v0
//把常量字符串youwin保存在v1内,
1 const-string v1, "youwin"
2
3 invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
4
5 move-result v0
2
3 invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
4
5 move-result v0
//比较v0和v1,若不相等,则跳转到cond_0处
1 if-eqz v0, :cond_0
//我们已经估计到youwin就是序列号了,再往下看看cond_0处,验证我们的想法
…
//cond_0处开始,不等的结果是把“listence uncorrect!” 回写到EditText处
1 :cond_0
2
3 iget-object v0, p0, Lcom/mstar/test/LisenceCheck$1;->this$0:Lcom/mstar/test/LisenceCheck;
4
5 iget-object v0, v0, Lcom/mstar/test/LisenceCheck;->medittext:Landroid/widget/EditText;
6
7 const-string v1, "lisence uncorrect!"
8
9 invoke-virtual {v0, v1}, Landroid/widget/EditText;->setText(Ljava/lang/CharSequence;)V
10
11 goto :goto_0
2
3 iget-object v0, p0, Lcom/mstar/test/LisenceCheck$1;->this$0:Lcom/mstar/test/LisenceCheck;
4
5 iget-object v0, v0, Lcom/mstar/test/LisenceCheck;->medittext:Landroid/widget/EditText;
6
7 const-string v1, "lisence uncorrect!"
8
9 invoke-virtual {v0, v1}, Landroid/widget/EditText;->setText(Ljava/lang/CharSequence;)V
10
11 goto :goto_0
跳到这里,在EditText中显示了lisence uncorrect!,youwin就是我们要寻找的序列号。到这里,我们已经完成了第一个crackme,简单的常量字符串的破解。
apk放于我的共享资源中,就不再粘贴地址了,谢谢。