文章总结: 该文档详细分析了Bugku平台上的CTF逆向题目easy-100(LCTF)的解题过程。通过静态分析APK文件发现AES加密逻辑,使用Frida动态Hook获取密钥htsii__sht_eek.y,最终通过CyberChef解密目标字节数组成功获取flag。文档提供了完整的逆向分析方法和具体操作步骤。 综合评分: 85 文章分类: 逆向分析,CTF,移动安全,安全工具
,然后给button按钮绑定的点击事件是类d。</p>
<p><img decoding=)
分析类d的源码,可以看到调用了MainActivity里面的方法a来进行判断是否正确,传入的参数第一个是刚才是字符串v(从图片里面获取的),第二个参数是用户输入的字符串。
MainActivity里面的方法a调用了类c里面的方法a来获取一个字符串,然后跟后面是字节数组转换成的字符串进行比较,相同则返回true。
然后查看类c的定义,类c中定义重载了两个方法a,两个参数的是刚才被调用的方法,在该方法里面通过类c中另一个单参数的方法a获取了一个字符串(对图片中获取的字符串进行了相应的转换),然后实例化了类a为aVar,然后aVar调用了自己的方法a,传入的是刚才转换后的字符串转换为的字节数组,然后再调用方法b。
查看类a的定义,可以看到里面是一个aes加密,使用ecb模式,密钥就是刚才从图片里面获取的字符串转换成的字节数组。
三、解题
通过上述分析,用户输入字符串后通过aes加密,加密后跟一个字节数组做比较,相同则成功。所以我们现在解题只需要把密钥找出来解密那个目标字节数组即可。
接下来使用frida进行hook,把类c的两个方法a给hook掉来获取密钥值,hook脚本如下:
Java.perform(function () { console.log("===开始hook MainActivity===") var c = Java.use("com.example.ring.myapplication.c") var a = Java.use("com.example.ring.myapplication.a") c.a.overload('java.lang.String', 'java.lang.String').implementation = function (str1, str2) { console.log("c.a(str1, str2)被调用") console.log("str1:", str1) console.log("str2:", str2) return this.a(str1, str2) } c.a.overload('java.lang.String').implementation = function (str) { console.log("c.a(str)被调用") console.log("str:", str) var result = this.a(str) console.log("key:", result) return result } a.b.implementation = function (p) { console.log("a.b(p)被调用") console.log("p:", p) var result = this.b(p) console.log("crypt result:", result) return result }})
运行结果如下:
可以看到密钥是htsii__sht_eek.y,然后打开cyberchef,使用aes解密目标字节数组(这里我把目标字节数组转换成了16进制形式)。
成功拿到flag。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:SPEEDCoding 李北辰 李北辰《Bugku逆向题目-20.easy-100(LCTF)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论