【问题标题】:Reverse Engineering Android Application (with source)逆向工程 Android 应用程序(附源码)
【发布时间】:2012-11-02 06:08:10
【问题描述】:

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

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

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

【问题讨论】:

  • 顺便说一句,我很幸运拥有一个在源代码中几乎没有 cmets 的应用程序:D
  • 顺便说一句,如果你想告诉我哪个应用程序和哪个屏幕,我也可以尝试为你破解。 (没有承诺!)
  • try developer.android.com/tools/debugging/debugging-ui.html 应该告诉你活动的活动,你有时可以从视图 id 告诉它是什么代码/布局 xml。

标签: android view adapter reverse-engineering


【解决方案1】:

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

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

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

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

【讨论】:

  • 嗯,我正在为客户开发一个应用程序,呵呵,我就是这样获得源代码的。寻找你现在提到的ListView,会让你知道发生了什么。
  • 啊啊啊。说得通。好吧,ListView 只是一个例子。这取决于屏幕上的内容。如果有清单,他们可能使用ListView 来保存视图。但是,如果它更像是一帧图片,那么它可能是您正在寻找的FrameLayout。如果您感到困惑并且被允许,您可以发布屏幕截图的图片。 (取出 ddms 并截屏)。
  • 啊,我想我找到了!它在 Activity 类中。我使用 Mac 上的文件浏览器查看了一些图像资产,并根据文件名进行了搜索..,工作相当草率,但我觉得你帮我弄清楚了!
  • 不错!破解它的聪明方法:)是的,这也是可能的。即使对于ListView,有时也可以用ListActivity 替换,在这种情况下,寻找视图将无济于事。所以你得到它是件好事,因为它本来可以做更多的工作:)
【解决方案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 元素(它可能包含用于合并其他布局)。

  • 如果有多个 Activity,则在该 Activity 中寻找 Intent 类的实例,通常附加到按钮或菜单点击监听器。

从第 2 步递归 :)

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

祝你好运。

附:不管你的客户付给你什么,这还不够。我可以猜到你是如何获得这个演出的,但是你好。就这样吧。

【讨论】:

  • Simon,感谢您非常中肯的回答。下次我问问题时,我不会那么急于接受答案。关于客户的那一点,嗯,这对我来说仍然是一个很好的学习基础,哈哈!最有趣的部分,蹩脚的 Android 应用看起来与蹩脚的 iOS 应用没有太大区别,switch 语句就是游戏的名称!
  • 你的回答很完美
【解决方案3】:

操作系统 Windows 说明:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2021-09-09
    • 2021-04-11
    • 2016-07-09
    • 2013-03-27
    • 2012-12-03
    相关资源
    最近更新 更多