Android Apk解密工程初探(1)——简单的例子
2010-11-23 09:54
555 查看
首先先解密一个最为简单的apk程序,这个apk的界面如下:
这个apk很简单,功能更简单,在输入框中输入内容,然后点击“验证”按钮,如果序列号正确,那么输入框中显示“lisence correct!”
输入的序列号不正确,那么输入框中显示“lisence uncorrect!”
通过点击“清除”按钮,情况输入框内的内容,重新输入。
我们的目的,当然就是要找出这个正确的序列号。
解压后出现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
//把常量字符串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
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放于我的共享资源中,就不再粘贴地址了,谢谢。
这个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
//把常量字符串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
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放于我的共享资源中,就不再粘贴地址了,谢谢。
相关文章推荐
- Android Apk解密工程初探(4)-- Bao力破解与简单逆变换
- Android Apk解密工程初探(2)--代码注入
- Android Apk解密工程初探(5)--广告和弹窗
- Android Apk解密工程初探-前言、关键字、解密环境
- Android Apk解密工程初探(3)--序列号保护方式简析
- Android APK 数据库升级简单例子
- 【转】Android WebKit 简单例子
- Android APK反编译就这么简单 详解(附图)
- android 图片拖动简单例子
- 一个简单的例子解析android中Handler线程和普通Thread的使用
- 如何从Android工程导出apk安装包
- Android json解析及简单例子
- Android webViewj简单处理apk的下载链接
- 【Android学习】两种MVP模式的学习(一):谷歌例子的简单学习
- 最简单的基于FFmpeg的移动端例子:Android 视频解码器
- 创建一个简单的android aidl工程
- android中控件ListView的简单实用例子
- android json解析及简单例子
- android 不使用xml的 Animation 简单例子
- Android APK反编译就这么简单 详解(附图)