首先先解密一个最为简单的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放于我的共享资源中,就不再粘贴地址了,谢谢。