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

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Android开发中,APK工程和SDK是两个不同的概念。 APK工程Android Package)是指将Android应用程序编译、打包成APK文件的工程。它包含了应用程序的所有资源文件(如布局文件、图像文件等)和代码文件(如Java源代码文件等),以及应用程序的清单文件(manifest)等。APK工程可以通过Android开发工具(如Android Studio)进行创建、编辑和编译,最终生成用于安装和运行的APK文件。 SDK(Software Development Kit)则是指软件开发工具包,它提供了开发Android应用程序所需的各种工具、库和文档。SDK包括了Android设备所需的API(Application Programming Interface)、编译器、调试器、模拟器等,开发者可以使用SDK来编写和测试Android应用程序。 将APK工程转变为SDK的过程,可以理解为将已经编写好的应用程序打包成一个可供其他开发者使用的工具包。这样其他开发者无需从头开始编写应用程序,而是可以直接在SDK的基础上进行开发。通常情况下,将APK工程变为SDK需要对工程进行一些改造和优化,以便其他开发者可以通过简单的调用来使用其中的功能和资源。 总而言之,APK工程是开发者编写和构建Android应用程序的工程,而SDK是为其他开发者提供开发Android应用程序所需的工具和资源的软件开发工具包。将APK工程变为SDK是为了方便其他开发者在其基础上进行二次开发。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值