热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android逆向工程——Crackme系列crackmeone

学习了一段时间的逆向之后,就想找些APP练手,于是找到了下面这个githubandroid-crackme-challenge这个github里提供了10个crackme,难度逐渐

学习了一段时间的逆向之后,就想找些 APP 练手,于是找到了下面这个 github
android-crackme-challenge

这个 github 里提供了 10 个 crackme,难度逐渐上升

先来看 crackme-one

crackme-one 第一次打开时是这样的:

《Android 逆向工程 —— Crackme 系列 crackme-one》

这里的重点是,点击 “Write File” 程序将会在沙盒中写入我们要用到的密钥,这就说明至少有两种方法可以得知这个密钥:

  1. 找到这个被写入的文件
  2. 逆向 APK,找到写入函数,直接查看或者通过 log 的方式得知写入的内容

我用的是第二种方法(主要是不知道写入的文件在哪),首先随意输入一个密钥点击 “Check”,弹出一个 Toast “Sorry, that’s not right..”,记下这个字符串,待会会用到

使用 apktool 逆向 APK,得到的 smali 文件夹的文件目录如下:

《Android 逆向工程 —— Crackme 系列 crackme-one》

由于判断输入的密钥是否正确的提示是在点击 “check” 之后才触发的,所以判断的逻辑应该在点击事件的监听器中,该监听器为 ChallengeOneFragmentOnClickListener,搜索刚刚那个字符串 “Sorry, that’s not right..”,看看是哪里创建了这个 Toast 然后输出了这个提示,注意在源码中 ‘ 应该前面有一个 \,所以应该搜索 “Sorry, that’s not right..”

搜索结果刚好在 ChallengeOneFragmentOnClickListener.smali 中,说明刚刚我们的假设是没错的

《Android 逆向工程 —— Crackme 系列 crackme-one》

仔细查看这附近的代码,发现这句代码在 cond_1 (137行)标号下,说明是通过某个跳转跳转到这里来的,搜索 “cond_1”

《Android 逆向工程 —— Crackme 系列 crackme-one》

发生跳转的代码在 86 行,跳转的条件是 v8 等于 0,往上分析发现 v8 是 之前的 v8 (v8被重新赋值了)以 v9 为参数调用 equals 函数的结果, 而之前的 v8 的类型是 String,于是判断的逻辑应该为如果 v8 和 v9 相等就不跳转,反之跳转

接着向上看发现 v9 的值是 “poorly-protected-secret”,这个 “poorly-protected-secret” 很有可能是密钥,再往上看发现之前的 v8 就是从我们输入密钥的那个 EditText 中获取的内容全部转换为小写后的值,所以这应该就是密钥了

在 APP 中输入 “poorly-protected-secret”,成功


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • struts2重点——ValueStack和OGNL
    一、值栈(ValueStack)1.实现类:OGNLValueStack2.对象栈:CompoundRoot( ... [详细]
  • 近来有一个需求,是需要在androidjava基础库中插入一些log信息,完成这个工作需要的前置条件有编译好的android源码具体android源码如何编译,这 ... [详细]
  • 【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
    【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup ... [详细]
author-avatar
哈喽KIKI1990_117
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有