Moectf题解

SecretModule

用记事本打开 customize.sh文件

这段代码最后提示了用base64解密

下载后打开得到

testk() {
  echo "Welcome to the Secret module!But before you begin,you need to prove your self."
  (/system/bin/getevent -lc 1 2>&1 | /system/bin/grep VOLUME | /system/bin/grep " DOWN" > $MODPATH/events) || return 1
  return 0
}   

choose() {
  while true; do
    /system/bin/getevent -lc 1 2>&1 | /system/bin/grep VOLUME | /system/bin/grep " DOWN" > $MODPATH/events
    if (`cat $MODPATH/events 2>/dev/null | /system/bin/grep VOLUME >/dev/null`); then
      break
    fi
  done
  if (`cat $MODPATH/events 2>/dev/null | /system/bin/grep VOLUMEUP >/dev/null`); then
    echo "114514"
  else
    echo "1919810"
  fi
}

if testk; then
  ui_print "Great! Now enter the secret."

else
  ui_print "Legacy Device. Use a newer device to do this challenge"
  exit
fi

concatenated=""

for i in 1 2 3 4 5 6 7
do
  result=$(choose)
  concatenated="${concatenated}${result}"
done

input_str=$(echo -n $concatenated | md5sum | awk '{print $1}')
sec="77a58d62b2c0870132bfe8e8ea3ad7f1"
if test $input_str = $sec
then
	echo 'You are right!Flag is'
    echo "moectf{$concatenated}"
else
    echo 'Wrong. Try again.'
	exit
fi

testk函数:

  • 首先显示一条欢迎信息。
  • 尝试捕捉音量减键(VOLUME DOWN)的按下事件,如果成功,则返回0(表示成功),否则返回1(表示失败)。

choose函数:

  • 使用一个无限循环来不断检查是否有音量键的按下事件。
  • 当检测到音量减键的按下时,跳出循环
  • 随后检查事件文件($MODPATH/events)中是否包含VOLUMEUPVOLUME DOWN事件
  • 根据检查结果打印不同的字符串(114514 或 1919810

主函数:

  • 首先调用testk函数来检查是否满足条件
  • 然后,通过调用choose函数7次,收集7个字符串(每次按键生成的字符串),将它们连接成一个长字符串。
  • 对这个长字符串进行MD5哈希计算,并与预定义的哈希值77a58d62b2c0870132bfe8e8ea3ad7f1进行比较。
  • 如果哈希值匹配,则显示“Flag”信息;否则,提示错误并退出。

 由于MD5是单向的,因此从MD5散列值“解密”回原始数据是不可能的,所以需要爆破解题,脚本如下:

from hashlib import md5
s = ["114514", "1919810"]
sec = "77a58d62b2c0870132bfe8e8ea3ad7f1"
flag = ""
for a in s:
    for b in s:
        for c in s:
            for d in s:
                for e in s:
                    for f in s:
                        for g in s:
                            flag = a + b + c + d + e + f + g
                            if md5(flag.encode('utf-8')).hexdigest() == sec:
                                print(flag)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值