Articles of 逆向工程

如何在Android上捕获应用流量

我正在尝试从Android手机上的应用程序捕获流量,虽然我已经在手机上设置代理并且可以捕获来自手机的所有其他互联网流量(使用Charles Proxy),但我看不到任何流量这个应用程序。 这是怎么做的,我如何捕获流量? 更新: 如果您需要有关从计算机设置wifi热点的帮助,那么您可以将手机连接到它并使用Wireshark流量,只需查看以下链接以获取路线: http://www.wi-fiplanet.com/tutorials/article.php/3849841/How-to-Create-Wireless-Hosted-Networks-in-Windows-7.htm 如果您需要帮助将IOS应用程序反编译为汇编,请查看此内容 链接: http : //www.infointox.net/?tag = arm 如果你想要一个比dex2jar更好的Dex to Java反编译器,请查看: https : //github.com/skylot/jadx

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

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

如何使’android unlocker’应用程序更安全地对抗破解者?

对于我的应用程序的付费版本,我选择了解锁程序应用程序路由,因为它易于实现,允许开发人员控制台中的各个统计信息,但主要是因为我不需要维护2个代码库(一个用于免费版本和另一个付费版本)。 即使我使用了CVS(我这样做),仍然需要保持合并function和错误修复。 解锁器应用程序更容易实现整体… 但这有一个严重的缺点,它很容易超出安全检查; 除非我在这里遗漏了什么。 无论我做什么,这样的实现总会导致一个简单的if ,像这样: if(Program.isPremiumVersion()) { // Remove ads… } isPremiumVersion()方法负责检查付费解锁器应用程序安装的所有工作,如果证书匹配和所有这些东西。 是的,解锁器应用程序受LVL保护(虽然我读过一些文章提到LVL是多么不安全,但现在不是重点)。 但最后,无论isPremiumVersion()内部的代码有多复杂,它总是会返回true或false值。 覆盖这样的安全function只需要对代码进行逆向工程并使其始终返回true 。 不是吗? 我们如何保护我们的Android应用免受此攻击? 是的,代码使用ProGuard进行混淆。 不过,对于足够熟练的人来说,不应该太难。 请注意,我不是在试图打击破解者,我们根本无法获胜。 我不会为此而失眠,在“完美的解决方案”上浪费了无数个小时。 我只是在寻找一种让它更安全的方法。 至少在理论上,这似乎很容易破解。 我错了吗? 有什么想法可以提高这种function的安全性吗?

Android应用中的秘密密钥的反黑客解决方案?

我需要在应用程序内部存储一个私有字符串键。 它的值永远不会改变,并在代码中手动设置。 我显然不能将它作为String存储,因为反向工程方法会显示它,即使应用了混淆。 你怎么建议我保护这个私钥? 我将它保存到数据库中,但也可以从手机中取出数据库。 PS。 这个键是一个特殊的参数,所以这是一个重要的方法,它至关重要,任何人都不知道! 这不是解密密钥。 此字符串将用作加密方法(md5或类似)的参数,然后结果将发送到我们的Internet服务。 编辑 对不起,因为它太复杂了。 我想我可以用尽可能少的信息得到答案。 此应用程序将允许用户将一些文本发送到Internet服务,然后将该文本发布到网站。 我们需要确保文本是通过Android手机发送的,因为任何网络机器人脚本都可以模仿Android手机并发布垃圾邮件。 由于类似validation码的方法在手机上不受欢迎,因此将有一个密钥通过md5(带有其他一些东西)来生成哈希码。 此哈希将发送到Internet服务。 Internet服务将使用相同的密钥获取md5结果,然后将其进行比较以查看发件人是移动电话还是某个机器人。 这实际上是我可以说的最大值。 我希望这就够了。

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

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

参考Dalvik或Java虚拟机?

我目前正在研究Dalvik字节码,但由于我缺乏编译器背景,我发现它有点难以掌握设计。 我很确定没有人写过关于Dalvik的书(或者我可能是错的)所以有人可以建议我在Java VM上提供一些包含一些动手实例的参考吗? 具体来说,我感兴趣的是: 理解如何解释生成的字节码 使用VM规范(Dalvik或Java)将字节代码反编译为中间表示,然后将其编译回来 简而言之,我正在寻找的可能是学习逆向工程字节码,以便我可以分析它的漏洞。 有什么建议么?

如何从Android模拟器逆向工程kik的服务器API?

我在kik messenger中进行了一次群聊,已经有超过50个成员。 我需要自动化一些事情,比如基于订婚的声誉点,以及踢非活跃的成员,这些成员在XXX天内不发布任何内容。 我已经查看了API参考 ,似乎机器人可以在组中进行交互的唯一方法是使用@mentions。 这意味着我们无法将它们添加到组中,也无法监视组对话。 我也遇到过这个问题,但它似乎没有帮助。 当前的kik bot API提供了非常有限的权限,并且不允许监控组消息,因此我一直在考虑对服务器API进行逆向工程并创建一个充当机器人并与此API交互的普通帐户。 我已经设法通过提琴手重新路由交通,但我不知道从那里去哪里。 所以问题是:对于在Android模拟器上运行的应用程序的API进行逆向工程的工作流程是什么 提前致谢

电报:从电报客户端获取fileid

电报机器人使用fileid下载文件。 如何从Telegram客户端(My Unofficial版本)获取此fileid ? mtproto文件具有此位置类 ,用于指示其地址。 文件位置参数 dc_id int保存文件的数据中心的编号 volume_id long服务器卷 local_id int文件ID 秘密长校验和访问文件 问题是我不知道如何从File Location类生成适合机器人的fileid 。 更新1: 我试过做一些逆向工程。 所以,我发现File Location类和FileId之间存在某种关系。 这是我的File Location 示例地址。 id: 0 //此字段仅适用于秘密聊天 access_hash: 0 //此字段仅适用于秘密聊天 volume_id: 429640340 ( 199BCA94 HEX ) 秘密: -3528741004939935589 ( CF0764C08833409B HEX )//根据TG文件,它应该是文件CheckSum local_id: 6005 ( 1775 HEX ) 这是我根据我从Bot中检索到的前FileLocation类的FileID : FileId: AgADBAADL6gxG06L8w0nhNO87UW3iZTKmxkABJtAM4jAZAfPdRcAAgI 很明显, FileID值是Base64格式。 所以我把它解码了: […]

如何对使用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 /安全交易的背景下) 可以采取哪些措施来缓解“安全设计”的副作用,这种副作用在过度复杂的软件方面看起来像是“在脚下拍摄”,这些软件本来可以更简单,更易于维护和更容易调试? 你能推荐一些好的资料来进一步研究这个课题吗?