一个入门的Android CrackMe算法分析 静心学习.docx
- 文档编号:11709570
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:29
- 大小:19.96KB
一个入门的Android CrackMe算法分析 静心学习.docx
《一个入门的Android CrackMe算法分析 静心学习.docx》由会员分享,可在线阅读,更多相关《一个入门的Android CrackMe算法分析 静心学习.docx(29页珍藏版)》请在冰豆网上搜索。
一个入门的AndroidCrackMe算法分析静心学习
一个入门的AndroidCrackMe算法分析静心学习当前离线
了学习和熟悉smali语法,我把LisenceCheck.smali和它的一个匿名类LisenceCheck$1.smali从头到尾都做了注释,注释如下:
LisenceCheck.smali的注释
代码:
//当前的类
.classpublicLcom/mstar/test/LisenceCheck;
//当前类的父类
.superLandroid/app/Activity;
//当前类所在的源码文件
.source"LisenceCheck.java"
//该类的普通数据成员
#instancefields
//有一个默认访问权限的数据成员,名为a,类型为int
.fielda:
I
//有一个私有数据成员,名为appButtonOnClickListener,类型为View$OnClickListener对象引用
//不知道是否是编译器自动生成的
.fieldprivateappButtonOnClickListener:
Landroid/view/View$OnClickListener;
//有一个默认访问权限的数据成员,名为mbutton,类型为Button对象引用
.fieldmbutton:
Landroid/widget/Button;
//有一个默认访问权限的数据成员,名为mbuttonclear,类型为Button对象引用
.fieldmbuttonclear:
Landroid/widget/Button;
//有一个默认访问权限的数据成员,名为meditsn,类型为EditText对象引用
.fieldmeditsn:
Landroid/widget/EditText;
//有一个默认访问权限的数据成员,名为meditun,类型为EditText对象引用
.fieldmeditun:
Landroid/widget/EditText;
//有一个默认访问权限的数据成员,名为rd1,类型为Random对象引用
.fieldrd1:
Ljava/util/Random;
//该类的直接方法
#directmethods
//无参构造
.methodpublicconstructor
//该方法寄存器变量个数1
.locals1
//该方法的代码开始
.prologue
.line17
//构造父类
invoke-direct{p0},Landroid/app/Activity;->
.line51
//一个匿名类
new-instancev0,Lcom/mstar/test/LisenceCheck$1;
//匿名类的构造
invoke-direct{v0,p0},Lcom/mstar/test/LisenceCheck$1;->
//保存到了外部类的数据成员中,由此可以看出上面的
//.fieldprivateappButtonOnClickListener:
Landroid/view/View$OnClickListener;
//应该是编译器自动生成的
iput-objectv0,p0,Lcom/mstar/test/LisenceCheck;->appButtonOnClickListener:
Landroid/view/View$OnClickListener;
//该构造应该是编译器自动生成的,当时应该没有写构造函数
.line17
return-void
.endmethod
//该类的普通方法
#virtualmethods
//一个公有的onCreate方法,参数为Bundle对象引用,无返回值
.methodpubliconCreate(Landroid/os/Bundle;)V
//该方法寄存器变量个数2
.locals2
//参数p1名为savedInstanceState,类型为Bundle对象引用
.paramp1,"savedInstanceState" #Landroid/os/Bundle;
//该方法的代码开始
.prologue
.line28
//调用父类Activity的onCreate方法,参数为Bundle对象引用,隐含传递this指针(p0)
invoke-super{p0,p1},Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line29
//寄存器v0=0x7f030000
const/high16v0,0x7f030000
//调用该类的普通方法setContentView,参数为int,无返回值
invoke-virtual{p0,v0},Lcom/mstar/test/LisenceCheck;->setContentView(I)V
.line31
//寄存器v0=0x7f050002
constv0,0x7f050002
//调用该类的普通方法findViewById,参数为int,返回值为View对象引用
invoke-virtual{p0,v0},Lcom/mstar/test/LisenceCheck;->findViewById(I)Landroid/view/View;
//获取返回值保存到v0
move-result-objectv0
// Viewv=xxxxxx;
//对象类型转换成Button类型 (父类转子类) Buttonb=(Button)v;
check-castv0,Landroid/widget/Button;
//设置普通数据成员mbutton,该应该成员是在onCreate方法外定义的,不是在方法内定义的
//mbutton=v0
iput-objectv0,p0,Lcom/mstar/test/LisenceCheck;->mbutton:
Landroid/widget/Button;
.line32
//寄存器v0=0x7f050003
constv0,0x7f050003
//调用该类的普通方法findViewById,参数为int,返回值为View对象引用
invoke-virtual{p0,v0},Lcom/mstar/test/LisenceCheck;->findViewById(I)Landroid/view/View;
//获取返回值保存到v0
move-result-objectv0
// Viewv=xxxxxx;
//对象类型转换成Button类型 (父类转子类) Buttonb=(Button)v;
check-castv0,Landroid/widget/Button;
//设置普通数据成员mbuttonclear,该应该成员是在onCreate方法外定义的,不是在方法内定义的
//mbuttonclear=v0
iput-objectv0,p0,Lcom/mstar/test/LisenceCheck;->mbuttonclear:
Landroid/widget/Button;
.line34
//寄存器v0=0x7f050000
const/high16v0,0x7f050000
//调用该类的普通方法findViewById,参数为int,返回值为View对象引用
invoke-virtual{p0,v0},Lcom/mstar/test/LisenceCheck;->findViewById(I)Landroid/view/View;
//获取返回值保存到v0
move-result-objectv0
// Viewv=xxxxxx;
//对象类型转换成EditText类型 (父类转子类) EditTexte=(EditText)v;
check-castv0,Landroid/widget/EditText;
//设置普通数据成员meditun,该应该成员是在onCreate方法外定义的,不是在方法内定义的
//meditun=v0
iput-objectv0,p0,Lcom/mstar/test/LisenceCheck;->meditun:
Landroid/widget/EditText;
.line35
//寄存器v0=0x7f050001
constv0,0x7f050001
//调用该类的普通方法findViewById,参数为int,返回值为View对象引用
invoke-virtual{p0,v0},Lcom/mstar/test/LisenceCheck;->findViewById(I)Landroid/view/View;
//获取返回值保存到v0
move-result-objectv0
// Viewv=xxxxxx;
//对象类型转换成EditText类型 (父类转子类) EditTexte=(EditText)v;
check-castv0,Landroid/widget/EditText;
//设置普通数据成员meditsn,该应该成员是在onCreate方法外定义的,不是在方法内定义的
//meditsn=v0
iput-objectv0,p0,Lcom/mstar/test/LisenceCheck;->meditsn:
Landroid/widget/EditText;
.line37
//newRandom对象
new-instancev0,Ljava/util/Random;
//构造new好的对象
invoke-direct{v0},Ljava/util/Random;->
//设置普通数据成员rd1,该应该成员是在onCreate方法外定义的,不是在方法内定义的
//rd1=v0
iput-objectv0,p0,Lcom/mstar/test/LisenceCheck;->rd1:
Ljava/util/Random;
.line39
//获取普通数据成员rd1,该应该成员是在onCreate方法外定义的,不是在方法内定义的
//v0=rd1
iget-objectv0,p0,Lcom/mstar/test/LisenceCheck;->rd1:
Ljava/util/Random;
//寄存器v1=0x2710
const/16v1,0x2710
//调用Random类的普通方法nextInt,参数为int,返回值为int
invoke-virtual{v0,v1},Ljava/util/Random;->nextInt(I)I
//获取返回值保存到v0
move-resultv0
//设置普通数据成员a,该应该成员是在onCreate方法外定义的,不是在方法内定义的
//a=v0
iputv0,p0,Lcom/mstar/test/LisenceCheck;->a:
I
.line41
//获取普通数据成员mbutton,该应该成员是在onCreate方法外定义的,不是在方法内定义的
//v0=mbutton
iget-objectv0,p0,Lcom/mstar/test/LisenceCheck;->mbutton:
Landroid/widget/Button;
//获取普通数据成员appButtonOnClickListener,该成员应该是编译器自动生成的
//v1=appButtonOnClickListener
iget-objectv1,p0,Lcom/mstar/test/LisenceCheck;->appButtonOnClickListener:
Landroid/view/View$OnClickListener;
//调用(mbutton)Button类的setOnClickListener方法,参数为View$OnClickListener对象引用,无返回值
invoke-virtual{v0,v1},Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V
.line42
//获取普通数据成员mbuttonclear,该应该成员是在onCreate方法外定义的,不是在方法内定义的
//v0=mbuttonclear
iget-objectv0,p0,Lcom/mstar/test/LisenceCheck;->mbuttonclear:
Landroid/widget/Button;
//获取普通数据成员appButtonOnClickListener,该成员应该是编译器自动生成的
//v1=appButtonOnClickListener
iget-objectv1,p0,Lcom/mstar/test/LisenceCheck;->appButtonOnClickListener:
Landroid/view/View$OnClickListener;
//调用(mbuttonclear)Button类的setOnClickListener方法,参数为View$OnClickListener对象引用,无返回值
invoke-virtual{v0,v1},Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V
.line43
//函数退出,无返回值
return-void
.endmethod
//一个保护的方法,名为showToast,参数为int,无返回值
.methodprotectedshowToast(I)V
//该方法寄存器数量为3
.locals3
//参数p1的变量名为type,类型为int
.paramp1,"type" #I
//该方法的代码开始
.prologue
.line47
//调用普通方法getApplicationContext,无参数,返回值为Context对象引用
invoke-virtual{p0},Lcom/mstar/test/LisenceCheck;->getApplicationContext()Landroid/content/Context;
//获取返回值保存到v0
move-result-objectv0
//寄存器赋值v1="\u5e8f\u5217\u53f7\u6b63\u786e\uff01"
//v1="序列号正确!
"
const-stringv1,"\u5e8f\u5217\u53f7\u6b63\u786e\uff01"
.line48
//寄存器赋值v2=0
const/4v2,0x0
.line47
//调用Toast类的makeText静态方法,三个参数
//第一个参数为Context对象引用
//第二个参数为CharSequence对象引用
//第三个参数为int
//返回值为Toast对象引用
invoke-static{v0,v1,v2},Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
//获取返回值保存到v0
move-result-objectv0
.line48
//调用Toast类的show普通方法,无参数,无返回值
//vo为this指针
invoke-virtual{v0},Landroid/widget/Toast;->show()V
.line49
//函数退出,无返回值
return-void
.endmethod
LisenceCheck$1.smali的注释
代码:
//当前类
.classLcom/mstar/test/LisenceCheck$1;
//当前类的父类
.superLjava/lang/Object;
//当前类所在的源码文件
.source"LisenceCheck.java"
//接口注释
#interfaces
.implementsLandroid/view/View$OnClickListener;
//注释
#annotations
.annotationsystemLdalvik/annotation/EnclosingClass;
value=Lcom/mstar/test/LisenceCheck;
.endannotation
//匿名类 name=null
.annotationsystemLdalvik/annotation/InnerClass;
accessFlags=0x0
name=null
.endannotation
//编译器自动添加了一个数据成员为外部类的this指针
//外部类==>LisenceCheck
#instancefields
.fieldfinalsyntheticthis$0:
Lcom/mstar/test/LisenceCheck;
//该类的直接方法
#directmethods
//编译器自动生成的构造
.methodconstructor
.locals0
.prologue
.line1
iput-objectp1,p0,Lcom/mstar/test/LisenceCheck$1;->this$0:
Lcom/mstar/test/LisenceCheck;
.line51
invoke-direct{p0},Ljava/lang/Object;->
return-void
.endmethod
//该类的普通方法
#virtualmethods
//有一个公有的方法,名为onClick,参数为View对象引用,无返回值
.methodpubliconClick(Landroid/view/View;)V
//该方法寄存器个数10
.locals10
//该方法参数p1的名为v,类型为View对象引用
.paramp1,"v" #Landroid/view/View;
//该方法的代码开始
.prologue
//寄存器赋值v9=0
const/4v9,0x0
//寄存器赋值v8=""
const-stringv8,""
.line53
//对象类型转换,将参数p1转换成Button类型
check-castp1,Landroid/widget/Button;
.endlocalp1 #"v":
Landroid/view/View;
//获取外部类的this指针给v6
//v6=LisenceCheck$1.this$0
iget-objectv6,p0,Lcom/mstar/test/LisenceCheck$1;->this$0:
Lcom/mstar/test/LisenceCheck;
//获取外部类的数据成员mbutton给v6
//v6=LisenceCheck.mbutton
iget-objectv6,v6,Lcom/mstar/test/LisenceCheck;->mbutton:
Landroid/widget/Button;
//如果p1不等于n6跳转到:
cond_5标号处
if-nep1,v6,:
cond_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一个入门的Android CrackMe算法分析 静心学习 一个 入门 Android CrackMe 算法 分析 静心 学习
![提示](https://static.bdocx.com/images/bang_tan.gif)