Hello, CTF
分析
一道逆向题,运行一下发现需要我们输入一个序列号,然后程序判断对错


打开IDA分析可以得知,当v10和v13相等时,会返回success
接下来,要分析的就是v10是怎么来的,通过上面的代码可以知道v10是通过将输入的字符串以十六进制读取而成的
那么,我们将v13转换成10进制(两位一转),再通过Ascll码变成字符,就可以得到正确的结果,也就是我们需要输入的东西,结果如下

EXP
放一个转换的脚本(手算有些累人哦)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
   | #include<iostream> using namespace std;
  char jisuan(char a) {     switch (a)         {             case '0': return 0; break;             case '1': return 1; break;             case '2': return 2; break;             case '3': return 3; break;             case '4': return 4; break;             case '5': return 5; break;             case '6': return 6; break;             case '7': return 7; break;             case '8': return 8; break;             case '9': return 9; break;             case 'a': return 10; break;             case 'b': return 11; break;             case 'c': return 12; break;             case 'd': return 13; break;             case 'e': return 14; break;             case 'f': return 15; break;         } }
  int main(int argc, char const *argv[]) {     string arr = "437261636b4d654a757374466f7246756e";     char a;         for (int i = 0; i < arr.length(); i+=2)     {         a = jisuan(arr[i]) * 16 + jisuan(arr[i+1]);         cout << a;              }          return 0; }
   | 
 
脚本不见得写的多优秀,师傅们见谅