




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 andorid应用程序逆向分析及应用 石宗育刘凯谢飞帆摘要:该文以andorid系统的安全机制与权限系统的研究为基础基础,对apk文件进行逆向分析。从最基础的apk文件结构入手,首先对androidmanifest.xml文件分析,掌握了程序的基本信息后,依次对res资源文件,smali函数文件进行分析,进一步分析此app应用程序的运行流程。在掌握了此程序的运行流程后,进行逆向工程,对其smali代码进行审计分析,找出其中存在问题的地方,并实施自己的猜想与假设。关键词:android;网络安全;逆向工程:tp393 :a :1009-503
2、9(2018)19-0096-031 分析过程1.1 将apk安装包反编译成smali文件使用apktook将down.apk文件反编译成smali文件,使用的命令为apktool.batd-fdown.apktest。反编译后的文件如图1所示。其中androidmanifest.xml文件为andorid应用配置文件,并且是此应用的入口文件。其中包含一些程序必要的组件和权限信息,在后面的分析中是第一重要的文件。第二重要的是smali文件夹中以.smali结尾所有文件。这些文件支持着整个应用程序的运行,不论是需要程序直观显示的提示信息、功能按钮或页面布局,还是需要程序内部处理的数据传输、变量声
3、明、或函数调用,都是在这些文件中运行完成的1。所以当要分析一个程序的运行流程时,这些.smali结尾的文件是重中之重。最后一个需要分析的文件就是res文件夹中的资源文件了,其中包括着一些图片资源和字符资源,大部分的字符串都会在这里声明,当对程序内的字符进行搜索时,会有限在次文件夹中搜索。1.2 对androidmanifest.xml文件的分析在androidmanifest.xml这个文件中,我们需要分析的有兩个部分,第一部分为此app应用程序需要获取到我们手机的哪些权限,如图2。从图2中可以看到,此程序需要获取的权限有读取外部存储、写入外部存储、读取写入文件系统、获取网络状态、访问互联网、
4、获取电话状态、获取无线网状态、系统警报窗口和震动共九个权限,其中除获取电话状态以外全为普通权限,不需要用户授权系统将自动授予这些权限给应用。这些普通权限不会涉及用户的隐私。而获取电话状态这一权限则会获取用户的个人信息,所以当程序申请授予这一权限时,系统将会向用户申请授权,用户可以选择同意或者拒绝。当程序的所有权限都已经申请授权后,程序就可以依赖用户已经授权的权限继续运行2。在android的系统中,不论是普通权限还是敏感权限,都需要在androidmanifest.xml文件中声明,在声明之后系统才会进行授权操作。第二部分则是application标签中的各个属性,其中除了对程序本身的一些特征
5、进行声明以外,还声明了在andorid系统中是否与其他应用程序产生交互。如图3由图3可知,此程序在application标签中声明了以下属性。分别为允许用户自行清除数据、允许activity更换从属任务、允许该应用在任何时候都保持运行状态、此app应用程序的图标的图片名称为drawable、为应用程序锁实现的applicationg子类的全名为com.cyanflxy.magictowet.appapplication、此app程序的所有acticity的主题风格为默认。至此,对androidmanifest.xml文件的分析就已经完成了,知道了这个app应用程序获取的九种权限,并且都为正常权
6、限。那么就可以开始进行下一步地分析了。1.3 对res资源文件进行分析在res文件夹中,有drawable、layout、raw和values四种不同的文件夹,他们分别保存着程序运行过程中需要用到的不同资源。drawable文件夹中保存着图片文件,因为手机的屏幕大小与分辨率是不同的,所以这个文件夹中每一种图片都保存了多种不同的大小和分辨率,以便于适应更多的手机使用。layout文件夹中保存着大量的样式资源、主题和布局。在app程序运行时,会有不同的页面呈现出来,而这些页面的布局文件就保存在此文件夹中。raw文件中保存着app应用程序运行时会使用的音频文件。最后的values文件夹中则保存着很多
7、字符资源,在对apk文件进行逆向分析时,常用到此文件夹中的public.xml和strings.xml文件。这两个文件夹中保存着app程序运行时大部分的字符与字符串,有以英文命名的也有以中文命名的。但是在程序中如果直接明文的去使用这些字符是不安全的,所以在这些文件会给每一个字符设置一个id号,当需要调用这个字符时,就获取到这个字符的id号,再进行字符的调用。如图4。1.4 对smali文件进行分析在smali文件中保存着此app应用程序运行时需要的函数,这些函数文件都是以.smali结尾的。在这些函数中,主函数的命名中,除去部分开发者为了apk文件的安全或者apk文件本身经过代码混淆和加固,一
8、般都带有acticity。如图5。在对这些文件进行分析时,首先要对acticity主函数进行分析。之所以说activity为主函数,是因为在apk文件中,不论其他的子函数在哪个位置,其功能是什么,最后都会直接或间接地被activity的主函数调用。所以首先分析主函数有利于对整个smali文件结构的分析与规划整理。此apk的activity主函数的部分内容如下.method public onclick(landroid/view/view;)v.line 46const v0, 0x7f0b0058invoke-virtual p0, v0, lcom/ctf/ctf/ctfactivity;
9、->findviewbyid(i)landroid/view/view;move-result-object v0check-cast v0, landroid/widget/button;iput-object v0, p0, lcom/ctf/ctf/ctfactivity;->but:landroid/widget/button;.line 47const v0, 0x7f0b0059invoke-virtual p0, v0, lcom/ctf/ctf/ctfactivity;->findviewbyid(i)landroid/view/view;move-resul
10、t-object v0check-cast v0, landroid/widget/textview;iput-object v0, p0, lcom/ctf/ctf/ctfactivity;->tex:landroid/widget/textview;.line 55const-string v0, "administrator".line 56.local v0, "admin":ljava/lang/string;iget-object v7, p0, lcom/ctf/ctf/ctfactivity$1;->this$0:lcom/c
11、tf/ctf/ctfactivity;invoke-virtual v7, v0, lcom/ctf/ctf/ctfactivity;->string1(ljava/lang/string;)imove-result v2.line 57.local v2, "ctf1":iif-ne v2, v1, :cond_0.line 58iget-object v7, p0, lcom/ctf/ctf/ctfactivity$1;->this$0:lcom/ctf/ctf/ctfactivity;invoke-virtual v7, v3, lcom/ctf/ctf/
12、ctfactivity;->flag(ljava/lang/string;)ljava/lang/string;move-result-object v6.line 59.local v6, "message_1":ljava/lang/string;iget-object v7, p0, lcom/ctf/ctf/ctfactivity$1;->this$0:lcom/ctf/ctf/ctfactivity;iget-object v7, v7, lcom/ctf/ctf/ctfactivity;->tex:landroid/widget/textvie
13、w;invoke-virtual v7, v6, landroid/widget/textview;->settext(ljava/lang/charsequence;)v.line 62:cond_0const-string v5, "sorry plues try again".line 63.local v5, "message":ljava/lang/string;iget-object v7, p0, lcom/ctf/ctf/ctfactivity$1;->this$0:lcom/ctf/ctf/ctfactivity;iget-
14、object v7, v7, lcom/ctf/ctf/ctfactivity;->tex:landroid/widget/textview;invoke-virtual v7, v5, landroid/widget/textview;->settext(ljava/lang/charsequence;)v.line 67return-void.end method雖然smali代码是android系统的底层汇编代码,但是它与x86汇编代码还是有一定的区别的,在smali中不会涉及内存与堆栈的问题,而是通过v寄存器和p寄存器进行数据的存储、传输与运算3。从以上的smali代码中可
15、以看出line46与line47分别为获取button和textview两个标签中的id,以便于对其数据进行处理。而line55、line56、line57则是对字符串"administrator"与id为admin的textview标签中输入的数据进行比较,如若不同则跳转到line62,通过名为message的变量输出提示信息"sorry plues try again".如若相同则不跳转继续运行line58与line59的代码,其内容为调用一个名为flag的函数,并将这个函数的返回值传入到名为message_1的变量,并通过其进行输出。在最后的lin
16、e67中,其内容为返回一个void类型的返回值,这里之所以要返回void类型的返回值,是因为在这一段代码的第一行的最末尾字符v,表示了这个onclick函数是一个返回值类型为void的函数。那么现在这个主函数的功能就已经分析出来了,这是一个返回值类型为void名为onclick的函数,其功能为将textview标签中获取的字符串,也就是在app应用中输入的字符串,与其原本定义好的字符串"administrator"做比较。如若两者相同,则输出flag函数中的提示信息,如若不相同,则输出"sorry plues try again"提示信息。2 逆向工程及
17、应用对于以上smali的代码中,可以进行一个大胆的假设,既然可以看懂这些smali代码,那么是否可以把其中的某些重要的代码做一些修改,改变其原本的运行轨迹,使得这个apk不能实现原有的功能呢。在以上的smali代码中,存在着可以修改的部分,并且这一部分可以将这个onclick主函数的功能改变。这个主函数的功能就是通过一个判断来确定输出正确的提示信息还是错误的提示信息,那么如果将这个判断修改了,则改变了这个app的原有功能,从而也达到了对apk文件进行逆向工程的目的。3 结束语随着移动设备的普及,android系统也逐渐地进入人们的视线内。而相比与苹果的ios系统,andorid由于是开源的原因,使得其app应用程序可以被任意一个人开发。而又因为国内并没有一个类似于美国googleplay的官方软件下载平台,虽然在我们使用各种app时带来了许多便利,但是也
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学影像数据的共享与隐私保护的平衡点探索
- 区块链助力教育管理实现数字化升级
- 买方回复销售合同范例
- 医疗设备维护与风险降低方案
- 医疗大数据助力精准疾病预测与防控
- bot水务合同范例
- 视网膜震荡与挫伤的临床护理
- 江苏省徐州市铜山区2024-2025学年高一下学期4月期中考试 化学 PDF版含答案
- 临时雇佣饭店合同范例
- 2024年天然气液化模块项目投资申请报告代可行性研究报告
- Product Monitoring产品监视与测量程序(中英文)
- 压力管道安全检查表参考范本
- SB∕T 10170-2007 腐乳
- 外贸进出口流程图
- 部编人教版小学五年级下册语文文言文阅读理解课后专项练习
- 皮肤管理--ppt课件
- 双向气动插板门使用说明书
- 无生老母救世血书宝卷
- (完整版)2019年高考数学浙江卷(附答案)
- 信用社大额贷款会审制度
- 门式起重机检验报告
评论
0/150
提交评论