buuoj上的一道稍微有点难度的逆向题
用IDA快速定位到main函数
可以看到关键逻辑应该在Decry函数里,跟进去看看
这里要注意的是,IDA里面按R将整数转成字符串时,是反着的…
可以看到,程序是逐位进行运算然后和text比对,因此可以写爆破脚本
#include <iostream>
using namespace std;
int main()
{
char key[] = "adsfkndcls";
char text[] = "killshadow";
int v3 = 10;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 128; j++)
{
if (j < 'A' || j > 'z' || j > 'Z' && j < 'a')
{
continue;
}
if ((j - 39 - key[v3 % 10] + 97) % 26 + 97 == text[i])
{
cout << char(j);
v3++;
break;
}
}
}
}
直接跑出结果~