Articles of 反编译

你如何反编译,在eclipse中编辑并重新编译apk? 一步步?

我有一个apk格式的市场上的这个应用程序,但我想稍微调整它来修复我的小屏幕的一些问题,我知道代码确定但它已经到了编辑代码的问题,这是问题 我以前尝试过的: 使用apk管理器反编译(命令9) 这在包含所有文件的项目中创建了一个文件夹 在eclipse中我创建了一个新的android项目,并选择“使用现有的源”,选择它所在的文件夹并导入。 所有文件都出现在项目文件夹中,我可以编辑它们。 我做了所有相关的更改(没有触及manifest.xml文件) 我去了文件>导出并选择了导出Android应用程序 完成关键和一切的步骤 创建的输出文件没有错误 我将文件传输到我的Android手机 打开它,它安装 从菜单中打开它时,我立即收到强制关闭错误 到目前为止,一切似乎都很顺利,我在其他手机上尝试过,同样的问题。 我想知道的是编辑apks的正确方法,以便它们能够再次工作。 我在互联网上到处搜索有关编辑apk的内容,但我找不到一个好的答案,所以我希望有人在这里给我一个解决方案。 谢谢

是否有更安全的方法在Android项目中存储敏感字符串?

在我的Android项目中,我想保持我的Web服务地址未知。 我存储链接如下: private final String SERVICE_LINK = “mywebservicelink…” 但是因为我看到APK可以被反编译,我想知道这个链接是否可以被人知道。 我该如何安全存放? 谢谢。

build.gradle是否受到反编译的保护?

反编译代码非常容易,即使使用Proguard也无法保护代码。 我需要的是在应用程序中保护“密钥”。 build.gradle是否受到保护? 可以反编译吗? buildConfigField “String”, “Key”, “\”1234567890\”” 更新 根据commonsware的回答,我得知它不安全吗? 有没有其他方法可以管理这个?

如何删除.jar文件中的类文件并使用我自己的实现更改它

所以,我有第三方库,这是一个.jar文件。 那个jar子里有一些类。 问题是,.jar中的一个类中有一个错误。 我知道这是因为我可以反编译jar文件,查看java代码,我很确定,该类是我的程序错误的来源。 我的想法是,我删除了类并将其替换为我自己的类,但我不知道如何。

如果源代码可以进行逆向工程,那么加密Android(或Java)中的任何内容有什么意义?

Android和Java提供了一个加密API ,相对来说非常容易用于加密非专家。 但是,既然我们知道没有任何代码可以真正受到保护免受逆向工程,特别是用作种子或共享机密的字符串常量,我想知道:在Android应用程序中经历加密和解密的磨难有什么意义? 我错过了什么吗? 试图让我的问题更清晰,更具体:假设我有一个应用程序,其中代码和代码中使用的某些字符串(即非用户数据)需要保密:一种方法是在编译时以加密forms存储它们.apk并在运行时解密它们(使用模糊的硬编码密码)。 另一种方法是将它们以加密forms存储在远程服务器中,在运行时获取它们(通过Internet)并解密(使用共享密码)。 我认为两者之间没有太大区别,因为两者都要求(反向工程)代码中存在“密钥”。 这个问题有解决方案吗? 如果没有解决方案,为什么要加密?

在APK中简单隐藏/混淆字符串?

有时您需要在应用程序本身中存储密码,例如用于与您自己的服务器通信的用户名/密码。 在这些情况下,不可能遵循存储密码的正常过程 – 即散列密码,存储散列,与散列用户输入进行比较 – 因为您没有任何用户输入来比较散列。 密码需要由应用程序本身提供。 那么如何保护APK中存储的密码呢? 如下所示的密码生成function是否合理安全? 纯文本: String password = “$()&HDI?=!”; 简单的混淆: private String getPassword(){ String pool = “%&/@$()7?=!656sd8KJ%&HDI!!!G98y/&%=?=*^%&ft4%(“; return pool.substring(4, 7) + pool.substring(20, 24) + pool.substring(8, 11); } 我知道ProGuard有一些混淆function,但我很好奇上面的“混淆”技术在编译时会做什么,以及通过查看APK和/或使用其他更复杂的东西来弄清楚它有多难技术?

如何从Android .apk assets文件夹解压缩LUA脚本?

我正在尝试对Android游戏进行逆向工程,以找出其计算背后的逻辑。 提取.apk文件后,/ assets / lua文件夹中有lua脚本,所有文件都有.lua扩展名。 但是,如果使用Text / HEX编辑器打开,则它们不是人类可读的。 例如: 这个文件 所有文件的内容以“droi.lua”签名结尾,让我觉得这不是一个LUA脚本,而是一些Android的压缩LUA脚本。 Android有一种压缩文件的机制用于发布目的。 有谁之前经历过这个吗? 有没有办法让这种文件可读? 是否有任何方法/程序来解压缩.apk资产(例如png,lua等)中的文件?

dex2jar和jd-GUI的替代品?

似乎dex2jar和/或jd-GUI即使对于最简单的if-else条件代码也会给出错误的去混淆(它们在第一行显示一个return;的while(true)循环。 有没有其他免费软件应用程序做同样的去混淆工作? 也许还可以使用proguard的映射文件?

如何对使用ProGuard进行模糊处理的Android APK进行反向工程/反编译?

不幸的是,我丢失了我使用ProGuard混淆的一个应用程序的源代码。 我仍然有.apk文件和一些由ProGuard生成的配置文件: dump.txt mapping.txt seeds.txt usage.txt 到目前为止我做了什么? 使用apktool解码资源文件。 是的,我已经回来了! 提取.apk文件并使用dex2jar将classes.dex文件转换为.jar文件。 如果我现在使用JD-Gui查看源代码(.jar文件),我会看到我的混淆代码。 像这样的东西: class c { TextView a; TextView b; TextView c; TextView d; CheckBox e; } protected List a(Uri[] paramArrayOfUri) { … } protected void a(List paramList) { … } 还有一些循环看起来有点奇怪。 我不写无限循环: while (true) { if (!localIterator.hasNext()) return localArrayList; ProviderInfo[] arrayOfProviderInfo = ((PackageInfo)localIterator.next()).providers; if (arrayOfProviderInfo […]

良好的软件工程与安全性

安全和设计指南详细介绍了各种方法,使攻击者更难以破解应用内计费实施。 特别值得注意的是,即使通过Proguard进行模糊处理,对.apk文件进行逆向工程也是多么容易。 因此,他们甚至建议修改所有示例应用程序代码,尤其是“已知的入口点和出口点”。 我发现缺少的是在单个方法中包含某些validation方法的任何引用,例如返回boolean的静态Security.verify() :一个好的设计实践(减少代码重复,可重用,更容易调试,自我记录等等) 。)但攻击者现在需要做的就是识别该方法,并使其始终返回true …因此无论我使用它多少次,延迟或不延迟,随机或不随意,它都无所谓。 另一方面,Java没有像C / C ++那样的宏,它允许减少源代码重复,但没有一个verify()函数的退出点。 所以我的问题: 众所周知的软件工程/编码实践与所谓安全设计之间是否存在内在争用? (至少在Java / Android /安全交易的背景下) 可以采取哪些措施来缓解“安全设计”的副作用,这种副作用在过度复杂的软件方面看起来像是“在脚下拍摄”,这些软件本来可以更简单,更易于维护和更容易调试? 你能推荐一些好的资料来进一步研究这个课题吗?