CTF-Ogeek之安卓逆向分析

0x1:前言

还有半年的时间就要毕业了,目标的职位是移动安全工程师,从今天起开始记录下自己日常的一些工作。今天的这个样本是在吾爱破解论坛(www.52pojie.cn)中看到的一个帖子,该帖子是分析文档。所以在看分析文档前,先自己尝试破解下。

0x2:任务要求

根据软件打开的界面,可以猜测,接下来的任务应该就是当我们点击”CHECK FLAG”按钮的时候,根据我们输入的值,返回一个正确的值即可。
在这里插入图片描述

0x3:分析过程

  1. 使用Jadx打开实验APK “ogeek-mblockchain.apk”。简单的浏览代码,定位到关键的位置。从下图中的“1”处,我们可以看到这边是验证成功的地方,也就是说,当 result = True的时候,我们验证成功。所以向上寻找result赋值的地方。于是乎,我们就看到了“2”的代码位置。我们的突破点或许就在这边。我们“Ctrl +鼠标左键”进入checkFlag中寻找关键信息。在这里插入图片描述

  2. 我们看到红框选中的代码中,当if中toHex(currPt).equals(“7…”) 的值为真的时候,返回True。那么回溯到我们上面的分析,才可以验证成功。否则失败。 接下来我们看看hash函数的内容。
    在这里插入图片描述
    Hash的内容其实只是一个简单的MD5而已。所以我们先继续往其他地方分析。
    在这里插入图片描述
    然后再仔细看看hash函数,发现它事实上只对3个字符进行MD5加密。因为MD5的加密是不可逆的。所以我们可以使用python来写一个穷举的代码。

    byte[] currKey = hash(new byte[]{digest[0], digest[digest.length / 2], digest[digest.length - 1]});

0x4:Python代码编写

import hashlib
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
all='74f0b165db8a628716b53a9d4f6405980db2f833afa1ed5eeb4304c5220bdc0b541f857a7348074b2a7775d691e71b490402621e8a53bad4cf7ad4fcc15f20a8066e087fc1b2ffb21c27463b5737e34738a6244e1630d8fa1bf4f38b7e71d707425c8225f240f4bd2b03d6c2471e900b75154eb6f9dfbdf5a4eca9de5163f9b3ee82959f166924e8ad5f1d744c51416a1db89638bb4d1411aa1b1307d88c1fb5'
enc=a2b_hex(all)
for i in range(256):
    print(i)
    for j in range(256):
        for k in range(256):
            dec=enc
            key=chr(i)+chr(j)+chr(k)
            keys=[hashlib.md5(key.encode("utf8")).digest()]
            for x in range(9):
                keys.append(hashlib.md5(keys[x]).digest())
            for y in range(10):
                aes=AES.new(keys[9-y], 1)
                dec=aes.decrypt(dec)

            if "flag" in dec.decode("utf8","ignore"):
                print(b2a_hex(dec))

0x5:总结

学习破解其实和编程也有很大关系. 如果编程语言不过关。那么我们有些可以通过穷举来达到的东西,我们也无法实现。
在攻打这个CTF的几个关键点:

  1. 反编译APK找到onCreate方法.找到关键函数
  2. 分析Java伪代码,分析其加密流程
  3. 编写代码穷举破解。

参考文章:https://www.52pojie.cn/thread-1014184-1-1.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值