Android应用程序重新打包:为什么它不会破坏代码?

时间:2013-05-25 07:56:47

标签: android security malware software-packaging

我一直在阅读很多关于恶意软件编写者如何重新打包现有的benigh android .apk并重新打包它以添加恶意功能。

现在,根据我对.apk文件结构的理解,每个.apk文件都包含一个.dex文件,该文件基本上是java字节转换为.dex格式。此外,该应用程序还有一个名为manifest.xml的二进制XML以及其他资源文件和资产。如果我们必须向应用程序添加额外的恶意功能,那么我们必须修改manifest.xml(可以通过将二进制xml转换回普通xml轻松完成),资源(可以直接替换)和.dex文件。

但.dex文件有一个特定的结构。据我所知,对它做的任何修改都应该破坏代码。这些工具使用哪些技术来防止代码破坏,因为如果向原始应用程序添加一些恶意功能,我们实际上是添加一个额外的模块。

有哪些工具支持.apk文件重新打包?

感谢。

编辑:有些成员可能会发现讨论逆向工程是冒犯的。 Iam研究Android安全工作的学生。我需要知道.apk文件重新打包是如何工作的,因为这是我的研究课题。此外,公开谈论逆向工程并不是一种恶意行为 - 书籍是在逆向工程上编写的 - 使用逆向工程进行恶意攻击是恶意的:)

1 个答案:

答案 0 :(得分:9)

安全信息

在发布模式下启用proguard。这将使逆向工程变得更加困难。另请查看this developer training documentation on security

(来自对这个问题的评论)

包签名验证

您可以通过检查签名来验证是否已重新打包包。一些文章可以帮助你:

Retrieving APK signature during runtime
Self checking an APK signature.
How to check APK signature.

(最初发布广告Verify Android apk has not been repackaged?

将DEX反编译为Java

我回答了一个关于过去反编译DEX代码的问题。我原来的答案现在可能已经过时,但其他人一直在追问这个问题。以下是其中列出的一些工具的概述。

  

更完整版的   fred的   answer

     

手动方式

     

首先,您需要一个工具来提取所有(已编译)的类   DEX到JAR。有一个名为dex2jar,由一个人制作   中国学生。

     

然后,您可以使用jd-gui 反编译 JAR上的类   来源代码。结果源应该是可读的,如   dex2jar应用了一些优化。

     

1http://code.google.com/p/dex2jar/
    2http://java.decompiler.free.fr/?q=jdgui

     

自动方式

     

您可以使用APKTool。它   将自动提取所有类(.dex),资源   (.asrc),然后它会将二进制XML 转换为人类可读的XML ,   并且它也会为你分解这些课程   反汇编将始终比反编译更强大,尤其是与使用Pro Guard混淆的JAR!

     

告诉APKTool 解码将APK导入目录,然后修改   你想要什么,最后编码它回到APK。就是这样。

     

重要提示:APKTool disassembles 。它不会反编译。生成的代码不是Java源代码。但你应该能够   阅读它,如果你熟悉,甚至可以编辑它   jasmin。如果你想要Java源码,   请仔细阅读手动方式

(原始问题:decompiling DEX into Java sourcecode