看pwn 看不下去 没事做做逆向题 想想 后天就要回家了~~ 想想还是有点小激动
这个题 其实逻辑很简单
我们看一下 check函数
其中那个 strtohex 就是把两个字符 转化成一个 16进制的数字
然后我们 写一个脚本就可以了
#include <stdio.h>
#include<iostream>
#include<iomanip>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<iostream>
#include<map>
#include<time.h>
#include<queue>
#include "windows.h"
using namespace std;
unsigned char strr[25];
char str[]="1A2F943C4D8C5B6EA3C9BCAD7E";
int strtohex(int index)
{
char v2; // al
char v3; // cl
int v4; // eax
int v5; // edx
v2 = str[index];
v3 = str[index + 1];
if ( (v2 - 48) > 9u )
v2 -= 55;
v4 = v2 & 0xF;
v5 = (v3 - 55) & 0xF;
if ( (v3 - 48) <= 9u )
v5 = v3 & 0xF;
return v5 | 16 * v4;
}
int main()
{
strr[0] = 15;
strr[1] = -121;
strr[2] = 98;
strr[3] = 20;
strr[4] = 1;
strr[5] = -58;
strr[6] = -16;
strr[7] = 33;
strr[8] = 48;
strr[9] = 17;
strr[10] = 80;
strr[11] = -48;
strr[12] = -126;
strr[13] = 35;
strr[14] = -82;
strr[15] = 35;
strr[16] = -18;
strr[17] = -87;
strr[18] = -76;
strr[19] = 82;
strr[20] = 120;
strr[21] = 87;
strr[22] = 12;
strr[23] = -122;
strr[24] = -117;
for(int i=0;i<25;i++)
{
strr[i]^=strtohex(i);
//printf("%x\n",strtohex(i));
strr[i]=((strr[i]>>2)|(strr[i]<<6));
printf("%c",strr[i]);
}
//printf("%s\n",strr);
}
得出flag