2020年DASCTF六月团队赛 REVERSE Magia

2020年DASCTF六月团队赛 REVERSE Magia

  • 2020年DASCTF六月团队赛 REVERSE Magia
    • IDA静态分析
      • 字符串输入检测
      • 字符间逻辑检测
      • 继续IDA分析
    • 利用XDBG进行动态分析

2020年DASCTF六月团队赛 REVERSE Magia

IDA静态分析

程序为32位Windows程序,拖入IDA3Pro分析

字符串输入检测

2020年DASCTF六月团队赛 REVERSE Magia_第1张图片
2020年DASCTF六月团队赛 REVERSE Magia_第2张图片
输入字符串后进入sub_403290()函数检测,满足以下条件:
1.字符串必须为32位。
2、第1、2、3、4、32位分别为‘N’、‘e’、‘p’、‘{’、‘}’。
不满足,则退出。满足则进入下一步检测。

字符间逻辑检测

2020年DASCTF六月团队赛 REVERSE Magia_第3张图片
依次对第一个字符与最后一个、第二个字符与到数字二个、第三个与倒数第三…第16个与第32个,两个字符满足以下条件:
设key为字符串,i(0-16)为字符串的下标
1.key[i] ^ key[-(i+1)],依次等于:

0x33 0x00 0x15 0x09 0x0B 0x36 0x06 0x0C 0x02 0x3A 0x2C 0x08 0x31 0x0B 0x37 0x0C

2 .key[i] & key[-(i+1)],依次等于:

0x4C 0x65 0x60 0x72 0x64 0x49 0x70 0x63 0x6C 0x45 0x53 0x61 0x4E 0x64 0x48 0x61

3.key[i] & 0xf,依次等于:

0x0E 0x05 0x00 0x0B 0x0D 0x09 0x02 0x03 0x0C 0x05 0x0F 0x01 0x0E 0x04 0x0F 0x0D

4.key[-(i+1)] & 0xf,依次等于:

0x01 0x08 0x0F 0x0F 0x09 0x03 0x0F 0x0E 0x0F 0x04 0x0F 0x06 0x02 0x05 0x05 0x0D 

根据以上逻辑关系可以爆破出input:
2020年DASCTF六月团队赛 REVERSE Magia_第4张图片
根据题目中提示的格式为

abcd_efgh_...

可确定为:

Nep{mircle_and_maho_is_not_free}

输入验证:
2020年DASCTF六月团队赛 REVERSE Magia_第5张图片
说明正确,但提示:

It_is_that_true?

这还不是flag。

继续IDA分析

2020年DASCTF六月团队赛 REVERSE Magia_第6张图片
输入验证正确后,首先对word_403006的数据进行了计算处理
2020年DASCTF六月团队赛 REVERSE Magia_第7张图片
2020年DASCTF六月团队赛 REVERSE Magia_第8张图片
然后将sub_403000();作为函数调用。word_403006与输入的字符串进行计算转换后转换为执行代码。
2020年DASCTF六月团队赛 REVERSE Magia_第9张图片

利用XDBG进行动态分析

text:004019F6 call sub_403000,在004019F6出下断,跟踪,经过几个循环
2020年DASCTF六月团队赛 REVERSE Magia_第10张图片
sub_403000为生成flag的函数,在函数中跟踪运行。
2020年DASCTF六月团队赛 REVERSE Magia_第11张图片
跟踪到地址00403221处在0018FE70处找到生成的flag:8b272473500a451286ab225413f1debd

你可能感兴趣的:(CTF)