2024NKCTFREEZ
0x00 分析题目
和上一道题一样大部分还是用Z3
不过这道题会动态输出一个可执行文件,有点类似于SMC了
0x01 解
ELF,无壳
直接上IDA
没有cmp,而这个byte_404070里面的内容很多
应该是类似于SMC那样会输出一个可执行文件,而这些应该就是操作码
试着运行一下
这时候会输出一个outputfile
直接拷走就行(
来到outputfile的main里面,可以发现整个程序的加密可以被分为三个操作
第一部分是一大堆加减乘除和位运算
第二部分是和内存里的某个东西(dword_55FA1FBB2010)进行乘除以及位运算
第三部分就是一个简单的异或
将byte_55FA1FBB2080与第二部分的结果异或然后与byte_55FA1FBB20A0进行比较
那么就该REVERSE了
先从最后的开始,直接异或得出第二部分的结果
1 | key = [0x32, 0x44, 0xaa, 0x56, 0x63, 0x3d, 0x2b, 0x09, 0xcd, 0x34, 0x99, 0x3c, |
然后是第二部分,用Z3操作一下可以得出第一部分的结果
1 | from z3 import * |
最后对第一部分的结果进行Z3,可以得出flag
1 | from z3 import * |
总的来说不难,基本都是Z3的使用,不过要注意输出的问题,在这个程序中,结果的输出要进行一个“& 0xff”的操作(取低八位)
可以参考这个:https://blog.csdn.net/i6223671/article/details/88924481
如果这点没有注意到的话会发现其他地方输出的结果与程序输出的不同(
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 The Blog of WoaW04!