Thứ Tư, 5 tháng 3, 2014

Writeup ATTT 2013 | RE200 | Thuật toán bí mật | 200 (Bản Unoffical)

Bài này được viết ra để cho các bạn tham khảo và tìm hướng đi tốt nhất để giải bài này

Thay vì dùng kết hợp các hàm băm có "salt" để lưu trữ mật khẩu của khách hàng, Ngân Hàng Trung Ương lại viết lại một thuật toán bí mật riêng cho việc mã hóa và lưu mật khẩu đó. Đây là điều hết sức tối kỵ với những người làm mật mã học chuyên nghiệp. Thật không may, khi bí mật thuật toán phơi bày, Anonymous dễ dàng giải mã ngược lại toàn bộ bản rõ mật khẩu của Khách Hàng trong hệ thống. Dịch ngược và viết một đoạn mã nhỏ chứng tỏ mật khẩu có thể bị giải mã cho thanh tra X, Thiên chỉ lắc đầu thở dài...
Challenge: Link

Thuật toán này được thực hiện bởi 3 hàm:
Hàm thứ nhất dùng để chuyển chữ hoa thành chữ thường và ngược lại
Hàm thứ 2 dùng để đảo ngược chuỗi
Hàm thứ 3 xor các ký tự trong chuỗi với 0,-1,-2,-3,-4,-5,-6,-7,-8....
Sau đó chuỗi kết quả sẽ được so sánh với chuỗi được mã hóa để check kết quả
Ta có thể code lại chương trình này như sau:

#include <stdio.h>
#include <string.h>
int main()
{
char dx[80];
gets(dx);
for (int i=0;i<strlen(dx);i++)
{
if ((int)dx[i]<97)
{
dx[i]=(char)((int)dx[i]+32);
}
else
{
dx[i]=(char)((int)dx[i]-32);
}
}
char dtmp[80];
int j=0;
for (int ii=strlen(dx)-1;ii>=0;ii--)
{
dtmp[j]=dx[ii];
j++;
}
int k=0;
char result[80];
for (int ij=0;ij<strlen(dtmp);ij++)
{
result[ij]=dtmp[ij]^k;
k--;
}
printf("%s",result);
return 0;
}

Không có nhận xét nào:

Đăng nhận xét