现在的位置: 首页 > 综合 > 正文

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

2012年03月03日 ⁄ 综合 ⁄ 共 1435字 ⁄ 字号 评论关闭

首先先解密一个最为简单的apk程序,这个apk的界面如下:

clip_image001

这个apk很简单,功能更简单,在输入框中输入内容,然后点击“验证”按钮,如果序列号正确,那么输入框中显示“lisence correct!”

clip_image003

输入的序列号不正确,那么输入框中显示“lisence uncorrect!”

clip_image005

通过点击“清除”按钮,情况输入框内的内容,重新输入。

我们的目的,当然就是要找出这个正确的序列号。

解密过程:

1.1、apktool反编译该apk文件

clip_image007

解压后出现CrackMe_ConstantString.apk同名文件夹:

clip_image009

1.2、理解LisenceCheck$1.smali中的代码含义,得到序列号

代码节选:

//获取EditText中的内容,保存在v0内

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

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

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

move-result-object v0

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处

:cond_0

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

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

const-string v1, "lisence uncorrect!"

invoke-virtual {v0, v1}, Landroid/widget/EditText;->setText(Ljava/lang/CharSequence;)V
10
11 goto :goto_0

跳到这里,在EditText中显示了lisence uncorrect!,youwin就是我们要寻找的序列号。到这里,我们已经完成了第一个crackme,简单的常量字符串的破解。

apk放于我的共享资源中,就不再粘贴地址了,谢谢。

抱歉!评论已关闭.