-
-
[原创]第一题 流浪者
-
2019-3-25 15:01 3237
-
把文件拖入IDA进行分析,发现checkpasswd的函数如下:
int __cdecl check_passwd(int password_array) { int result; // eax char Str1[28]; // [esp+D8h][ebp-24h] int v3; // [esp+F4h][ebp-8h] int v4; // [esp+F8h][ebp-4h] v4 = 0; v3 = 0; while ( *(_DWORD *)(password_array + 4 * v4) < 62 && *(_DWORD *)(password_array + 4 * v4) >= 0 ) { Str1[v4] = aAbcdefghiabcde[*(_DWORD *)(password_array + 4 * v4)]; ++v4; } Str1[v4] = 0; if ( !strcmp(Str1, "KanXueCTF2019JustForhappy") ) result = sub_401770(); else result = sub_4017B0(); return result; }
可以看出这里面有个置换的过程,其中置换的数组为:abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ。
可以写出如下solve:
str1 ="abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ" str2 ="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" str3 ="KanXueCTF2019JustForhappy" kk =0 for kk inrange(0,len(str3)): for ch in str2: if ch <='9'and ch >='0': if str3[kk]== str1[ord(ch)-48]: print ch, break if ch <='Z'and ch >='A': if str3[kk]== str1[ord(ch)-29]: print ch, break if ch <='z'and ch >='a': if str3[kk]== str1[ord(ch)-87]: print ch, break
最后于 2019-3-25 15:03
被foyjog编辑
,原因:
赞赏
他的文章
看原图