欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Android应用程序逆向入门

来源:本站整理 作者:佚名 时间:2018-04-27 TAG: 我要投稿

我们每天都会在Google Play商店看到一系列新的Android应用程序,从游戏到公用设施,再到物联网设备客户端等等,几乎我们生活中的每一个方面都可以通过一个app以某种方式进行控制。我们有智能家居,智能健身设备和智能咖啡机 ……但是这种APP是否智能或者是否安全:)
逆向Android APP可以用一个(相对)简单而有趣的方式来进行讲解,这就是为什么我决定写这篇博客文章,我将尝试解释基础知识,并给大家一些我的“技巧”来让大家更快,更有效的逆向APP。
我不会深入研究技术细节,你可以自学Android的工作原理,Dalvik VM是如何工作等等,这将是一个非常基本的实用指南,而不是一个充满理论且都是无用东西的文章。
让我们开始吧!

前提准备
为了遵循APK 逆向的介绍,有几个前提准备:
一个工作的大脑(我不再认为这是理所当然的……)
Android智能手机(doh!)。
您有Java编程语言的基本知识(如果您阅读它,您会理解它)。
您的计算机上安装了JRE。
您安装了adb。
您的智能手机上已启用安卓开发者模式并开启USB调试。
什么是APK?
Android应用程序打包为APK(Android Package)文件,该文件实质上是一个ZIP文件,其中包含编译代码,资源,签名,清单(manifest)以及软件运行所需的所有其他文件。作为ZIP文件,我们可以使用unzip命令(或者使用其他解压软件)来查看其内容:
unzip application.apk -d application
以下是您可以在APK中找到的内容。
/AndroidManifest.xml (file)
这是描述应用程序请求什么权限的XML清单文件的二进制表示形式(请记住,某些权限可能会在APP运行时请求并且未在此处声明),那里有什么活动(GUI),什么服务(在没有UI的情况下在后台运行的东西)以及什么接收器(可以接收和处理系统事件的类,例如设备启动或传入SMS)。
一旦反编译(稍后会更多),它将如下所示:
manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.appname"
                                                                     platformBuildVersionCode="24"
                                                                     platformBuildVersionName="7.0">
    uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    uses-permission android:name="android.permission.INTERNET"/>
    application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true" android:theme="@style/AppTheme">
        activity android:name="com.company.appname.MainActivity">
            intent-filter>
                action android:name="android.intent.action.MAIN"/>
                category android:name="android.intent.category.LAUNCHER"/>
            intent-filter>
        activity>
    application>
manifest>
请记住,这是隔离应用程序“入口点”的完美起点,即为了理解整个软件的逻辑而首先要逆向的类。例如,在这种情况下,我们将开始检查被声明为应用程序主UI的类com.company.appname.MainActivity。
/assets/* ( folder )
该文件夹将包含特定的应用程序文件,例如APP可能需要播放的wav文件,自定义字体文件等。反过来说,这通常不是很重要,除非你在软件内部找到对这些文件的函数引用.
/res/* ( folder )
所有资源,如活动xml文件,图像和自定义样式都存储在此处。
/resources.arsc ( file )
这是所有资源的“索引”,长话短说,在每个资源文件中都分配了一个数字标识符,应用程序将使用该标识符来标识特定条目,并将resources.arsc文件映射到它们的标识符……没有什么值得关注的。
/classes.dex ( file )
该文件包含APP的Dalvik(运行Android应用程序的虚拟机)字节码,请让我更好地解释它。Android应用程序(大多数情况下)是使用Java编程语言开发的。然后将java源文件编译成Dalvik虚拟机最终将执行的字节码……类似于Java源文件编译为.class文件。

[1] [2] [3] [4] [5] [6]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载