首页
社区
课程
招聘
[原创]第一题 流浪者
2019-3-25 15:01 3237

[原创]第一题 流浪者

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编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回