Problem: [MoeCTF 2022]chicken_soup
[[toc]]
思路
花指令+简单位运算
DIE看一眼,无壳,32位,直接丢IDA32里面。
F5看一眼,发现看不懂,原来有两个花指令。

两个花指令处理方法一样,用十六进制显示,然后把0E9h全NOP掉,然后重新对text反编译。
再次F5,看到了正常的伪代码。

其中sub_401110就是个strcmp,然后前面对读入的v4做了两次加密,直接倒推即可。

把unk_403000这一大堆提出来,这是加密两次以后的结果。
EXP
这里使用C++
#include<bits/stdc++.h>
using namespace std;
int res[] =
{
205, 77, 140, 125, 173, 30, 190, 74, 138, 125,
188, 124, 252, 46, 42, 121, 157, 106, 26, 204,
61, 74, 248, 60, 121, 105, 57, 217, 221, 157,
169, 105, 76, 140, 221, 89, 233, 215
};
//length=38
int arr[40];
int main()
{
for(int i=0;i<38;i++)arr[i]=(res[i]*16)|(res[i]>>4);
for(int i=37;i>=0;i--)arr[i]=arr[i]-arr[i+1];
for(int i=0;i<38;i++)cout<<(char)arr[i];
return 0;
}
运行以后得到flag。

