3

查看现有的 Android 应用程序,我有完整的源代码,我想知道如何确定哪个适配器处理来自正在运行的应用程序中特定屏幕的 UI 的事件。

有许多布局 (XML) 文件和大量(数量极少)的适配器。到目前为止,猜测、grepping 和设置调试点并没有让我找到有问题的适配器。(坦率地说,我不确定我什至可以为我正在尝试处理的屏幕找到正确的布局文件!)

我非常熟悉 Web 开发和 PHP,并且给定了一个应用程序,有很多方法可以找到进入“控制器”代码的方法。也非常了解Java,并且到目前为止一直在为应用程序制作mod,但现在卡住了......有人可以给我一些关于逆向工程Android应用程序的指针吗?

4

3 回答 3

2

上次我这样做是一年前,当时 Android 安全性很差(而且不是很多 proguard),所以我使用了 eclipse 反编译器和 dex2jar。其实我很惊讶 - 你怎么能得到完整的代码?

使用 eclipse 的好处是您可以回溯调用者的功能。

问题是 - 我不认为你是在适配器之后。如果屏幕是一个列表,那么您实际上是在ListView(包含适配器)之后。也许适配器甚至可能包含对列表视图本身的引用。所以,尝试找到视图而不是适配器

如果它是一个listView,那么实际上,寻找一个名为“xxxx_row.xml”的东西,里面有“row”这个词,因为这是listview视图的标准约定。

于 2012-11-13T19:16:51.010 回答
2

这适用于大多数 Android 应用程序。

通常,每个屏幕都是由 Activity 类的一个实例构建的。

  • 检查项目根目录中的 AndroidManifest.xml。查找包含如下意图过滤器的活动声明:

        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    
    </activity>
    

这是应用程序的“入口”点,不是严格意义上的,但足够接近此任务。事实上,Android 会创建 Application 类的内部单例实例,该实例可以扩展但通常不会扩展。Grep 用于“扩展应用程序”或“:应用程序”以了解。

  • 找到与活动名称同名的类文件,本例中SampleAppMainActivity.

  • 打开这个类文件,找到 onCreate()。这是实例化 Activity 时 Android 调用的第一个方法。

  • 找到 setContentView()。它将引用一个布局,可以在 res/layout 或其中的子文件夹中找到,就像这样。R.layout.sampleappmainlayout。文件本身将是 XML。此文件定义活动屏幕中使用的 UI 元素(它可能包含合并其他布局)。

  • 如果有多个活动,则在此活动中寻找创建Intent类的实例,通常附加到按钮或菜单单击侦听器。

从第2步递归:)

其他答案涉及适配器的细节。或者也许不是?Android 使用适配器来处理数据的检索并将这些数据绑定到 UI 元素。它们不“响应 UI 事件”。您是否在询问 MVC 模型中的视图控制器?

祝你好运。

PS 无论你的客户付给你什么,这还不够。我可以猜到你是如何获得这个演出的,但是你好。只是哟。

于 2012-11-13T22:16:18.533 回答
-1

操作系统 Windows 的说明:

  1. 下载 dex2jar-0.0.7.10-SNAPSHOT.zip(版本可以不同)并解压到文件夹 D:\Decompile。
  2. 下载Java Decompiler即JD -GUI并解压到同一个文件夹。
  3. 下载 apktool1.4.1.tar.bz2和apktool -install-windows-r04-brut1.tar.bz2并解压到系统文件夹,即 C:\Windows。
  4. 例如我们的应用程序名为 Calculator.apk,将其移动到带有Java Decompilerdex2jar的文件夹
  5. 打开命令行工具 C:\Windows\System32\cmd.exe
  6. 将目录改成dex2jar所在的文件夹,输入命令dex2jar Calculator.apk,如果都成功的话在同一个文件夹中出现文件Calculator.apk.dex2jar.jar
  7. jd-gui从上一步打开并打开文件。
  8. 选择File-Save All Sources并保存文件。
  9. 提取生成的 zip 存档。
  10. 将生成的文件夹放入文件夹 src(必须预先创建)。(绕过这个结构是D:\Decompile\Calculator\src\com\android)。
  11. 再次,在命令行输入命令apktool d Calculator.apk Calculator,其中Calculator.apk-包名,Calculator-文件夹进行反编译。
  12. 如果一切顺利,那么文件夹中将有两种格式的源文件(java 和 smali),资源和文件 AndroidManifest.xml、apktool.yml。
于 2012-11-13T19:49:57.217 回答