首页
社区
课程
招聘
[原创]吾爱破解2016安全挑战赛第一题CrackMe分析
发表于: 2016-3-28 21:45 24634

[原创]吾爱破解2016安全挑战赛第一题CrackMe分析

2016-3-28 21:45
24634

答案:
Name: 123456
Serial: 32303130333021303276347854301476301254103478

Name: 55555
Serial: 32303130333021303285210345876301430125476301258

分析:
序列号由两部分组成,第一部分为矩阵,第二部分为推箱子
第一部分
对应矩阵为3×3的矩阵,分析如下:
100015B8    0FBED3          movsx   edx, bl
100015BB    83EA 57         sub     edx, 57
100015BE    66:0F6ECA       movd    mm1, edx
100015C2    0F5B            ???                                      ; cvtdq2ps xmm1, xmm1
100015C4    C9              leave
100015C5    3B8D 3CFFFFFF   cmp     ecx, dword ptr [ebp-C4]
100015CB    74 0A           je      short 100015D7
100015CD    0F57C0          xorps   xmm0, xmm0                       ; 1 = -1
100015D0    F3:0F5CC1       subss   xmm0, xmm1
100015D4    0F28C8          movaps  xmm1, xmm0
100015D7    8B8D 64FFFFFF   mov     ecx, dword ptr [ebp-9C]
100015DD    3B8D 58FFFFFF   cmp     ecx, dword ptr [ebp-A8]
100015E3    0F8D 79030000   jge     10001962
代码分析:
将对应的序列号[323031303330213032]转换为单精度矩阵,设该矩阵为B,也就是待求矩阵。注意,第一字节为偶数时 第二字节转换后为负数。

100017EA    8D8D 40FFFFFF   lea     ecx, dword ptr [ebp-C0]
100017F0    8BD8            mov     ebx, eax
100017F2    8D85 4CFFFFFF   lea     eax, dword ptr [ebp-B4]
100017F8    899D 28FFFFFF   mov     dword ptr [ebp-D8], ebx
100017FE    50              push    eax
100017FF    8D85 58FFFFFF   lea     eax, dword ptr [ebp-A8]
10001805    50              push    eax
10001806    E8 F5F8FFFF     call    <tmul>
1000180B    83F8 FF         cmp     eax, -1
1000180E    0F84 4E010000   je      10001962
代码分析:
调用矩阵乘法,该矩阵设为A,其值为:
1   0   1
0   2   0
-1  0   1
矩阵A与矩阵B相乘,结果为矩阵C

10001814    8D85 14FFFFFF   lea     eax, dword ptr [ebp-EC]
1000181A    50              push    eax
1000181B    8D85 2CFFFFFF   lea     eax, dword ptr [ebp-D4]
10001821    50              push    eax
10001822    8D8D 4CFFFFFF   lea     ecx, dword ptr [ebp-B4]
10001828    E8 03F8FFFF     call    <tadd>
1000182D    83F8 FF         cmp     eax, -1
10001830    0F84 2C010000   je      10001962
代码分析:
矩阵C与矩阵D相加,矩阵D的值为
1   0   0
0   1   0
0   0   1
单位矩阵,其结果为矩阵D

10001836    8D85 4CFFFFFF   lea     eax, dword ptr [ebp-B4]
1000183C    50              push    eax
1000183D    8D85 40FFFFFF   lea     eax, dword ptr [ebp-C0]
10001843    50              push    eax
10001844    8BC8            mov     ecx, eax
10001846    E8 B5F8FFFF     call    <tmul>
1000184B    83F8 FF         cmp     eax, -1
1000184E    0F84 0E010000   je      10001962
代码分析:
矩阵A乘矩阵A,A的值上文已列出,设结果为矩阵Ci

10001861    8D85 20FFFFFF   lea     eax, dword ptr [ebp-E0]
10001867    50              push    eax
10001868    8D85 58FFFFFF   lea     eax, dword ptr [ebp-A8]
1000186E    50              push    eax
1000186F    8D8D 4CFFFFFF   lea     ecx, dword ptr [ebp-B4]
10001875    E8 B6F7FFFF     call    <tadd>
1000187A    83F8 FF         cmp     eax, -1
1000187D    0F84 DF000000   je      10001962
代码分析:
矩阵B与Ci相加,设结果为矩阵F

1000189B    83F9 03         cmp     ecx, 3
1000189E    0F8D BE000000   jge     10001962
100018A4    8D1431          lea     edx, dword ptr [ecx+esi]
100018A7    F3:0F100C97     movss   xmm1, dword ptr [edi+edx*4]
100018AC    0F2ECA          ucomiss xmm1, xmm2
100018AF    9F              lahf
100018B0    F6C4 44         test    ah, 44
100018B3    0F8B A9000000   jpo     10001962
100018B9    F3:0F100493     movss   xmm0, dword ptr [ebx+edx*4]
100018BE    0F2EC2          ucomiss xmm0, xmm2
100018C1    9F              lahf
100018C2    F6C4 44         test    ah, 44
100018C5    0F8B 97000000   jpo     10001962
100018CB    0F2EC8          ucomiss xmm1, xmm0
100018CE    9F              lahf
100018CF    F6C4 44         test    ah, 44
100018D2    0F8A 8A000000   jpe     10001962
100018D8    41              inc     ecx
100018D9    83F9 03         cmp     ecx, 3
100018DC  ^ 7C B4           jl      short 10001892
100018DE    83C6 03         add     esi, 3
100018E1    83FE 09         cmp     esi, 9
100018E4  ^ 7C AA           jl      short 10001890
代码分析:
比较矩阵E和F,不一致则退出。
至此可得出完整公式如下:
A*B+D = A*A+B

B为所求矩阵,A和D为已知矩阵,整理公式如下:
B = (A*A-D)*(A-1)~1 注:(A-1)的逆

求得B值如下:
2   0   1
0   3   0
-1  0   2

转换为序列号 323031303330213032,第一部分完成。

第二部分为推箱子
推箱子大小为3×3,数字为 0 -- 8

100018E6    8D75 B4         lea     esi, dword ptr [ebp-4C]
100018E9    8D56 01         lea     edx, dword ptr [esi+1]
100018EC    8D6424 00       lea     esp, dword ptr [esp]
100018F0    8A06            mov     al, byte ptr [esi]
100018F2    46              inc     esi
100018F3    84C0            test    al, al
100018F5  ^ 75 F9           jnz     short 100018F0
100018F7    8B8D 38FFFFFF   mov     ecx, dword ptr [ebp-C8]
100018FD    2BF2            sub     esi, edx
100018FF    E8 0CFAFFFF     call    10001310
10001904    32DB            xor     bl, bl
10001906    85F6            test    esi, esi
10001908    74 25           je      short 1000192F
代码分析:
用户名用于初始化箱子位置,

10001910    0FBE4C05 B4     movsx   ecx, byte ptr [ebp+eax-4C]
10001915    8D41 D0         lea     eax, dword ptr [ecx-30]
10001918    83F8 08         cmp     eax, 8
1000191B    77 08           ja      short 10001925
1000191D    83C1 D0         add     ecx, -30
10001920    E8 9BFAFFFF     call    100013C0
10001925    80C3 01         add     bl, 1
10001928    0FB6C3          movzx   eax, bl
1000192B    3BC6            cmp     eax, esi
1000192D  ^ 72 E1           jb      short 10001910
代码分析:
剩余序列号用于推箱子,

1000192F    B2 01           mov     dl, 1
10001931    0FB6CA          movzx   ecx, dl
10001934    8A81 103F0110   mov     al, byte ptr [ecx+10013F10]
1000193A    3A81 0F3F0110   cmp     al, byte ptr [ecx+10013F0F]
10001940    7C 07           jl      short 10001949
10001942    FEC2            inc     dl
10001944    80FA 08         cmp     dl, 8
10001947  ^ 72 E8           jb      short 10001931
10001949    5E              pop     esi
1000194A    80FA 08         cmp     dl, 8
1000194D    5F              pop     edi
1000194E    0F94C0          sete    al
10001951    5B              pop     ebx
代码分析:
最后为1--8 0 顺序排列,否则注册失败。
起初看似在排序,经试验后发现有规律。

推箱子走法:
3×3的阵列中0为当前位置,0只能与相邻单元进行交互,最后一步必定为8,所以写了个程序进行穷举,代码如下:


[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (19)
雪    币: 2155
活跃值: (2582)
能力值: ( LV12,RANK:667 )
在线值:
发帖
回帖
粉丝
2
感谢楼主,第一部分我一直不懂怎么算的。话说第二部分应该是个数字推箱游戏。
2016-3-28 22:53
0
雪    币: 284
活跃值: (250)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
真心强,我太膜拜您了,我折腾了半天,最后还是爆破的。。
2016-3-28 23:08
0
雪    币: 29
活跃值: (224)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
经过楼主这么分析,思路清晰多了,感谢楼主。
2016-3-28 23:13
0
雪    币: 284
活跃值: (3479)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
5
今天才知道有这个比赛,后知后觉
2016-3-28 23:41
0
雪    币: 25
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
膜拜算法大牛,之前自己看了半天没看懂
2016-3-29 08:20
0
雪    币: 3053
活跃值: (891)
能力值: ( LV13,RANK:1300 )
在线值:
发帖
回帖
粉丝
7
学习了,共同进步。
2016-3-29 08:52
0
雪    币: 2291
活跃值: (938)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
顶楼主!
2016-3-29 09:21
0
雪    币: 134
活跃值: (11)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
果然 “高手”!
2016-3-29 09:59
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我想知道 加了 VM 你们怎么还原的。。。
2016-3-29 10:17
0
雪    币: 312
活跃值: (718)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
话说这个是不是有点太高级了 代码乱的看不懂的说
2016-3-29 10:22
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
就会爆破,算法看得好混乱
2016-3-29 10:24
0
雪    币: 459
活跃值: (166)
能力值: ( LV9,RANK:165 )
在线值:
发帖
回帖
粉丝
13
活捉苏紫  +  顶楼主
2016-3-29 12:46
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
vmp 分析插件
2016-3-29 13:26
0
雪    币: 1042
活跃值: (470)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
找到call eax 之后就失去了跟下去的信心
2016-3-29 17:20
0
雪    币: 799
活跃值: (457)
能力值: ( LV12,RANK:280 )
在线值:
发帖
回帖
粉丝
16
赞一个,比赛时没能分析出来
2016-3-30 18:23
0
雪    币: 739
活跃值: (2279)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
爆破还是好点的,算法实在不想搞,和腾讯那个比赛一样
2016-3-30 18:28
0
雪    币: 207
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我也是整了几个小时,我已经精疲力竭了
2016-4-2 09:51
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
不是我真的想知道 VM了 这。。。怎么还原的???
2016-7-12 10:08
0
雪    币: 8377
活跃值: (4961)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
20
VM怎么还原的?
2017-5-19 19:02
0
游客
登录 | 注册 方可回帖
返回
//