Cách  Giải chung của các  bomb nhị phân (binary) từ phase 1 -2

  1. Lập trình

hiện tại mình vẫn chưa biết giải phase 2 như nào mong chỉ bảo

Screenshot from 2019-03-08 07-30-22
Từ khóa: 

lập trình

Bài trả lời mình có 2 ý:

1. Bạn trình bày câu hỏi tối nghĩa quá, lần sau bạn nên trình bày rõ ràng hơn về đề bài, chứ thế này rất khó hiểu cho người đọc.

2. Theo mình hiểu bài của bạn là binary như URL bên dưới gửi.

Binary này được viết trên C. Bạn có thể dùng IDA với Hexray để dễ nhìn mã giả.

Mã giả bài này như sau:

Đoạn mã này yêu cầu nhập vào 6 chữ số. Chữ số đầu tiên là 1, 5 số sau mỗi số tăng theo thứ tự: ** num = số_trước * (index + 1) **

Kết quả bạn cần nhập để thỏa là: **1 2 6 24 120 720**

Kết quả sau khi nhập:


// Lần sau đặt câu hỏi cẩn thận hơn nhé.


int __cdecl phase_2(char *s)
{
int result; // eax
int v2[6]; // [esp+Ch] [ebp-1Ch]
int i; // [esp+24h] [ebp-4h]

read_six_numbers(s, (int)v2);
result = v2[0];
if ( v2[0] != 1 )
explode_bomb();
for ( i = 1; i <= 5; ++i )
{
result = v2[i - 1] * (i + 1);
if ( v2[i] != result )
explode_bomb();
}
return result;
}
▶ ./bomb
Welcome to my fiendish little bomb. You have 6 phases with
which to blow yourself up. Have a nice day!
When I get angry, Mr. Bigglesworth gets upset.
Phase 1 defused. How about the next one?
1 2 6 24 120 720
That's number 2. Keep going!
Trả lời

Bài trả lời mình có 2 ý:

1. Bạn trình bày câu hỏi tối nghĩa quá, lần sau bạn nên trình bày rõ ràng hơn về đề bài, chứ thế này rất khó hiểu cho người đọc.

2. Theo mình hiểu bài của bạn là binary như URL bên dưới gửi.

Binary này được viết trên C. Bạn có thể dùng IDA với Hexray để dễ nhìn mã giả.

Mã giả bài này như sau:

Đoạn mã này yêu cầu nhập vào 6 chữ số. Chữ số đầu tiên là 1, 5 số sau mỗi số tăng theo thứ tự: ** num = số_trước * (index + 1) **

Kết quả bạn cần nhập để thỏa là: **1 2 6 24 120 720**

Kết quả sau khi nhập:


// Lần sau đặt câu hỏi cẩn thận hơn nhé.


int __cdecl phase_2(char *s)
{
int result; // eax
int v2[6]; // [esp+Ch] [ebp-1Ch]
int i; // [esp+24h] [ebp-4h]

read_six_numbers(s, (int)v2);
result = v2[0];
if ( v2[0] != 1 )
explode_bomb();
for ( i = 1; i <= 5; ++i )
{
result = v2[i - 1] * (i + 1);
if ( v2[i] != result )
explode_bomb();
}
return result;
}
▶ ./bomb
Welcome to my fiendish little bomb. You have 6 phases with
which to blow yourself up. Have a nice day!
When I get angry, Mr. Bigglesworth gets upset.
Phase 1 defused. How about the next one?
1 2 6 24 120 720
That's number 2. Keep going!