Professional Documents
Culture Documents
Untitled
Untitled
Các nhân vật được chúng tôi xây dựng như dưới đây
Tiffany:Chuyên gia về
Forensic, Cryptography,
Coding
*Lời cảm ơn đặc biệt tới hội thảo Defcon và DDTek, người
khiến chúng tôi đứng chung một đội và nhắm tới cùng một mục
tiêu.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Giờ là lúc để giải bài
Binary 300. Tôi đoán challenge này có số điểm là 300,
vậy khả năng là nó sẽ khó hơn các bài khác.
Hehe,
đừng lo MONG. Ồ, khả năng lần này tôi
Có tôi đây :) sẽ cổ vũ cho anh.
Phải không Tiffany? Bài về Binary thực sự
không phải sở trường
của tôi.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Tôi đoán nó là
Windows PE binary. Định dạng PE?
Gợi ý là
gì thế?
Tìm 16 bytes của key?
Khả năng là một bài liên
quan đến crypto?
Source:http://hackerschool.org/DefconCTF/17/B300.html
Do bài này nằm ở phần binary,
Tôi đã upload file tại đường link
vậy nên không thể liên http://sapheads.org/b300.exe
quan đến Crypto. Hãy thử phân tích nó theo cách cậu biết.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Đã xong
Source:http://hackerschool.org/DefconCTF/17/B300.html
Thấy không?
Giống như
thế này.
Source:http://hackerschool.org/DefconCTF/17/B300.html
À tôi đã hiểu, Entropy cho cậu biết
nhưng Entropy là gì? cách thức tổ chức của
file như thế nào.
Lấy ví dụ,
nếu một cái bàn được sắp xếp một Ngược lại, nếu cài bàn đó được sắp
cách ngăn nắp, giá trị entropy xếp một cách bừa bãi, giá trị
của nó sẽ thấp. entropy của nó sẽ cao.
Wow...
Quá hay...
Source:http://hackerschool.org/DefconCTF/17/B300.html
À, vậy có nghĩa là
file này đã bị nén và packed.
Chính xác,
giờ cậu thử dùng Olly Debugger
để debug xem.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Cô sẽ thấy có file helloworld.txt
được tạo ra.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Thông thường,
nếu như có bất kỳ sự khác biệt nào giữa
việc thực thi file một cách bình thường Vậy để tôi thử tìm xem có
và thực thi filethông qua một chương những cơ chế Anti-Debugging
trình debugger,thì khả năng lớn file nào đã được áp dụng.
đó có áp dụng Anti-Debugging.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Đầu tiên, đây là entry point của file này.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Và một chỗ khác gọi tới hàm ExitThread()
Thực tế là,
sub function đầu tiên tôi đã nói về việc chỉnh ...
Source:http://hackerschool.org/DefconCTF/17/B300.html
Chính xác, nó sửa địa chỉ của một hàm mà
ExitThread gọi.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Thoạt nhìn, trông nó khá phức tạp,
nhưng bạn sẽ sớm nhận ra rằng chúng "Gibberish codes" có nghĩa là
đơn giản chỉ là những đoạn mã không đoạn codes đó chẳng thực hiện
có ý nghĩa "gibberish" nhằm mục đích bất kỳ công việc gì.
làm bạn bị phân tâm. Giống như đoạn mã này...
Source:http://hackerschool.org/DefconCTF/17/B300.html
Reversing thực sự không phải chuyên môn của tôi.
Nhưng tôi chờ tới Crypto hay Forensic,
tôi sẽ cân hết !!
Source:http://hackerschool.org/DefconCTF/17/B300.html
TEB là viết tắt của Thread Environment Block,
và nó là một cấu trúc bao gồm các thông tin về
thread hiện tại.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Sau khi trở về từ sub function sẽ thực hiện tiếp
lời gọi hàm ExitThread().
0x0046367F
Sau đó,
hàm ExitThread() sẽ thực hiện theo trình tự sau và gọi tới 0x0046367F
Source:http://hackerschool.org/DefconCTF/17/B300.html
Bây giờ ta đang ở tại địa chỉ 0x0046367F,
theo quan sát thì thấy đây không phải
là một vùng code hợp lệ, nên chúng ta
không thể debug nó được.
Source:http://hackerschool.org/DefconCTF/17/B300.html
và nhấn Ctrl+E để áp dụng chỉnh sửa code, sau đó vùng code
trông sẽ ổn hơn.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Tại vùng code đang đứng, binary này sử dụng một thủ thuật khác để
chống lại việc debug,thủ thuật này thực hiện việc chèn thêm các giá
trị rác vào giữa các câu lệnh.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Ví dụ, tôi sẽ thử sửa
một lệnh.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Như cậu thấy, tại 0x0046368A, tại đó có một giá trị lạ là
0x1D nhằm đánh lạc hướng của ta.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Đoạn code khác tại địa chỉ 0x0046368B sẽ được
khôi phục.
Wow,
Thật tuyệt quá...
Nếu cậu tiếp tục thay thế toàn
bộ các giá trị rác tương tự
như vậy
Source:http://hackerschool.org/DefconCTF/17/B300.html
Cậu sẽ thấy có lệnh Call tới hàm
VirtualProtect()
Source:http://hackerschool.org/DefconCTF/17/B300.html
Nếu cậu quan sát tại cửa sổ Stack,
cậu có thể kiểm tra được các tham số được
truyền vào cho hàm này.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Và nếu quan sát tại địa chỉ bộ nhớ và kích thước
vùng nhớ,cậu sẽ biết rằng các mã hiện tại đã
được bao gồm trong vùng này.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Và vùng màu đỏ chính là vùng mã đã
thay đổi.
Giờ, nếu cậu thực thi Cậu sẽ thấy một đoạn mã nơi mà nó
từng lệnh một của thêm SEH
đoạn mã đã thay đổi,
Source:http://hackerschool.org/DefconCTF/17/B300.html
Sau đó ta sẽ tới lệnh int 0x2D.
Arrg....
Tôi cảm thấy bị loạn
rồi.
Hmm,
anti-debugging bằng
cách sử dụng int 0x2D.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Nhưng cậu cần phải nhớ rằng exception
ILLEGAL INSTRUCTION đã xảy ra, thay vì
exception BREAK POINT.
Sau khi thay thế các giá trị rác bằng NOPs,
các lệnh sẽ trông như sau.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Yeah, tôi nghĩ rằng có
thể đây là kỹ thuật
Hmm... Giờ, lại thêm cơ chế cuối cùng rồi.
Anti-debugging
bằng int 3.
À ha,
Vậy thì điều đó có nghĩa là SEH đã thực hiện
gần đây sẽ được thực hiện lại đúng không?
Source:http://hackerschool.org/DefconCTF/17/B300.html
Không, đoạn code này thực ra có một đoạn code khác
dùng để tạo một SEH khác.
Source:http://hackerschool.org/DefconCTF/17/B300.html
nhưng nếu cậu trace qua lệnh XOR,
nó sẽ chuyển đổi thành một địa chỉ
của một vùng code.
Thanh ghi EDX, trước khi được đem đi XOR sẽ có giá trị là 0xFFFC03FF,
giá trị này có được từ câu lênh phía trên.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Nếu cậu XOR FFBE3465 với FFFC03FF, cậu sẽ nhận được
kết quả là 0042379A, đây là một địa chỉ.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Mà ngược lại ILLEGAL INSTRUCTION
Đó là bởi vì khi cậu đang debug,
exception lại văng ra bởi vì có
BREAK POINT exception tại
câu lệnh không hợp lệ liền sau đó.
int 0x2d sẽ không xảy ra.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Vậy là, sau đó nó sẽ tính toán ra giá trị
đúng là 0x0046379A.
Sau đó địa chỉ này được lưu tại ESP+0x18, đó là nơi mà ban
đầu có một SEH khác.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Bây giờ chúng ta cần
thay đổi tùy chọn
trong Olly cho
int3 exception.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Tổng kết lại toàn bộ
như sau.
Đầu tiên, nó đã chèn thêm các giá trị rác để gây nhiễu trong khi
disassembling.
Thứ hai, nó đã thay đổi FastPebLock routine function, do vậy bên trong
lời gọi của ExitThread(),nó lại gọi tới một đoạn code khác.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Sau đó nó áp dụng kĩ thuật tự thay đổi code
(self-modifying)để chèn thêm các lệnh.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Cuối cùng, bằng kỹ thuật int 3,
nó đã thực thi SEH thứ hai.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Source:http://hackerschool.org/DefconCTF/17/B300.html
Không, có quá Chúng ta sẽ lãng phí
Cần phải tìm ra một
nhiều codes. thời gian, nếu chúng
cách nào đó hiệu
ta cứ tiếp tục
quả hơn.
như vậy.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Nếu nó giải mã băng một key...
Source:http://hackerschool.org/DefconCTF/17/B300.html
Vòng lặp nên sẽ lại với 16 bytes của khóa để
mã hóa hoặc giải mã
Đúng rồi,
chính là nó!!
Source:http://hackerschool.org/DefconCTF/17/B300.html
Chúng ta cần phải tìm các lệnh
thực hiện lặp lại nhiều lần.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Sau đó, xóa toàn bộ các
breakpoints đã đặt.
Để tiến hành thực Trace nghĩa Nó sẽ thực hiện việc ghi lại
hiện Trace là sao? từng lệnh một đã được thực
hiện.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Mở cửa sổ Run Trace trong View menu.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Giờ thì ta ngồi chờ cho
tới khi nó thực hiện
xong.
Có lẽ sẽ phải mất
một lúc.
Ồ!!!
Đã xong.
Nó hiện thông báo
"Terminated"
Source:http://hackerschool.org/DefconCTF/17/B300.html
Các câu lệnh thực hiện có thể được tìm
thấy tại đây.
Tại màn hình Run Trace, nhấn chuột phải và chọn Global
profile.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Sau đó, nó sẽ được sắp xếp theo thứ
tự các lệnh có số lần lặp nhiều nhất.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Nếu không phải là câu lệnh này ...
Source:http://hackerschool.org/DefconCTF/17/B300.html
Ồ, như vậy không phải ở đây.
Thử xem
Đây không có gì là giải mã cả,
tại
nó đơn giản chỉ là việc sao
địa chỉ
chép dữ liệu thôi.
đầu
tiên xem
thế
nào.
Tiếp tục
tìm
với các
địa
chỉ thứ
hai.
Nó lặp lại
từ đây tới đây.
Source:http://hackerschool.org/DefconCTF/17/B300.html
Hmmm, Huh?
nó só sánh 16
Tại đây, vì nó là 10
ở hệ hex, có nghĩa
là 16 ở hệ mười.
Ồ, vậy nó so sánh
với kích thước Vậy có nghĩa là,
của khóa giải mã!! chúng ta đã
đi đúng
hướng có
phải không?
Source:http://hackerschool.org/DefconCTF/17/B300.html
Vì lệnh XOR được sử dụng nhiều lần,
Tôi đang đoán phần chúng ta
tôi nghĩ là nó sử dụng mật mã XOR.
đang cố gắng thực hiện unpack ngay
bây giờ, có sẽ là mã tạo ra file
helloworld.txt
Xong rồi,
Source:http://hackerschool.org/DefconCTF/17/B300.html
Vậy câu trả lời có thể nằm ở
Ồ vãi thật... thanh ghi EBP,
nó chính là địa chỉ bắt đầu
của khóa giải mã đúng
không nhỉ?
Source:http://hackerschool.org/DefconCTF/17/B300.html
Hoàn toàn có thể.
Thử Follow in Dump xem !
Source:http://hackerschool.org/DefconCTF/17/B300.html
Đúng rồi!!
Để tôi thử nó
xem sao.
Quá đỉnh!!!
Đệch...
Source:http://hackerschool.org/DefconCTF/17/B300.html