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

Posted dirwang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了攻防世界 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

 

以上是关于攻防世界 reverse 进阶 9-re1-100的主要内容,如果未能解决你的问题,请参考以下文章

攻防世界 Reverse高手进阶区 2分题 easyre-153

攻防世界 Reverse高手进阶区 3分题 crackme

攻防世界 Reverse高手进阶区 2分题 BABYRE

攻防世界 Reverse高手进阶区 3分题 梅津美治郎

攻防世界 Reverse高手进阶区 3分题 梅津美治郎

攻防世界 Reverse高手进阶区 3分题 梅津美治郎