[ACTF新生赛2020]easyre

分析

收先查壳,发现是32位的,然后放入对应的IDA去看看

image-20220524212504694

然后去看看_data_start_数组中的内容

image-20220524212744368

整体逻辑十分简单,就相当于是在_data_start__数组中输入我们的数组-1,如果与v4数组相同就是正确的值。

脚本

#include<stdio.h>
#include<string.h>
int main()
{
char v4[]={42, 70, 39, 34, 78, 44, 34, 40, 73, 63, 43, 64} ;
char v5[]={
0x7e, 0x7D, 0x7C, 0x7B, 0x7A, 0x79, 0x78, 0x77, 0x76, 0x75, 0x74,
0x73, 0x72, 0x71, 0x70, 0x6F, 0x6E, 0x6D, 0x6C, 0x6B, 0x6A,
0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60,
0x5F, 0x5E, 0x5D, 0x5C, 0x5B, 0x5A, 0x59, 0x58, 0x57, 0x56,
0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x4F, 0x4E, 0x4D, 0x4C,
0x4B, 0x4A, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42,
0x41, 0x40, 0x3F, 0x3E, 0x3D, 0x3C, 0x3B, 0x3A, 0x39, 0x38,
0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2F, 0x2E,
0x2D, 0x2C, 0x2B, 0x2A, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24,
0x23, 0x20, 0x21, 0x22, 0x00
};
int i;
for(i=0;i<12;i++)
{
for(int j = 0; j < strlen(v5); j++ )
{
if(v4[i]==v5[j])
printf("%c",j+1);//用的是-1去遍历的所以结果要+1
}
}
}
//U9X_1S_W6@T?