2020年DASCTF六月团队赛 REVERSE Magia
2020年DASCTF六月团队赛 REVERSE Magia
IDA静态分析
程序为32位Windows程序,拖入IDA3Pro分析
字符串输入检测
输入字符串后进入sub_403290()函数检测,满足以下条件:
1.字符串必须为32位。
2、第1、2、3、4、32位分别为‘N’、‘e’、‘p’、‘{’、‘}’。
不满足,则退出。满足则进入下一步检测。
字符间逻辑检测
依次对第一个字符与最后一个、第二个字符与到数字二个、第三个与倒数第三…第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:
根据题目中提示的格式为
abcd_efgh_...
可确定为:
Nep{mircle_and_maho_is_not_free}
输入验证:
说明正确,但提示:
It_is_that_true?
这还不是flag。
继续IDA分析
输入验证正确后,首先对word_403006的数据进行了计算处理
然后将sub_403000();作为函数调用。word_403006与输入的字符串进行计算转换后转换为执行代码。
利用XDBG进行动态分析
text:004019F6 call sub_403000
,在004019F6出下断,跟踪,经过几个循环
sub_403000为生成flag的函数,在函数中跟踪运行。
跟踪到地址00403221
处在0018FE70
处找到生成的flag:8b272473500a451286ab225413f1debd