三个白帽挑战之二进制题《迷阵陷落》分析
三个白帽在线挑战平台,集WEB和二进制挑战于一身,以在线挑战的形式把网络安全相关领域白帽子的技术和智慧淋漓尽致地展现出来,为白帽子们搭建了一个非常完美、和谐的在线交流平台,使得白帽子之间可以融洽地施展绝技、交流创意和想法。一次一次的挑战让白帽子们大饱眼福、乐在其中,让大家脑洞大开,并且收获满满,同时回味无穷!
由于对windows平台下二进制有过研究,本着和大家交流学习的目的,在和三个白帽平台管理沟通后,为《条条大路通罗马系列》设计了一个二进制算法题目。本文将首先从破解者角度对这个二进制题进行分析,单纯以破解者身份来逆向分析算法,解密数据,从而最终获得flag。另外将从该题设计者角度进行分析,一步步描述每步算法相对应的数据如何加密、解密的,试图达到什么样的效果,试图在哪里困住破解者。
0x01 正向破解加密算法
首先我们按照程序的流程,一步步分析算法、破解算法。
1、和第一次二进制题一样,首先通过字符串查找,找到字符串where is flag?flag is in the beautifull spring!
2、双击字符串来到算法关键位置,相关汇编代码分析如下:
004026E0 |. 57 push edi ; 这里开始了一个非常初级的数独游戏
004026E1 |. 8D4C24 10 lea ecx, dword ptr [esp+10]
004026E5 |. 897424 18 mov dword ptr [esp+18], esi
004026E9 |. E8 68080000 call
004026EE |. 33DB xor ebx, ebx
004026F0 |. 68 60564000 push 00405660 ; where is flag?flag is in the beautifull spring!
004026F5 |. 8D4C24 14 lea ecx, dword ptr [esp+14]
004026F9 |. C78424 D00000>mov dword ptr [esp+D0], 1
00402704 |. 895C24 18 mov dword ptr [esp+18], ebx
00402708 |. E8 43080000 call
0040270D |. 8BAC24 D80000>mov ebp, dword ptr [esp+D8]
00402714 |. 83C9 FF or ecx, FFFFFFFF
00402717 |. 8BFD mov edi, ebp
00402719 |. 33C0 xor eax, eax
0040271B |. F2:AE repne scas byte ptr es:[edi]
0040271D |. F7D1 not ecx
0040271F |. 49 dec ecx
00402720 |. 83E9 0C sub ecx, 0C
00402723 |. 74 5A je short 0040277F
00402725 |> BF 54564000 /mov edi, 00405654 ; adf438ghi
0040272A |. 83C9 FF |or ecx, FFFFFFFF
0040272D |. 33C0 |xor eax, eax
0040272F |. 33D2 |xor edx, edx
00402731 |. F2:AE |repne scas byte ptr es:[edi]
00402733 |. F7D1 |not ecx
00402735 |. 49 |dec ecx
00402736 |. 74 23 |je short 0040275B
00402738 |. 8A1C2E |mov bl, byte ptr [esi+ebp] ; 单个取输入的字符
0040273B |> 3A9A 54564000 |/cmp bl, byte ptr [edx+405654] ; 判断取出来的字符是否在adf438ghi中