首先用IDA打开,发现有很多while(1),大量代码混淆其中
利用defalt进行控制流平坦化去混淆
找到主函数地址
好了
开始执行
输入 python .defalt.py hardCpp 0x4007E0
等几分钟后会执行完毕
顺便说一下符号执行的原理
符号执行大概是将内存 寄存器值当成未知变量 就像设一个方程 当成x 往下执行 遇到分支保存一下 尝试各种分支 执行到你想要的地方 后续可以约束求解
好了,我们再打开
逻辑清晰很多了
进行分析
每个函数大概的意思都放在名称上了
分析加密逻辑
解密逻辑
ok
#includeint main(){ int i; unsigned char enc[] ={0xF3, 0x2E, 0x18, 0x36, 0xE1, 0x4C, 0x22, 0xD1, 0xF9, 0x8C, 0x40, 0x76, 0xF4, 0x0E, 0x00, 0x05, 0xA3, 0x90, 0x0E, 0xA5}; char flag[22]; flag[0]='#'; flag[21]=' '; for(i = 1;i<21;i++){ flag[i]= ((enc[i-1]^((flag[i-1] ^18)*3 +2))-flag[i-1]%7)^0; } puts(flag); }


![[SUCTF2019]hardcpp [SUCTF2019]hardcpp](http://www.mshxw.com/aiimages/31/869030.png)
