>> ROB สลิง: ฉันร็อบและ ให้ได้รับการแตกร้าว
ดังนั้นจำจาก spec pset ว่า เรากำลังจะต้องใช้
ฟังก์ชั่นห้องใต้ดิน
สำหรับหน้าคนเรามีสอง กัญชากำหนด _xopensource
ไม่ต้องกังวลเกี่ยวกับสาเหตุ เราจำเป็นต้องทำอย่างนั้น
และกัญชารวม unistd.h
>> ดังนั้นเมื่อที่ออกจากทางให้ ไปที่โปรแกรมจริง
สิ่งแรกที่เราต้องทำคือการให้แน่ใจว่า ผู้ใช้ป้อนถูกต้องเข้ารหัส
รหัสผ่านที่บรรทัดคำสั่ง
โปรดจำไว้ว่าโปรแกรมที่ถูกที่ควร ที่จะทำงานเช่นเดียวกับรอยแตกจุดเฉือนและ
แล้วสายการเข้ารหัส
>> ดังนั้นที่นี่เรากำลังตรวจสอบเพื่อให้แน่ใจว่า ที่ argc สองถ้าเราต้องการ
ดำเนินการต่อด้วยโปรแกรม
ถ้า argc ไม่ได้เป็นสองนั่นหมายความว่าอย่างใดอย่างหนึ่ง ผู้ใช้ไม่ได้ป้อนข้อมูลที่เข้ารหัส
รหัสผ่านที่บรรทัดคำสั่งหรือพวกเขา เข้ามามากกว่าเพียงแค่การเข้ารหัส
รหัสผ่านที่บรรทัดคำสั่งซึ่งใน กรณีที่เราไม่ทราบว่าจะทำอย่างไรกับ
อาร์กิวเมนต์บรรทัดคำสั่ง
>> ดังนั้นถ้า argc สองเราสามารถดำเนินการต่อ
และที่นี่เรากำลังจะประกาศ ตัวแปรการเข้ารหัส
ที่แค่ไปนามแฝงเดิม argv1 เพื่อที่ว่าตลอดนี้
โปรแกรมของเราเราไม่ต้องเรียกมันว่า argv1, ซึ่งจากนั้นคุณต้องคิด
เกี่ยวกับสิ่งที่หมายความว่าจริง
>> ดังนั้นในที่สุดเราต้องการที่จะตรวจสอบว่า รหัสผ่านที่เข้ารหัสของผู้ใช้
เข้ามาจะได้รับจริง รหัสผ่านที่เข้ารหัส
ต่อหน้าคนจากฝังศพใต้ถุนโบสถ์ รหัสผ่านที่เข้ารหัสจะต้องมี 13
ความยาวอักขระ
ขึ้นที่นี่เราสังเกตเห็นว่ากัญชาที่กำหนดไว้ ระยะเวลาในการเข้ารหัสเป็น 13
ดังนั้นเราเพียงแค่การทำให้แน่ใจว่า ความยาวสตริงของการเข้ารหัส
รหัสผ่านคือ 13
>> และหากยังไม่ได้ที่เราต้องการ เพื่อออกจากโปรแกรม
ดังนั้นเมื่อที่ออกจากทางที่เราสามารถ ขณะนี้จริงพยายามที่จะหา
รหัสผ่านที่ให้การเข้ารหัส รหัสผ่านคือ
ที่นี่เราต้องการคว้าเกลือ จากรหัสผ่านที่เข้ารหัส
โปรดจำไว้ว่าต่อหน้าคนที่ ครั้งแรกที่ตัวละครทั้งสองของการเข้ารหัส
สตริงชอบที่นี่ -
50ZPJ และอื่น ๆ -
ครั้งแรกที่ตัวละครทั้งสองให้ เราเกลือที่ใช้
ในฟังก์ชั่นห้องใต้ดิน
>> และที่นี่เราจะเห็นว่าเกลือเป็นฮ่า
ดังนั้นเราจึงต้องการคัดลอกสองคนแรก อักขระระยะเวลาในเกลือเป็นกัญชา
กำหนดให้เป็นสอง
เราต้องคัดลอกสองตัวแรก เป็นแบบนี้แถวเกลือ
ขอให้สังเกตว่าเราต้องบวกระยะเวลาในเกลือ หนึ่งเนื่องจากเรายังคงต้องเป็นโมฆะ
terminator ในตอนท้ายของเกลือของเรา
>> แล้วเรากำลังจะประกาศอาร์เรย์นี้ แขกของความยาวสูงสุดที่ขนาดบวก
หนึ่งที่ระยะเวลาสูงสุดคือกัญชาที่กำหนดไว้ เป็นแปดตั้งแต่รหัสผ่านสูงสุด
เป็นแปดตัวอักษรยาว
และเรากำลังจะใช้นี้เพื่อย้ำ กว่าสายที่เป็นไปได้ทั้งหมดที่จะทำได้
เป็นรหัสผ่านที่ถูกต้อง
ดังนั้นถ้าตัวอักษรที่ถูกต้องในรหัสผ่าน เป็นแค่ A, B และ C แล้ว
เราจะย้ำกว่า b, c, AA, ba, CA, และอื่น ๆ จน
เราจะได้เห็น cccccccc -
แปดของค
>> และถ้าเรายังไม่ได้ลงที่ถูกต้อง รหัสผ่านแล้วเราต้องบอกว่า
สายการเข้ารหัสไม่ได้ ที่ถูกต้องจะเริ่มต้นด้วย
ดังนั้นตอนนี้เรามาถึงนี้ในขณะที่ 1 ห่วง
ขอให้สังเกตว่าหมายความว่ามัน ห่วงอนันต์
>> ขอให้สังเกตว่ามีคำสั่งที่ไม่มีการหยุดพัก ภายในห่วงอนันต์นี้
มีเพียงงบกลับเป็น
ดังนั้นเราจึงไม่เคยคาดหวัง เพื่อออกจากวง
เราจะคาดหวังว่าจะออกจากโปรแกรม
ฉันได้เพิ่มที่พิมพ์ข้อความนี้ไปยัง ด้านบนของวงนี้ที่จะเพียงแค่พิมพ์ออกมา
สิ่งเดาในปัจจุบันของเราที่ รหัสผ่านคือสิ่งที่
>> ตอนนี้วงนี้จะทำอะไร
มันวนลูปกับสตริงเป็นไปได้ทั้งหมด ที่อาจจะมีรหัสผ่านที่ถูกต้อง
สิ่งแรกที่เรากำลังจะทำคือ จะคาดเดาในปัจจุบันของเราสำหรับสิ่งที่
รหัสผ่านคือ
เราจะพาเกลือที่เราคว้าจาก สายการเข้ารหัสและเรา
ไปเข้ารหัสเดา
นี้จะช่วยให้เราเดาเข้ารหัส ซึ่งเรากำลังจะมีการเปรียบเทียบกับ
สายการเข้ารหัสที่ผู้ใช้ เข้ามาที่บรรทัดคำสั่ง
>> ถ้าพวกเขาจะเหมือนกันในกรณีที่ สตริงเทียบเคียงจะกลับมาเป็นศูนย์ถ้า
พวกเขากำลังเดียวกันแล้วเดาถูก รหัสผ่านที่สร้างการเข้ารหัส
สตริงซึ่งในกรณีนี้เราสามารถพิมพ์ ที่เป็นรหัสผ่านและผลตอบแทนของเรา
แต่ถ้าพวกเขาไม่ได้เหมือนกันว่า หมายถึงการคาดเดาของเราไม่ถูกต้อง
>> และเราต้องการที่จะย้ำไป คาดเดาที่ถูกต้องต่อไป
ดังนั้นนั่นคือสิ่งที่ในขณะนี้ ห่วงพยายามที่จะทำ
มันจะย้ำเดาของเรา การคาดเดาที่ถูกต้องต่อไป
ขอให้สังเกตว่าเมื่อเราบอกว่า ตัวอักษรโดยเฉพาะอย่างยิ่งในการคาดเดาของเรามี
ถึงสัญลักษณ์สูงสุดซึ่งขึ้นที่นี่ เป็นกัญชากำหนดให้เป็นตัวหนอนตั้งแต่
ที่ตัวอักษร ASCII ค่าที่มากที่สุด ที่ผู้ใช้สามารถป้อนที่
แป้นพิมพ์เมื่อตัวละครถึง สูงสุดสัญลักษณ์แล้วเราต้องการที่จะส่ง
มันกลับไปที่สัญลักษณ์ขั้นต่ำซึ่ง เป็นพื้นที่อีกครั้ง ASCII ต่ำที่สุด
สัญลักษณ์ค่าที่ผู้ใช้สามารถ ป้อนที่แป้นพิมพ์
>> ดังนั้นเราจะกำหนดว่า สัญลักษณ์ขั้นต่ำ
แล้วเรากำลังจะไป ไปยังตัวอักษรถัดไป
ดังนั้นวิธีการคาดเดาของเรา ไปย้ำ?
ดีถ้าตัวอักษรที่ถูกต้องเป็น A, B, และ C แล้วถ้าเราเริ่มต้นด้วย,
มันจะย้ำไป B ก็จะ ย้ำไปที่ C
c คือสัญลักษณ์สูงสุดของเราดังนั้นเราจะตั้ง คกลับไป, สัญลักษณ์ขั้นต่ำ
และจากนั้นเราจะย้ำดัชนี ไปยังตัวอักษรถัดไป
>> ดังนั้นถ้าเดาเดิมคือ C, ต่อไป ตัวละครจะเป็นโมฆะ
terminator
ลงที่นี่แจ้งให้ทราบว่าถ้าตัวละคร ตอนนี้เราต้องการ
เพิ่มขึ้นเป็นโมฆะ terminator, แล้วเรากำลังจะตั้งค่าให้
สัญลักษณ์ขั้นต่ำ
ดังนั้นถ้าเดาคือ C แล้วของเรา ใหม่คาดเดาเป็นไปได้ AA
และถ้าเดาเดิมของเราคือ CCCC แล้วเดาใหม่ของเรา
เป็นไปได้ aaaaa
>> ดังนั้นเมื่อใดก็ตามที่เราไปถึงสตริงสูงสุด จากระยะเวลาที่กำหนดแล้วเรา
ไปดำเนินการตามขั้นต่ำสตริง ของความยาวต่อไปซึ่งจะ
เป็นเพียงตัวอักษรทั้งหมดของ สัญลักษณ์ขั้นต่ำ
ตอนนี้กำลังทำอะไรอยู่ที่นี่?
ดีดัชนีถ้าย้ายจากแปด อักขระเก้าตัวอักษร -
ดังนั้นเราจึงเพิ่มแปดของ c เป็น หน้าที่ของเราเดา -
แล้วดัชนีจะมุ่งเน้นไปที่ ล่าสุด null terminator เดาของเรา
อาร์เรย์ซึ่งไม่ได้หมายถึงจริง ที่จะใช้ในรหัสผ่านของเรา
>> ดังนั้นหากเรามุ่งเน้นที่จะเป็นโมฆะสุดท้ายที่ เทอร์มิแล้วเรายังไม่ได้พบ
รหัสผ่านที่ถูกต้องโดยใช้เพียงแปด ตัวอักษรซึ่งหมายความว่าไม่มี
รหัสผ่านที่ถูกต้องที่เข้ารหัสลับ เพื่อสตริงที่กำหนด
และเรามีการพิมพ์ที่บอกว่า เราไม่สามารถหาที่ถูกต้อง
รหัสผ่านและผลตอบแทน
ดังนั้นห่วงขณะนี้เป็นไปย้ำ กว่าสตริงเป็นไปได้ทั้งหมด
>> หากพบการใด ๆ ที่จะเข้ารหัส สายการเข้ารหัสที่คาดไว้ก็จะ
กลับรหัสผ่านที่
และมันก็ไม่พบสิ่งใดแล้ว มันจะกลับมาพิมพ์ว่า
ไม่สามารถที่จะหาอะไร
ตอนนี้สังเกตเห็นว่า iterating กว่าทั้งหมด สตริงที่เป็นไปได้อาจจะ
ใช้เวลาสักครู่
ลองดูว่าจริง ที่ใช้เวลานาน
>> ขอให้แตก
ดีโอ๊ะ - มันพูดว่าไม่ได้กำหนด อ้างอิงไปยังห้องใต้ดิน
ดังนั้นจำ, p สำหรับชุดข้อมูลจำเพาะและ นอกจากนี้ยังมีหน้าคนสำหรับฝังศพใต้ถุนโบสถ์ที่เรา
จำเป็นต้องเชื่อมโยงในห้องใต้ดิน
ตอนนี้เริ่มต้นทำคำสั่ง ไม่ทราบว่าคุณ
ต้องการที่จะใช้ฟังก์ชั่นที่
>> เพื่อขอคัดลอกคำสั่งลูกค้ารายนี้ และเพียงแค่เพิ่มจนถึงที่สุด
ของมันฝังศพใต้ถุนโบสถ์เชื่อมโยง
ตอนนี้มันคอมไพล์
เพื่อขอทำงานแตกเมื่อได้รับ สายการเข้ารหัส -
เพื่อให้ซีซาร์
เพื่อให้ได้อย่างรวดเร็วสวย
>> ขอให้สังเกตว่านี้สิ้นสุดเมื่อวันที่ 13
ดีซีซาร์รหัสผ่านที่เข้ารหัส เกิดขึ้นเป็น 13
ดังนั้นลองใช้รหัสผ่านอีก
ลองมา Hirschhorn ของการเข้ารหัส รหัสผ่านและพยายามที่แตกว่า
>> ดังนั้นเราได้สังเกตเห็นถึงแล้ว สามตัวอักษร
และเรากำลัง iterating กว่าเป็นไปได้ทั้งหมด สายสามตัวอักษร
นั่นหมายความว่าเราได้แล้วเสร็จ iterating กว่าหนึ่งทั้งหมดเป็นไปได้และ
สองสตริงตัวอักษร
ตอนนี้ก็มีลักษณะเช่นนี้เป็นไปได้ ใช้เวลาสักครู่ก่อนที่เราจะไปถึง
สายสี่ตัวอักษร
มันอาจใช้เวลาไม่กี่นาที
>> มันใช้เวลาไม่กี่นาที
เราอยู่สายสี่ตัวอักษร
แต่ตอนนี้เราจำเป็นต้องย้ำกว่าทั้งหมด สายสี่ตัวอักษรที่เป็นไปได้ซึ่ง
ที่อาจต้องใช้เวลาอาจจะ 10 นาที
และแล้วเมื่อเราไปถึงห้าตัวอักษร สตริงเราต้องย้ำกว่าทั้งหมด
ของคนเหล่านั้นซึ่งอาจ ใช้เวลาสองสามชั่วโมง
และเราจำเป็นต้องย้ำกว่าเป็นไปได้ทั้งหมด หกตัวอักษรสตริงซึ่ง
อาจใช้เวลาสองสามวันและอื่น ๆ
>> ดังนั้นมันอาจจะใช้เวลานานมากที่อาจเกิดขึ้น เวลาที่จะย้ำกว่าเป็นไปได้ทั้งหมด
แปดตัวอักษรและสตริงน้อยลง
ดังนั้นสังเกตเห็นว่าเรื่องนี้ไม่จำเป็นต้องเป็น อัลกอริทึมที่มีประสิทธิภาพมากสำหรับการค้นหา
รหัสผ่าน
คุณอาจจะคิดว่ามี วิธีที่ดีกว่านี้
ตัวอย่างเช่น ZYX รหัสผ่าน! 32ab อาจจะไม่ใช้รหัสผ่านที่พบมาก
ในขณะที่รหัสผ่านคือ 12345 อาจมากขึ้นทั่วไป
>> ดังนั้นวิธีหนึ่งในการพยายามที่จะหารหัสผ่าน ได้อย่างรวดเร็วคือการเพียงแค่มอง
ที่รหัสผ่านที่จะมีอยู่มาก
ดังนั้นสำหรับตัวอย่างเช่นเราสามารถพยายามที่จะอ่านคำ จากพจนานุกรมและพยายามทุก
คำพูดเหล่านั้นเป็นที่คาดเดารหัสผ่านของเรา
ตอนนี้อาจจะใช้รหัสผ่าน ไม่ง่ายที่
บางทีผู้ใช้ก็ค่อนข้างฉลาด และพยายามที่ท้ายตัวเลข
ท้ายของคำ
>> ดังนั้นบางทีรหัสผ่านของพวกเขา password1
เพื่อให้คุณสามารถลอง iterating กว่าทุกคำ ในพจนานุกรมที่มีหนึ่ง
ต่อท้ายของมัน
และแล้วบางทีหลังจากทำที่คุณจะ สองตัวต่อท้ายไปยังจุดสิ้นสุดของมัน
>> หรือบางทีผู้ใช้จะพยายามที่จะเป็นได้ ฉลาดมากขึ้นและพวกเขาต้องการของพวกเขา
รหัสผ่านจะเป็น "แฮกเกอร์" แต่พวกเขากำลัง ไปแทนที่ทุกกรณีของ e
กับสาม
เพื่อให้คุณสามารถทำเช่นนี้เกินไป
ย้ำกว่าทุกคำในพจนานุกรม แต่แทนที่ตัวอักษรที่
มีลักษณะเหมือนตัวเลขกับตัวเลขเหล่านั้น
>> ดังนั้นวิธีนี้คุณอาจจะจับได้มากยิ่งขึ้น รหัสผ่านที่รักกัน
แต่ในท้ายที่สุดเพียงวิธีเดียวที่คุณสามารถทำได้ จับรหัสผ่านทั้งหมดคือการเดรัจฉาน
บังคับให้ย้ำกว่าทั้งหมด สตริงที่เป็นไปได้
ดังนั้นในที่สุดคุณต้องย้ำ กว่าสตริงทั้งหมดจากตัวละครตัวหนึ่งไป
แปดตัวอักษรซึ่งอาจต้องใช้เวลา เป็นเวลานานมาก แต่คุณต้องทำมัน
>> ชื่อของฉันคือร็อบโบว์
และนี่คือโปรแกรม