简单逆向题
下载附件,先查壳,发现是ELF64bit:
用ida64打开,进去先找到main函数,之后shift+F12查看字符串:
发现有congratulation!双击进入到congratulation的位置,ctrl+x查看交叉引用的函数:
点击ok,再F5查看伪代码,如图:(注释都是自己做的)
它这里面有很多没用的代码,看得时候要甄别一下,很好看出来。
里面有几个函数:
1.join:将两个字符串连接带一快快
2.getchar和putchar:C语言中都学过
3.strlen:C语言中也学过,计算字符串长度
4.strcpy:将一个字符串复制到另一个上
5.strcat:也是将两个字符串拼接到一块
6.strcmp:如果字符串相等,返回0;第一个字符串小于第二个字符串,返回负 数。反之返回正数。加!表示再取反。
分析到这里基本差不多了,之后就要写脚本,本人还不会写脚本,就用别人的脚本了。
来源于https://blog.csdn.net/Waffle666/article/details/110250158
思路基本上也是跟着他的
#include<stdio.h>
int main()
{
char key[] = "adsfkndcls";
char text[] = "killshadow";
int i;
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])
{
printf("%c",j);
v3++;
break;
}
}
}
}
最后,这是一道很简单的逆向题,伪代码写的很清晰,各种函数字符都给出来了,只需逆过来就行,慢慢做,做多了就会有经验。