-
-
[原创]看雪CTF.TSRC 2018 团队赛 第六题 追凶者也 解题过程
-
发表于: 2018-12-11 14:04 2962
-
1.下断点GetDlgItemTextA ,随手输入注册码,点确定断下:
发现有一处hook,跟进401a10 发现这个是验证函数。
主要函数就红圈中两个。
Check函数:
调试了几次发现是个拼图游戏
这个比win7自带的还简单点,是个3*3的:
初始状态:
4 1 3
7 2 5
8 6 0
0是空块,最终要还原成:
1 2 3
4 5 6
7 8 0
char __cdecl move_401380(int a1, int a2) { char result; // al signed int i; // [esp+8h] [ebp-8h] signed int v4; // [esp+Ch] [ebp-4h] if ( !a2 ) return 0; v4 = 0; LABEL_4: if ( v4 >= 3 ) return 0; for ( i = 0; ; ++i ) { if ( i >= 3 ) { ++v4; goto LABEL_4; } if ( byte_4147D0[3 * v4 + i] == a2 ) break; LABEL_6: ; } switch ( a1 ) { case 0: if ( v4 ) { if ( byte_4147D0[3 * (v4 - 1) + i] ) { result = 0; } else { byte_4147D0[3 * (v4 - 1) + i] = byte_4147D0[3 * v4 + i]; byte_4147D0[3 * v4 + i] = 0; result = 1; } } else { result = 0; } break; case 1: if ( i == 2 ) { result = 0; } else if ( byte_4147D1[3 * v4 + i] ) { result = 0; } else { byte_4147D1[3 * v4 + i] = byte_4147D0[3 * v4 + i]; byte_4147D0[3 * v4 + i] = 0; result = 1; } break; case 2: if ( v4 == 2 ) { result = 0; } else if ( byte_4147D0[3 * (v4 + 1) + i] ) { result = 0; } else { byte_4147D0[3 * (v4 + 1) + i] = byte_4147D0[3 * v4 + i]; byte_4147D0[3 * v4 + i] = 0; result = 1; } break; case 3: if ( i ) { if ( byte_4147CF[3 * v4 + i] ) { result = 0; } else { byte_4147CF[3 * v4 + i] = byte_4147D0[3 * v4 + i]; byte_4147D0[3 * v4 + i] = 0; result = 1; } } else { result = 0; } break; default: goto LABEL_6; } return result; }
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
看原图
赞赏
雪币:
留言: