Dword ptr là gì
Để tìm hiểu ý nghĩa của một số kiểu dữ liệu trong MFC, theo tôi nói chính xác hơn là kiểu dữ liệu mới trong Win32, bạn tìm tài liệu lập trình C for Wins mà đọc. Bạn có thể tìm ebook "Programming Windows by Charles Petzold" để tham khảo thêm. Thân! void _tmain( int argc, TCHAR *argv[] ) ZeroMemory( &si, sizeof(si) ); if( argc != 2 ) // Start the child process. // Wait until child process exits. // Close process and thread handles. ví dụ DWORD là kiểu hex kiểu hex là gì hả bạn, mình mới tập lập trình trên windows nên không rõ lắm Ừ, em cũng không biết kiểu hex là gì. HEX không phải là 1 kiểu dữ liệu mà nó chỉ là 1 dạng biểu diễn của số (hệ số). Còn DWORD mới là 1 kiểu dữ liệu. Chẳng hạn như hệ số 10 (thập phân), hệ số 2 (nhị phân),... Hex là hệ số thập lục có giá trị biểu diễn từ 0-F. Bạn tamthanh0424 chắc là dùng từ không chính xác thôi. vBulletin® Version 4.2.2, Copyright © 2022 vBulletin Solutions, Inc. All rights reserved. Administer by Kevin Hoang trên trang chủ của nó hiện có 2 softwares 39$ một em ... thằng này nó code bằng Microsoft Visual C++ 6.0 , đoạn mã hóa khá dài và lung tung , đáng lý tớ cho nó cái patch nhưng thấy nó so sánh nhiều chỗ và phương châm là tìm real serial nên sẽ phân tích đoạn mã hóa của nó vậy ... dùng OllyDbg tìm đến thông báo lỗi "Registration failed!" , dịch chuyển lên một đoạn khá dài và ta đặt breakpoint như sau ... CODE 00412720 . 57 PUSH EDI =>đặt breakpoint thằng này nó mã hóa 2 ký tự đầu tiên của chuỗi name 4 lần ... tính tổng hex của chuỗi name rồi mã hóa tiếp ... sau đó so sánh với 5 ký tự đầu tiên của chuỗi serial nhập vào ... nếu đúng thì bắn nag "Registration has succeeded!" ... đây là challenge đầu tiên trong mảng cracking của rootme. Vì thế chương trình khá đơn giản, chủ yếu nhắm mục đích làm quen với chủ đề reverse này. SolutionĐầu tiên, chương trình nạp vào 1 đoạn string từ biến 6.
Biến này chứa đoạn string 123456789. Tiếp theo, chương trình in ra màn hình một số đoạn string ban đầu
Tiếp theo là đọc dữ liệu người dùng nhập vào
Lưu kết quả trong 7 vào 8
So sánh 2 string người dùng nhập vào với string trong biến 6
Nếu kết quả trả về khác 0 thì in ra thông báo fail
Nếu đúng thì in ra thông báo success cùng mật khẩu
Như vậy, để in ra thông báo chúc mừng, cần giá trị nhập vào tương ứng với giá trị của biến 6.Flag123456789 ELF x86 - BasicĐây là một bài tiếp theo vẫn rất đơn giản để làm quen mảng này. SolutionĐầu tiên, chương trình lưu 2 biến local là 1 và 2.
Tiếp theo, chương trình in ra một số thông báo chào mừng và yêu cầu người dùng nhập username
Giá trị này được lưu vào 1 biến local của hàm và được so sánh với giá trị 1. 0Nếu sai thì in ra Bad username 1 2Nếu đúng thì sẽ yêu cầu người dùng nhập password 3Sau đó so sánh giá trị này với biến 2 4Nếu sai thì in ra Bad password 5 6Nếu đúng thì in ra flag 7FlagFlag: 987654321 PE x86 - 0 protectionTiếp theo 2 bài đơn giản trên là một bài phức tạp hơn 1 tí tẹo. SolutionĐầu tiên, ta có 1 file 5. Chạy thử file này với input bất kì, ta cósearch thử Wrong password trong source code asm, ta thấy nó được gọi tại đoạn mã này được gọi tại hàm Dựa theo mã asm, đầu tiên 8sẽ kiểm tra độ dài của input string phải bằng 7. Tiếp theo, các đoạn mã có dạng 9là đoạn mã so sánh từng kí tự trong input string với một kí tự cho trước (như 6 ở s[0]). Theo đó, các kí tự của string lần lượt phải là 0Nếu không thoả mãn các điều kiện trên, sẽ in ra wrong input. Ngược lại, nếu input string thoả mãn các điều kiện chương trình sẽ in ra dòng chúc mừng "Gratz man .có thể tạo giả mã C cho chương trình đơn giản như sau: 1Vậy input string cần tìm sẽ là Flag 2ELF C++ - 0 protectionTiếp theo sẽ là một bài khác cũng ở mức cơ bản, mục tiêu là sử dụng các công cụ debug để hiểu hơn về chương trình. SolutionĐầu tiên, bài cho chúng ta 1 file 7. Thực thi file với input bất kì, ta có:Tìm kiếm output này trong source code asm, ta có đoạn code in ra nó là 3Đoạn code này được nhảy tới từ đoạn Theo đó, nếu kết quả của hàm 8 là 0 thì sẽ in ra Incorrect password, ngược lại sẽ in ra Congratz. ...OK, xem thử trong hàm 8, ta có 4Có thể thấy hàm này sẽ so sánh 2 tham số truyền vào dựa trên hàm 0. Trong các tham số truyền vào, 1 tham số là input string, tham số còn lại là string có sẵn của chương trình. Ta chỉ cần tìm xem string nào được truyền vào hàm này để giải được bài nàySử dụng gdb debug file, đặt breakpoint tại địa chỉ mà hàm này được gọi là 1có thể thấy, tham số cần tìm sẽ được trỏ bởi 2 -> 7 -> mem ("Here_you_have_to_understand_a_little_C++_stuffs")Vậy string cần tìm sẽ là Here_you_have_to_understand_a_little_C++_stuffs. Flag 5PE DotNet - 0 protectionBài này là một bài cơ bản nhất để làm quen với reverse .NET SolutionĐầu tiên, chương trình cung cấp cho ta 1 file 4. Thực thi file này sẽ hiển thị một form với 1 trường input và 1 button 5](https://0xbadcode.ml/uploads/images/gallery/2021-08/image-1628845972599.png)Khi clicj vào form với input bất kì, ta sẽ có một thông báo sai mật khẩu ](https://0xbadcode.ml/uploads/images/gallery/2021-08/image-1628846020953.png)Ở bài này, mình dùng DotPeek của JetBrain để decompile source code của file này Thử tìm kiếm Bad password trong source code, ta thấy nó được xử lý trong 6. Ở đây, khi click vào button 5(button1) sẽ gọi tới hàm |