ROB Bowden: Tôi là Rob, và chúng ta hãy nứt. Vì vậy, nhớ từ các spec pset mà chúng ta sẽ được cần phải sử dụng hàm crypt. Đối với các trang con người, chúng ta có hai băm xác định _xopensource. Đừng lo lắng về lý do tại sao chúng ta cần phải làm điều đó. Và cũng băm bao gồm unistd.h. Vì vậy, một khi đó là ra khỏi con đường, chúng ta hãy đến được với các chương trình thực tế. Điều đầu tiên chúng ta cần phải làm là đảm bảo người dùng nhập vào một mật mã hợp lệ mật khẩu tại dòng lệnh. Nhớ rằng chương trình là vụ được chạy như dấu chấm dấu gạch chéo vết nứt, và sau đó mã hóa chuỗi. Vì vậy, ở đây chúng tôi đang kiểm tra để đảm bảo mà argc để hai nếu chúng ta muốn tiếp tục với chương trình. Nếu argc không phải là hai, có nghĩa là một trong hai người sử dụng không nhập một mật mã mật khẩu tại dòng lệnh, hoặc họ vào nhiều hơn chỉ là mã hóa mật khẩu tại dòng lệnh, trong đó trường hợp chúng tôi không biết phải làm gì với đối số dòng lệnh. Vì vậy, nếu argc là hai, chúng ta có thể tiếp tục. Và ở đây, chúng ta sẽ khai một biến được mã hóa. Đó là chỉ cần đi để bí danh ban đầu argv1 để suốt này chương trình, chúng tôi không cần phải gọi nó là argv1, mà sau đó bạn phải suy nghĩ về những gì thực sự có nghĩa là. Vì vậy, cuối cùng, chúng tôi muốn xác nhận rằng các mật khẩu mã hóa cho người sử dụng vào có thể đã thực sự được một mật khẩu mã hóa. Mỗi trang người đàn ông của hầm mộ, các mật khẩu mã hóa phải là 13 ký tự. Lên đây, chúng tôi nhận thấy rằng băm xác định mã hóa chiều dài là 13. Vì vậy, chúng tôi chỉ đảm bảo rằng các chiều dài chuỗi của mã hóa mật khẩu là 13. Và nếu nó không phải, chúng tôi muốn để thoát khỏi chương trình. Vì vậy, một khi đó là ra khỏi con đường, chúng ta có thể bây giờ thực sự cố gắng để tìm thấy những gì mật khẩu cho các mật mã mật khẩu được. Ở đây, chúng tôi muốn lấy muối từ mật khẩu được mã hóa. Hãy nhớ rằng, mỗi trang người đàn ông, rằng hai ký tự đầu tiên của một mật mã chuỗi, giống như ở đây - 50ZPJ và như vậy - hai nhân vật đầu tiên cho chúng ta muối đã được sử dụng trong các chức năng hầm mộ. Và ở đây, chúng ta thấy rằng muối là ha. Vì vậy, chúng tôi muốn sao chép lần đầu tiên hai ký tự, chiều dài muối được băm định nghĩa là hai. Chúng ta phải sao chép hai ký tự đầu tiên vào mảng này, muối. Chú ý rằng chúng ta cần chiều dài cộng với muối một, vì chúng ta vẫn cần một null thúc vào cuối muối của chúng tôi. Sau đó chúng ta sẽ khai báo mảng này, khách, chiều dài tối đa cộng với kích thước một trong những nơi chiều dài tối đa là băm xác định như tám, từ mật khẩu tối đa dài tám ký tự. Và chúng ta sẽ sử dụng điều này để lặp trên tất cả các chuỗi có thể là có thể có mật khẩu hợp lệ. Vì vậy, nếu các ký tự hợp lệ trong một mật khẩu chỉ là a, b, c, sau đó chúng tôi sẽ iterate qua a, b, c, aa, ba, ca, và như vậy, cho đến khi chúng ta có thể nhìn thấy cccccccc - tám của c. Và nếu chúng ta có không xuống một hợp lệ mật khẩu, sau đó chúng ta cần phải nói rằng chuỗi mã hóa là không hợp lệ để bắt đầu với. Vì vậy, bây giờ, chúng ta đạt được điều này trong khi 1 vòng. Nhận thấy rằng có nghĩa là nó một vòng lặp vô hạn. Chú ý không có lệnh break bên trong vòng lặp vô hạn này. Có được chỉ trở lại báo cáo. Vì vậy, chúng ta không bao giờ thực sự mong đợi để thoát khỏi vòng lặp. Chúng tôi chỉ hy vọng sẽ thoát khỏi chương trình. Tôi đã thêm lệnh in này đến đầu của vòng lặp này chỉ in ra những gì đoán hiện tại của chúng tôi tại mật khẩu là gì. Bây giờ, những gì được vòng này đang làm gì? Nó Looping trên tất cả các chuỗi có thể đó có thể là mật khẩu hợp lệ. Điều đầu tiên chúng ta sẽ làm là có đoán hiện tại của chúng tôi cho những gì mật khẩu. Chúng tôi sẽ lấy muối mà chúng ta nắm lấy từ chuỗi mã hóa, và chúng tôi sẽ mã hóa đoán. Điều này sẽ cho chúng ta một đoán mã hóa, mà chúng ta sẽ so sánh với chuỗi mã hóa mà người dùng nhập vào dòng lệnh. Nếu họ là như nhau, trong trường hợp này chuỗi so sánh sẽ trở về số không, nếu họ đang như nhau, sau đó đoán là mật khẩu đã tạo ra được mã hóa chuỗi, trong trường hợp này chúng ta có thể in mà như mật khẩu và lợi nhuận của chúng tôi. Nhưng nếu họ không giống nhau, mà có nghĩa là chúng tôi đoán không chính xác. Và chúng tôi muốn lặp lại để đoán hợp lệ tiếp theo. Vì vậy, đó là những gì khi điều này vòng lặp đang cố gắng làm. Nó sẽ lặp đoán của chúng tôi để đoán hợp lệ tiếp theo. Chú ý rằng khi chúng ta nói rằng một nhân vật đặc biệt trong chúng tôi đoán có đạt biểu tượng tối đa, mà lên đây được băm được xác định như một dấu ngã, vì đó là nhân vật giá trị ASCII lớn nhất người dùng có thể nhập vào bàn phím, khi nhân vật đạt đến tối đa biểu tượng, sau đó chúng tôi muốn gửi nó trở lại với biểu tượng tối thiểu, là một không gian, một lần nữa ASCII thấp nhất biểu tượng giá trị mà người dùng có thể nhập vào bàn phím. Vì vậy, chúng ta sẽ thiết lập mà để biểu tượng tối thiểu. Và sau đó chúng ta sẽ đi vào các ký tự tiếp theo. Vậy làm thế nào là dự đoán của chúng tôi sẽ lặp lại? Vâng, nếu các ký tự hợp lệ là a, b, và c, sau đó nếu chúng ta bắt đầu với một, nó sẽ lặp đi lặp lại để b, nó sẽ lặp c. c là biểu tượng tối đa của chúng tôi, vì vậy chúng tôi sẽ thiết lập c trở lại một, biểu tượng tối thiểu. Và sau đó chúng tôi sẽ lặp chỉ số để nhân vật tiếp theo. Vì vậy, nếu đoán ban đầu là c, tiếp theo nhân vật sẽ là vô giá trị terminator. Xuống đây, nhận thấy rằng nếu nhân vật mà bây giờ chúng tôi muốn tăng là kết thúc bởi null, sau đó chúng ta sẽ đặt nó vào biểu tượng tối thiểu. Vì vậy, nếu đoán là c, sau đó chúng tôi mới đoán là có được aa. Và nếu đoán ban đầu của chúng tôi là CCCC, sau đó đoán mới của chúng tôi là có được aa. Vì vậy, bất cứ khi nào chúng ta đạt được chuỗi tối đa có chiều dài nhất định, sau đó chúng tôi sẽ thực hiện vào chuỗi tối thiểu chiều dài tiếp theo, mà sẽ chỉ có tất cả các ký tự của biểu tượng tối thiểu. Bây giờ, những gì đang kiểm tra này làm gì ở đây? Vâng, nếu chỉ chuyển từ thứ tám nhân vật để nhân vật chín - vì vậy chúng tôi thêm tám c như trước đó của chúng tôi đoán - sau đó chỉ số này sẽ tập trung vào các cuối cùng kết thúc bởi null của đoán của chúng tôi mảng, mà không có nghĩa là để thực sự được sử dụng trong mật khẩu của chúng tôi. Vì vậy, nếu chúng ta tập trung vào null cuối cùng terminator, sau đó chúng tôi đã không tìm thấy một mật khẩu đó là giá trị sử dụng chỉ tám ký tự, có nghĩa là không có mật khẩu hợp lệ mã hóa để các chuỗi cung cấp. Và chúng ta phải in rằng, nói chúng tôi không thể tìm thấy một hợp lệ mật khẩu, và ngược lại. Vì vậy, trong khi vòng lặp này sẽ lặp lại trên tất cả các chuỗi có thể. Nếu nó tìm thấy bất kỳ mà mã hóa cho dự kiến ​​chuỗi mã hóa, nó sẽ trở lại mật khẩu. Và nó không tìm thấy bất cứ điều gì, sau đó nó sẽ trở lại, in ấn mà nó đã không thể tìm thấy bất cứ điều gì. Bây giờ, nhận thấy rằng duyệt qua tất cả chuỗi có thể có lẽ sẽ mất một lúc. Chúng ta hãy thực sự nhìn thấy như thế nào kéo dài gần. Chúng ta hãy làm cho vết nứt. Vâng, tiếc - nó nói không xác định tham khảo để crypt. Vì vậy, hãy nhớ rằng, cho p thiết lập thông số và cũng là người đàn ông trang cho hầm mộ mà chúng tôi cần phải liên kết trong hầm mộ. Bây giờ, mặc định thực hiện lệnh không biết rằng bạn muốn sử dụng chức năng đó. Vì vậy, hãy sao chép lệnh này khách hàng và chỉ cần thêm vào cuối cùng của nó, liên kết các hầm mộ. Bây giờ, nó biên dịch. Vì vậy, chúng ta hãy chạy crack trên được chuỗi mã hóa - để Caesar. Vì vậy, đó là khá nhanh. Chú ý rằng điều này kết thúc vào ngày 13. Vâng, mật khẩu mã hóa của Caesar sẽ xảy ra là 13. Vì vậy, hãy thử mật khẩu khác. Chúng ta hãy mã hóa Hirschhorn của mật khẩu và thử nứt đó. Vì vậy, lưu ý chúng tôi đã đạt ba nhân vật. Và chúng tôi đang lặp lại trên tất cả có thể chuỗi ba ký tự. Điều đó có nghĩa chúng ta đã kết thúc duyệt qua tất cả một thể và hai chuỗi ký tự. Bây giờ, có vẻ như điều này sẽ mất một thời gian trước khi chúng tôi đạt được chuỗi bốn ký tự. Nó có thể mất một vài phút. Nó đã không mất một vài phút. Chúng tôi đang ở trên chuỗi bốn ký tự. Nhưng bây giờ, chúng ta cần phải duyệt qua tất cả chuỗi bốn ký tự có thể, mà có thể có thể 10 phút. Và sau đó khi chúng tôi đạt được năm nhân vật chuỗi, chúng ta cần phải duyệt qua tất cả của những người, mà có thể mất một vài giờ. Và chúng ta cần phải duyệt qua tất cả có thể sáu ký tự chuỗi, mà có thể mất một vài ngày và như vậy. Vì vậy, nó có thể mất một tiềm năng rất lâu thời gian để duyệt qua tất cả có thể tám ký tự và chuỗi ít hơn. Vì vậy, nhận thấy rằng điều này là không nhất thiết phải là một thuật toán rất hiệu quả cho việc tìm kiếm một mật khẩu. Bạn có thể nghĩ rằng có những cách tốt hơn. Ví dụ, mật khẩu ZYX! 32ab có lẽ không phải là một mật khẩu rất phổ biến, trong khi đó mật khẩu là 12345 có thể rất phổ biến hơn. Vì vậy, một cách để cố gắng tìm một mật khẩu nhanh chóng hơn là chỉ cần nhìn tại các mật khẩu phổ biến hơn. Vì vậy, ví dụ, chúng ta có thể cố gắng đọc từ từ điển và thử tất cả những từ như đoán mật khẩu của chúng tôi. Bây giờ, có thể là một mật khẩu mà không phải là đơn giản. Có lẽ người dùng đã phần nào thông minh và cố gắng để phụ thêm một số kết thúc của một từ. Vì vậy, có lẽ mật khẩu của họ password1. Vì vậy, bạn có thể thử duyệt qua tất cả các từ trong từ điển với một gắn vào phần cuối của nó. Và sau đó có thể sau khi làm điều đó, bạn sẽ nối thêm một hai để kết thúc của nó. Hoặc có thể người dùng đang cố gắng để được thậm chí thông minh hơn, và họ muốn của họ mật khẩu là "hacker", nhưng chúng sẽ thay thế tất cả các trường hợp của điện tử của với thành ba. Vì vậy, bạn có thể làm điều này quá. Duyệt qua tất cả các từ trong từ điển nhưng thay thế ký tự nhìn như con số với những con số. Vì vậy, theo cách này, bạn có thể nắm bắt nhiều hơn mật khẩu là khá phổ biến. Nhưng cuối cùng, cách duy nhất bạn có thể nắm bắt tất cả các mật khẩu là vũ phu buộc lặp qua tất cả chuỗi có thể. Vì vậy, cuối cùng, bạn không cần phải lặp đi lặp lại trên tất cả các chuỗi từ một ký tự tám ký tự, mà có thể mất một thời gian rất dài, nhưng bạn cần phải làm điều đó. Tên tôi là Rob Bowden. Và đây là Crack.