• SimpleRev WriteUp


    题目地址

    https://buuoj.cn/challenges#SimpleRev

    题解

    IDA64打开,F5反编译,双击进入Decry函数。一开始我困在如何将一个int64转换为字符串,百度了许多博客,关于itoa64函数啥的一堆(用VS),都不得行,最后在IDA64里试了试右键,发现点Char就能转为字符串,我…

    1

    从网上得知,x86是小端

    2

    (不知道我这种判断大端小端的方法是否正确,欢迎大佬指正!)

    那么两个字符串需要倒着读

    3

    然后继续分析,可以转为C语言运行方便分析

      1 #include<bits/stdc++.h>
      2 using namespace std;
      3 int main()
      4 {
      5     char v1;
      6     int v2,v3;
      7     char src[8];
      8     char str2[30];
      9     char key[30]="adsfkndcls";
     10     char text[30]="killshadow";
     11     int v5 = strlen(key);
     12     v3=0;
     13     v2=0;
     14     printf("Please input your flag:", src);
     15       while ( 1 )
     16       {
     17         v1 = getchar();
     18         if ( v1 == 10 ) // '
    ' 
     19               break;
     20         if ( v1 == 32 ) // ' '
     21         {
     22               ++v2;
     23         }
     24         else
     25         {
     26               if ( v1 <= 96 || v1 > 122 ) // v1不是小写字母 
     27               {
     28                 if ( v1 > 64 && v1 <= 90 ) // v1是大写字母 
     29                       str2[v2] = (v1 - 39 - key[v3++ % v5] + 97) % 26 + 97;
     30               }
     31               else // v1是小写字母 
     32               {
     33                 str2[v2] = (v1 - 39 - key[v3++ % v5] + 97) % 26 + 97;
     34               }
     35               if ( !(v3 % v5) )
     36                 putchar(32);
     37           ++v2;
     38         }
     39       }
     40       if ( !strcmp(text, str2) )
     41         puts("Congratulation!
    ");
     42       else
     43         puts("Try again!
    ");
     44     return 0;
     45 }

    我们能看出,输入flag,flag经过函数转化后得到的str2等于text,即”killshadow”时flag正确。很奇怪的是,当我设定输入的flag均为小写字母时,得到flag:efxkwoxzti,是错误的,flag为均大写字母时,得到flag:KLDQCUDFZO是正确的。

    我的爆破脚本:

      1 #include<bits/stdc++.h>
      2 int main()
      3 {
      4     int v2=0;
      5     int v3=0;
      6     int v5;
      7     int tv3;
      8     int i=0;
      9     char tmp;
     10     char text[20]="killshadow";
     11     char key[20]="adsfkndcls";
     12     v5=strlen(key);
     13     char test[20];
     14     char ans;
     15     char trans;
     16     char x;
     17     while(i<=9){
     18         tv3=v3;
     19         tmp=text[i];
     20         //ans=97;
     21         ans=65;
     22         trans=(ans-39-key[tv3++ % v5]+97)%26+97;
     23         while(trans!=tmp){
     24             ans=ans+1;
     25             tv3=v3;
     26             trans=(ans-39-key[tv3++ % v5]+97)%26+97;
     27         }
     28         printf("%c",ans);
     29         v3++;
     30         i++;
     31     }
     32     return 0;
     33 }
  • 相关阅读:
    centos 下PATH变量配置错误补救办法 Alex
    基于php模块方式安装LAMP和常见LAMP应用 Alex
    php配置 Alex
    php测试小代码 Alex
    PHP简介 Alex
    2.7.JavaScriptnull与undefined
    2.9.JavaScript内置对象
    2.8.JavaScript不同数据类型转换
    2.2.javascript变量作用域
    2.6.Javascript数值型
  • 原文地址:https://www.cnblogs.com/hardcoreYutian/p/12635159.html
Copyright © 2020-2023  润新知