您的位置:首页 > 移动开发 > Android开发

Android Apk解密工程初探(1)——简单的例子

2010-11-23 09:54 555 查看
首先先解密一个最为简单的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;

3  iget-object v0, v0, Lcom/mstar/test/LisenceCheck;->medittext:Landroid/widget/EditText;

5  invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;

7  move-result-object v0

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
//比较v0和v1,若不相等,则跳转到cond_0处
1 if-eqz v0, :cond_0
//我们已经估计到youwin就是序列号了,再往下看看cond_0处,验证我们的想法

//cond_0处开始,不等的结果是把“listence uncorrect!” 回写到EditText处
1  :cond_0

3  iget-object v0, p0, Lcom/mstar/test/LisenceCheck$1;->this$0:Lcom/mstar/test/LisenceCheck;

5  iget-object v0, v0, Lcom/mstar/test/LisenceCheck;->medittext:Landroid/widget/EditText;

7  const-string v1, "lisence uncorrect!"

9  invoke-virtual {v0, v1}, Landroid/widget/EditText;->setText(Ljava/lang/CharSequence;)V
10
11 goto :goto_0
跳到这里,在EditText中显示了lisence uncorrect!,youwin就是我们要寻找的序列号。到这里,我们已经完成了第一个crackme,简单的常量字符串的破解。
apk放于我的共享资源中,就不再粘贴地址了,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  解密 android equals 破解