0%

[RE1]P2题解

2024-02-27 06:42By
YNsec
REVERSE

Problem: [RE1]P2

[[toc]]

思路

  • 解题大致思路
    进入IDA,首先F5查看伪代码,首先需要输入一串长度为25的字符串
    随后会进行for循环
for ( i = 0; i <= 24; ++i ) { v4[i] = key[i % 6] ^ Str[i]; v4[i] += 12; }

此处运算用到了常量key,双击key跟进,得到key的值为‘NSSCTF’
根据代码逻辑,首先for循环的次数为25次,与输入的字符串长度一致,然后将key字符串中的第i%6位与Str类型转换后的i进行异或,随后对运算的结果进行+12
然后是第二个for循环

for ( i = 0; i <= 34; ++i ) { if ( enc[i] != v4[i] ) { printf("No"); return 0; } } printf("Yes"); }

此处循环次数为35次,根据下方代码逻辑可知,enc存储的内容为加密后的密文,此处是将上一个for循环的结果与程序预置的结果进行比较,如果一致则输出yes,反之则输出no,所以密文长度应该为35位
双击enc,选中数据,shift+E提取数据

unsigned char enc[] = { 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x41, 0x25, 0x32, 0x3C, 0x2C, 0x25, 0x3B, 0x18, 0x2C, 0x36, 0x45, 0x42, 0x2E, 0x42, 0x18, 0x27, 0x27, 0x20, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

然后根据代码逻辑编写逆运算EXP

EXP

  • 具体攻击代码
s = [0xc,0xc,0xc,0xc,0xc,0xc,0x41,0x25,0x32,0x3c,0x2c,0x25,0x3b,0x18,0x2c,0x36,0x45,0x42,0x2e,0x42,0x18,0x27,0x27,0x20,0x3f] key = 'NSSCTF' for i in range(len(s)): print(chr((s[i] - 12) ^ ord(key[i%6])),end='')

总结

  • 对该题的考点总结
  • 异或运算
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论