Introduction to Hex-Editing
Required Tools:
Hex Editor: Hex Worshop http://www.bpsoft.com/downloads/altsites.j...le=hw32v500.msi
Disassembler: W32Dasm
Documentation Journal: Win32API
Download Test File: hello.exe
ควรอ่าน เรื่องปรับพื้นฐานก่อนแคร็ก ภาค 1 ก่อนที่นี่
http://citecclub.org/forum/index.php?showt...amp;#entry42503
Credited: : AjnabiZ
***************************************
Introduction
--------------------------------------------------------------------
คนเขียนโปรแกรมที่ใช้ภาษา C/C++ สร้างโปรแกรมขึ้นมาสักชิ้น มักจะมีขบวนการทำงานของขั้นตอนต่างๆ
ค่อนข้างยาวและเป็นวัฎจักร เช่น code, compile, execute, debug, correct, compile, execute, debug, เป็นต้น คนเขียนโปรแกรมจะเปลี่ยน source code ของโปรแกรมประยุกต์ มีการ compile เป็นพวก
executable file ( หรืออื่นๆเช่น พวก DLL file หรือ ActiveX control )
และไม่ได้หมายความว่าเราจะเปลี่ยนแปลงมันไม่ได้ โดยทั่วไปเราสามารถทำได้ สิ่งหนึ่งที่ยากคือการ
กำหนดการเชื่อมต่อเข้ากับภาระกิจ(the difficulty associated with the task- เช่นการทำ reverse code
engineers) ซึ่งต้องใช้ความพยายามอย่างมากในการที่จะทำให้ hello.exe กลายมาเป็น a word
processing application ที่ง่ายๆไม่ซับซ้อนแบบ Notepad มันจะเป็นไปได้หรือ? มีใครพร้อมที่จะทดลอง
ทำบ้าง ?
ในการเริ่มต้นเรียนจากสิ่งง่ายๆเพื่อให้คุ้นเคยการใช้งานเครื่องมือ แน่ะนำให้ใช้ HexWorkshop 4.2 แม้นว่า
จะมี hex-editors หลายตัวที่ทำได้แต่แนะนำให้ใช้ เครื่องมือตามที่กล่าวเพื่อให้มันใจว่าจะได้ผลอ้างอิงที่
เหมือนกันทุกบรรทัด และไม่แนะนำให้ใช้ HIEW ในบทเรียนนี้ มาเริ่มกันเลย
[hide=25]-------------------------------------------------------------------
จากตอนที่แล้วได้ทำการอธิบายเกี่ยวกัยการใช้งาน W32DAsm กับ hello.exe และการอ่านว่าโปรแกรมนี้
ทำงานอย่างไร ไปแล้ว โปรแกรมนี้เป็นโปรแกรมสร้าง MessageBox
ได้มีการอธิบายการใช้งาน W32DAsm เพื่อเรียนรู้เกี่ยวกับ โปรแกรมที่นำเข้าหรือส่งออก การอ้างอิงถึง
อักขระ(String References)ซึ่งเราพบว่า hello.exe มี 2 imports Message-BoxA กับ ExitProcess
เพื่อให้หน้าที่ทั้ง 2 ส่วนที่อิมปอร์ตทำงานใด้อย่างถูกต้องต้องมีการใช้ ตัวแปรค่าต่างๆ โดยอ้างอิงจาก
WinAPI reference
ข้อควรจำ: ข้อมูลจากคำสัง push จะบรรจุค่าตัวแปรของ API ซึ่งจะสั่งการไปที่ stack ยกตัวอย่างเช่น
สังเกตุคำว่า “Hello There!…” ที่ถูกเก็บอยู่บนหน่วยความจำที่ตำแหน่ง 0x403000 และส่วนของ title
“Disassemble me!!!”ที่ถูกเก็บที่ตำแหน่ง 0x40302e. เราจะใช้ข้อมูลนี้ทำการเปลี่ยนแปลงมัน
จำไว้ว่า: การเปลี่ยนข้อความที่ปรากฏอยู่ในโปรแกรมไม่ใช่ง่ายนัก มี 2-3 อย่างที่ต้องทำและมันอยู่ที่ไหน
อย่างไรก็ตาม วิธีที่ง่ายที่สุดคือการใช้ hex-editors.
Getting started with Hex-editing
------------------------------------------------------------------------------
เริ่มด้วยการHex-editing
ผมอนุมานเอาว่าคุณได้ทำการติดตั้ง HexWorkshop แล้วนะ โดยที่ระหว่าการติดตั้งได้ทำการรวมมันเข้ากับ
shell และสามารถ เลือก Hex edit เพือทำการเปิดไฟล์โดยการคลิกขวาที่ไฟล์ เพือเลือกเปิดไฟล์บน
HexWorkshop ให้เลือกเปิดไฟล์ hellow.exe เลื่อน Scroll down ให้ได้ดังภาพ
hellow.exe มีขนาดประมาณ 2 K ซึ่งเล็กมากแต่ก็ยังมีพื้นที่สูญเปล่าที่บรรจุด้วยค่า ศูนย์(zero)อยู่เป็น
จำนวนมาก ค่านี้บอกอะไรเราบ้าง? ที่จริงแล้วค่าศูนย์เป็นส่วนของ Win32 executable นั้นเอง
โดยแต่ละส่วนมีค่าของขนาดน้อยที่สุดที่กำหนดไว้ ในกรณีตัวอย่างนี้ แต่ละส่วนคือ 0x200 bytes (หรือ 512 bytes ในเลขฐาน 10) ถ้าโปรแกรมมีขนาดน้อยกว่าขนาดดังกล่าวมากๆ มันก็จะใส่ค่าศูนย์เข้าไปเพื่อให้ได้ขนาดตามที่กำหนดในแต่ละส่วนนั้นเอง
แล้วเรารู้ได้อย่างไร ? มันมีเหตุผลง่ายๆอยู่ ลองกลับไปดู disassembly เปิดมันด้วย W32DAsm เมือเราทำ
การ saved W32DAsm project ( เซฟมันได้มัย? )
จำไว้ว่า: .alf file จะใช้ได้ดีที่เดียวในการตัดและวางส่วนต่างๆของโค็ทโปรแกรม
ตอนต้นๆของ disassembly จะพบข้อมูลดังนี้
Disassembly of File: C:\hello.exe
Code Offset = 00000400, Code Size = 00000200
Data Offset = 00000800, Data Size = 00000200
Number of Objects = 0003 (dec), Imagebase = 00400000h
Object01: .text RVA: 00001000 Offset: 00000400 Size: 00000200 Flags:60000020
Object02: .rdata RVA: 00002000 Offset: 00000600 Size: 00000200 Flags:40000040
Object03: .data RVA: 00003000 Offset: 00000800 Size: 00000200 Flags:C0000040
ตามนี้จะเห็น Code Section ของ .exe เริ่มที่ ไบต์ที่ 0x0400 (1024) และที่มีขนาด 0x0200(512)bytes
The Data Section เริ่มที่ ไบต์ที่ 0x0800 (2048) และที่มีขนาด 0x0200 (512)bytes
ตามรูปที่ตำแหน่งบนหน่วยความจำที่ 0x00400000เป็นที่ที่โหลดโปรแกรมและได้รับการสนันสนุน
จากWindows







Reply With Quote
