• 攻防世界 reverse 进阶 9-re1-100


    9.re1-100

     1 if ( numRead )
     2       {
     3         if ( childCheckDebugResult() )
     4         {
     5           responseFalse();
     6         }
     7         else if ( bufParentRead[0] == '{' )     // 第一位
     8         {
     9           if ( strlen(bufParentRead) == 42 )    // 输入的长度为42d
    10           {
    11             if ( !strncmp(&bufParentRead[1], "53fc275d81", 0xAuLL) )// 输入的1-10位(输入的第2位到第11位)
    12             {
    13               if ( bufParentRead[strlen(bufParentRead) - 1] == '}' )// 最后一位
    14               {
    15                 if ( !strncmp(&bufParentRead[31], "4938ae4efd", 0xAuLL) )// 输入的31-40位
    16                 {
    17                   if ( !confuseKey(bufParentRead, 42) )//关键
    18                   {
    19                     responseFalse();
    20                   }
    21                   else if ( !strncmp(bufParentRead, "{daf29f59034938ae4efd53fc275d81053ed5be8c}", 0x2AuLL) )// 修改后的结果进行比较
    22                   {
    23                     responseTrue();             // {53fc275d81053ed5be8cdaf29f59034938ae4efd}
    24                   }
    25                   else
    26                   {
    27                     responseFalse();

    主要分析confuseKey(bufParentRead, 42)函数

     1 bool __cdecl confuseKey(char *szKey, int iKeyLength)
     2 {
     3   char szPart1[15]; // [rsp+10h] [rbp-50h]
     4   char szPart2[15]; // [rsp+20h] [rbp-40h]
     5   char szPart3[15]; // [rsp+30h] [rbp-30h]
     6   char szPart4[15]; // [rsp+40h] [rbp-20h]
     7   unsigned __int64 v7; // [rsp+58h] [rbp-8h]
     8 
     9   v7 = __readfsqword(0x28u);
    10   *(_QWORD *)szPart1 = 0LL;
    11   *(_DWORD *)&szPart1[8] = 0;
    12   *(_WORD *)&szPart1[12] = 0;
    13   szPart1[14] = 0;
    14   *(_QWORD *)szPart2 = 0LL;
    15   *(_DWORD *)&szPart2[8] = 0;
    16   *(_WORD *)&szPart2[12] = 0;
    17   szPart2[14] = 0;
    18   *(_QWORD *)szPart3 = 0LL;
    19   *(_DWORD *)&szPart3[8] = 0;
    20   *(_WORD *)&szPart3[12] = 0;
    21   szPart3[14] = 0;
    22   *(_QWORD *)szPart4 = 0LL;
    23   *(_DWORD *)&szPart4[8] = 0;
    24   *(_WORD *)&szPart4[12] = 0;
    25   szPart4[14] = 0;
    26   if ( iKeyLength != 42 )
    27     return 0;
    28   if ( !szKey )
    29     return 0;
    30   if ( strlen(szKey) != 42 )
    31     return 0;
    32   if ( *szKey != 123 )
    33     return 0;
    34   strncpy(szPart1, szKey + 1, 0xAuLL);          // 将输入去掉头尾{}后的部分分成4部分
    35   strncpy(szPart2, szKey + 11, 0xAuLL);
    36   strncpy(szPart3, szKey + 21, 0xAuLL);
    37   strncpy(szPart4, szKey + 31, 0xAuLL);
    38   memset(szKey, 0, iKeyLength);
    39   *szKey = '{';
    40   strcat(szKey, szPart3);                       // 分割后的部分重新组合
    41   strcat(szKey, szPart4);
    42   strcat(szKey, szPart1);
    43   strcat(szKey, szPart2);
    44   szKey[41] = '}';
    45   return 1;
    46 }

    算法十分简单:

     1 s1='53fc275d81'
     2 s4='4938ae4efd'
     3 # 3,4,1,2
     4 ss='daf29f59034938ae4efd53fc275d81053ed5be8c'
     5 x=[]
     6 for i in range(0,len(ss),10):
     7     x.append(ss[i:i+10])
     8 print(x)
     9 print('{',''.join((x[2],x[3],x[0],x[1])),'}',sep='')
    10 
    11 # ['daf29f5903', '4938ae4efd', '53fc275d81', '053ed5be8c']
    12 # {53fc275d81053ed5be8cdaf29f59034938ae4efd}

    {53fc275d81053ed5be8cdaf29f59034938ae4efd}

    这题实在是简单,签到题水平,竟然放到了进阶区,,,,

    因为提交时没有{}

    是不是很坑,

    hahah

  • 相关阅读:
    9-1058. 选择题(20)
    8-素数打表
    7- 插入与归并
    6-爱丁顿数(题意理解)
    5-单身狗(时间和空间的相互选择)
    4-1068. 万绿丛中一点红
    3-1067. 试密码
    2-素数打比表
    21-矩形的嵌套
    maven设置打jar包并引入依赖包
  • 原文地址:https://www.cnblogs.com/DirWang/p/11436857.html
Copyright © 2020-2023  润新知