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