** เป็นบทความที่ผมเขียนให้ Magazine เกี่ยวกับ Hacking แห่งนึงเมื่อ 3 ถึง 4 ปีที่แล้วแต่บทความไม่ได้ถูกเผยแพร่ผมเลยนำมาลงที่ Blog ใหม่ของผมครับ **
สวัสดีครับหลังจากฉบับที่แล้ว อาจารย์ กรินทร์ สุมังคะโยธิน ได้เกริ่นเกี่ยวกับเรื่องราวของ Reverse Engineering , Debugger , Disassembly กันไปแล้ว ในฉบับนี้ผมรับหน้าที่ต่อผมจะลงถึงขั้น Technical ในการ Crack เบื้องต้นและวิธีป้องกันในเบื้องต้น เพื่อชี้ให้เห็นว่าโปรแกรมที่สร้างขึ้นมาโดยไม่ได้ป้องกันอะไรเลยนั้นจะถูก Crack ได้ง่ายแค่ไหนครับ ^^
Crack , Keygen คำเหล่านี้ผมว่าหลายๆท่านคงคุ้นเคยกันเป็นอย่างดี และแน่นอนว่าท่านที่ทำงานในด้านการพัฒนาโปรแกรมขึ้นมาเพื่อขายนั้นคงจะไม่ชอบใจแน่ถ้ามี Crack หรือ Keygen ของโปรแกรมท่าน ให้ดาวน์โหลดตามเว็บทั่วไปหรือตามเว็บ BitTorrent ทีนี้แล้วจะทำยังไงดีละถึงจะไม่เกิดเหตุการณ์นี้ขึ้นกับท่าน มีคนคนหนึ่งเคยกล่าวไว้ว่า One who knows the enemy and knows himself will not be in danger in a hundred battles หรือแปลเป็นไทยคือ รู้เขารู้เรารบร้อยครั้งชนะร้อยครั้งนั้นเอง(ฮ่า ขอใช้สำนวนนิสนึง ^^) ทีนี้เราจะมาเริ่มจากรู้เขาก่อนว่าเหล่า Cracker นั้นใช้หลักการอย่างไรในการ Crack โปรแกรม และใช้ Tools อะไรบ้าง ในฉบับนี้จะเอามาแฉซะให้หมด (เอิ๊กๆ)
1.Tools ที่เหล่า Crackerใช้ Crack โปรแกรมนั้นในเบื้องต้นผมจะแนะนำ Tools ที่เอาไว้ Disassembly ได้แก่ OllyDbg , W32DSM89 , Softice เป็นต้น
2.หลักการที่เหล่า Cracker ใช้ในการ Crack โปรแกรมนั้น เริ่มจากการ Disassembly หรือการทำให้โปรแกรมนั้นกลับไปเป็นภาษา Assembly เพื่อดูวิธีการและขั้นตอนการทำงานของโปรแกรมเปรียบเทียบเหมือนกับสูตรส้มตำของ อาจารย์ กรินทร์ ฉบับที่แล้ว เมื่อ Disassembly แล้วหลังจากนั้นเหล่า Cracker ก็จะหาจุดที่ต้องการแก้ไขโปรแกรมโดยในเบื้องต้นอาจจะแก้เพื่อ Bypass ระบบตรวจสอบ Serial ให้ข้ามขั้นตอนการตรวจสอบไปซะ! ผลก็คือไม่ว่าเราจะกรอก Serial อะไรลงเป็นก็จะข้ามไปทำในส่วนที่ถูกต้อง เอาละสิบปากว่าไม่เท่าตาเห็นเราจะมาลองทำ Lab กันเลย (เนื่องจากการ Crack โปรแกรมนั้นจะต้องใช้ความรู้พื้นฐานภาษา Assembly ผมจะยกตัวอย่างง่ายๆ)
ตัวอย่างการ Crack (การ Crack โปรแกรมที่มีลิขสิทธิ์ผิดกฏหมายตาม พรบ. คอมพิวเตอร์)
เครื่องมือที่ใช้ OllyDbg
ความรู้ที่ต้องมี ควรมีความรู้พื้น Assembly สักนิสนึงครับ ^^
โปรแกรมที่ถูก Crack ในที่นี้เป็นโปรแกรมที่เขียนขึ้นมาด้วย Visual C++ ไม่ได้ป้องกันใดๆโดยเป็นโปรแกรมที่สร้างขึ้นไว้เพื่อฝึก Crack ไม่ใช่โปรแกรมชาวบ้านที่มีลิขสิทธ์นะครับเดี๋ยวงานเข้าฮ่าๆๆ (ถ้าท่านเขียนโปรแกรมขึ้นมาโดยไม่ได้ป้องกันใดๆสภาพก็จะไม่ต่างจากโปรแกรมที่โดน Crack นี้)
1.เปิดโปรแกรม OllyDbg ขึ้นมา แล้ว Open โปรแกรมที่จะ Crack จะได้ลักษณะตามรูป
จะเห็นว่าโปรแกรมถูก Disassembly ให้อยู่ในรูปภาษาเครื่องแล้วทีนี้เหล่า Cracker ก็จะหาจุดที่พวกเขาจะแก้ไขเพื่อให้โปรแกรมเป็นไปตามเขาต้องการ หึๆ
2.เปิดโปรแกรมที่จะ Crack ขึ้นมาเพื่อดูว่ารูปแบบการป้องกันเป็นยังไง
เมื่อเราเปิดโปรแกรมขึ้นมาแล้วลองใส่ Serial มั่วๆลงไป มันก็ตะโกนตอบมาว่า เฮ้ยคุณใส่ผิดลองใส่ใหม่นะ
เราก็เอาสิ่งที่โปรแกรมมันร้องตอบนี่แระไปหา Address
3.หา Address โดยคลิกขวา > Search for > All referenced text strings
จะเห็นข้อความที่มันตะโกนใส่เราเมื่อกี้ คอลัมน์ทางซ้ายสุดคือ Address ดับเบิ้ลคลิกเพื่อเปิด Address นี้ขึ้นมาจะได้หน้าตาตามรูป
เมื่อเรามองสูงขึ้นมาหน่อยจะเห็นข้อความ “Good job cracker! Now write a keygen and a tutorial.” นี่แหละคือสิ่งที่เหล่า Cracker ต้องการให้มันแสดงขึ้นมา
4. ขั้นตอนการแก้ไขค่าให้มัน Bypass ระบบตรวจสอบ Serial ของโปรแกรม
หลังจากรูปเมื่อกี้เหล่า Crackerได้ Address ที่เก็บข้อความมาแล้วทีนี้เลื่อนขึ้นไปอีกนิดจะเห็นในส่วนระบบตรวจสอบ Serial และระบบ Generate Serial ตามรูป
ในแถบเทาๆที่ Address 00401320 นั้นให้ใส่ชื่อของผมลงไปแทน JNZ SHORT Test_Cra.00401347
ชื่อของผมคือ NOP (ไม่เชื่ออย่าลบหลู่นะเธอว์ เอิ๊กๆ) จะได้ลักษะตามรูป
หลังจากนั้น Run โปรแกรมขึ้นมากรอก Serial ตามเดิมจะได้ผลตามรูป
เห็นไหมว่าชื่อผมขลังจริงๆ ฮ่าๆ (จริงๆ NOP คือ No Operation เป็นคำสั่งในภาษา Assembly และใช้พื้ที่เก็บ 1 byte ในที่นี้มีสองบรรทัดเพราะว่าคำสั่ง JNZ SHORT ก่อนเราแก้ไขเป็น NOP นั้นใช้พื้นที่ 2 byte นั้นเอง)
หลังจากที่รู้วิธีที่เหล่า Cracker ใช้ในการ Crack แล้วทีนี้เราจะมาดูว่าในส่วนของเราจะป้องกันอย่างไร
สำหรับในการป้องกันนั้นผมขอแนะนำ Tools สารพัดประโยชน์ตัวหนึ่งชื่อว่า UPX หรือนามเต็มของมันก็คือ Ultimate Packer for eXecutables สำหรับเจ้าตัว UPX นั้นเป็น Open Source ด้วยนะเธอว์ ไม่พูดพร่ำทำเพลงมาทดสอบกันเลยดีกว่า ว่าของมันแน่แค่ไหนขั้นแรกเปิดเจ้าตัวโปรแกรม UPX ขึ้นมาจะได้หน้าตาตามรูป
ทีนี้เราลองมา Pack กับเจ้าโปรแกรมที่ถูก Crack เมื่อกี้กันว่าผลมันจะออกมาเป็นยังไง โดยผมจะ
Pack แบบ Original เลยละกันด้วยคำสั่ง ‘upx test_crack.exe –o test_crack_pack.exe’ จะได้ผลดังรูป
ทีนี้ผมลองเปิดเจ้าไฟล์ test_crack_pack.exe ปรากฏว่าทำงานได้ตามปกติหลังจากนั้นเราจะมาลอง Disassembly ดูว่าผลจะออกมาเป็นอย่างไรเมื่อผมเปิดเจ้าไฟล์ test_crack_pack.exe ขึ้นมาปรากฏว่ามันมีการแจ้งเตือนดังรูป
หลังจากที่ผมกด Yes ไปผมลองไปดูที่ All referenced text strings ก็พบกับความว่างปล่าวตามรูป
สุดท้ายนี้ถามว่านี้คือจุดจบของ Cracker แล้วหรือไม่ การ Pack แบบนี้ปลอดภัยมากน้อยแค่ไหน อะไรจะช่วยป้องกัน Software ของเราจากเหล่า Cracker ได้อย่างแท้จริงบนอันโหดร้ายใบนี้ โปรดติดตามตอนต่อไป สู้เขาทาเคชิ ^^
Written by MaYaSeVeN