- 55
- รักษาฟังก์ชัน C
- 45,380
- เปรียบเทียบกับรหัสเดิม
- 33
- ฟังก์ชั่นที่มีการจับคู่ไบต์ที่รวบรวมไว้
ด่านโครงการ:7 ตุลาคม 2026 บัญชีแยกประเภท · ความคุ้มครองการทดสอบ
โครงการเพื่อให้ห่างไกล
กู้คืนรหัสครอบคลุมคณะกรรมการและการจัดการทรัพยากรฮิตอิฐภาพเคลื่อนไหวอนุภาคแ สร้างปัจจุบันให้สาธารณูปโภคการตรวจสอบและห้องสมุดการวิเคราะห์ ทำงานในเกมที่สามารถเล่นได้อย่างต่อเนื่องกับลูกและพายฟิสิกส์,การจัดการพลังงานขึ้นแ Windows บูรณาการ
การหาการคำนวณตำแหน่งเสียงซ้าย/ขวา
เมื่ออิฐถูกตีตำแหน่งแนวนอนของมันจะถูกส่งผ่านไปยังรหัสเสียง การตรวจสอบที่จำเป็นในการกู้คืนวิธีการที่หน้าจอประสานงานจะกลายเป็นค่าแพนซ้าย/ขว
ใช้ REA เพื่อหาวิธีการ DX-Ball คำนวณเสียงแพน อธิบายการคำนวณและแสดงรหัส
พร้อมท์ตัวอย่างสำหรับตัวแทนการเขียนโค้ดของคุณพร้อมใช้งานแบบโลคัล การสืบสวนด้านล่างแสดงให้เห็นว่า REA แบบสอบถามและหลักฐานที่อยู่เบื้องหลังคำตอบ
เอเจนต์ใช้ REA ตรวจสอบฟังก์ชัน ติดตามฟังก์ชันจัดการอิฐที่เรียกมัน และอ่านค่าคงที่จากไฟล์โปรแกรม ผลลัพธ์เหล่านี้ระบุอินพุตและขั้นตอนคำนวณที่ใช้เขียนฟังก์ชัน C ด้านล่าง
ผลการวิเคราะห์ครั้งแรกสำหรับฟังก์ชั่นสำหรับ 0x406400 รวมรหัสปลอมประกาศ FUN_00406400(void) และโทร __ftol(). มุมมองการเรียนการสอนแสดงให้เห็นการป้อนข้อมูลสแต็คและการดำเนินงานจุดลอยตัว ความขัดแย้งนั้นทำให้ตัวแทนมีเหตุผลที่ชัดเจนที่จะสืบสวนต่อไป
มุมมองแยกคอมไพเลอร์แรก
longlong FUN_00406400(void)
{
longlong lVar1;
lVar1 = __ftol();
return lVar1;
}
ผลลัพธ์แสดงการเรียกร้องการแปลง อ่านคำแนะนำด้านล่างแสดงให้เห็นการป้อนข้อมูลและการให้อาหารการคำนวณที่เรียก
สามคำถามตอบผ่าน REA
-
กู้คืนข้อมูลที่ขาดหายไป
เจ้าหน้าที่→ REA ·analyze_function{"procedure": "0x406400"}REA →ตัวแทน*ตัดตอนการเรียนการสอน0x406409: MOV EAX, dword ptr [EBP + 0x8] 0x40640c: MOV dword ptr [EBP + -0xc], EAX 0x40640f: FILD dword ptr [EBP + -0xc]นะนำควบคู่ไปกับรหัสปลอมและฟังก์ชั่นการเรียก ที่นี่,
[EBP+8]แสดงการป้อนข้อมูลจำนวนเต็มที่ขาดหายไปจากมุมมองแยกคอมไพเลอร์ -
ติดตามฟังก์ชันที่เรียกที่จะเข้าใจการป้อนข้อมูล
เจ้าหน้าที่→ REA ·analyze_function{"procedure": "0x411f40"}REA →ตัวแทน*ข้อความที่ตัดตอนมาโทร0x411f5b: ADD EAX, 0x14 0x411f5e: PUSH EAX 0x411f5f: CALL 0x00406400REA ระบุสายนี้ในผลแรก คำแนะนำก่อนหน้านี้ขนาด
tile_xโดย 30;การเพิ่ม 20 จะช่วยให้การประสานงานหน้าจออิฐ,20 + 30 × tile_x. -
อ่านค่าที่อยู่เบื้องหลังที่อยู่หน่วยความจำ
เจ้าหน้าที่→ REA *สองread_bytesคำขอ{"address": "0x420068", "length": 16} {"address": "0x4210a0", "length": 8}REAผลไบต์*ถอดรหัสเป็นคู่000000000000f93f → 1.5625 0000000000407f40 → 500.0 000000000000f03f → 1.0ไบต์ที่ส่งคืนจะสร้างค่าคงที่ทางคณิตศาสตร์ทั้งสองและขนาดแพนเริ่มต้น ตัวแทนตอนนี้มีค่าที่จำเป็นสำหรับนิพจน์ค
จาก REAการค้นพบของค
ทำตามห้าขั้นตอนด้านล่าง. การเลือกแต่ละไฮไลท์คำแนะนำเดิมและสายคที่พวกเขาแจ้ง
0x406409: MOV EAX, dword ptr [EBP + 0x8]
0x40640c: MOV dword ptr [EBP + -0xc], EAX
0x40640f: FILD dword ptr [EBP + -0xc]
0x406415: FMUL double ptr [0x00420068]
0x40641e: FSUB double ptr [0x00420070]
0x406427: FMUL double ptr [0x004210a0]
0x406430: CALL 0x0041678c
0x40643e: RET
DxBallInt dxball_screen_pan(DxBallInt x)
{
double pan;
pan = (double)x;
pan = pan * 1.5625;
pan = pan - 500.0;
pan = pan * dxball_pan_scale;
return (DxBallInt)pan;
}
01*อ่านข้อมูล มุมมองการเรียนการสอนใน REAฟังก์ชั่นของผลการอ่าน [EBP+8] และใช้ FILD ในการโหลดจำนวนเต็ม ต่อไปนี้โทรผ่าน REA กำหนดหน้าจอพิกัดความหมายของพารามิเตอร์ค x.
02*คูณด้วย 1.5625 FMUL อ่านคู่ที่ 0x420068. ไบต์ที่ส่งคืนโดย REAของ read_bytes ถอดรหัสไปที่ 1.5625 คใช้ค่าคงที่เดียวกัน
03·ลบ 500.0. FSUB อ่านคู่ที่ 0x420070. REAของไบต์ผลถอดรหัส 500.0 ขยับศูนย์การคำนวณเพื่อประสานงานหน้าจอ 320.
04*ใช้สเกลที่เก็บไว้ ที่สอง FMUL อ่าน 0x4210a0. ที่ทั่วโลกถูกตั้งชื่อ dxball_pan_scale ในแหล่งที่มาของการบำรุงรักษา REAของไบต์ที่สองอ่านกำหนดค่าเริ่มต้นของ 1.0.
05*กลับจำนวนเต็ม เรียกฟังก์ชันที่ 0x406430 ถึง __ftol,ระบุใน REAผลของแคลลี าการปวดหลังและอาการบวม DxBallInt;เปรียบเทียบต้นฉบับ-86 เทียบตรวจสอบค่าที่ส่งคืน
ข้อความที่ตัดตอนมาประกอบเลือกป้อนข้อมูล,คณิตศาสตร์และคำแนะนำกลับมา รายการเต็มรูปแบบด้านล่างนอกจากนี้ยังมีร้านค้าแทรกแซงและการตั้งค่าฟังก์ชั่นและการ
ประกอบเต็มรูปแบบและหลักฐานสนับสนุน
0x406400: PUSH EBP
0x406401: MOV EBP, ESP
0x406403: SUB ESP, 0xc
0x406406: PUSH EBX
0x406407: PUSH ESI
0x406408: PUSH EDI
0x406409: MOV EAX, dword ptr [EBP + 0x8]
0x40640c: MOV dword ptr [EBP + -0xc], EAX
0x40640f: FILD dword ptr [EBP + -0xc]
0x406412: FST double ptr [EBP + -0x8]
0x406415: FMUL double ptr [0x00420068]
0x40641b: FST double ptr [EBP + -0x8]
0x40641e: FSUB double ptr [0x00420070]
0x406424: FST double ptr [EBP + -0x8]
0x406427: FMUL double ptr [0x004210a0]
0x40642d: FST double ptr [EBP + -0x8]
0x406430: CALL 0x0041678c
0x406435: JMP 0x0040643a
0x40643a: POP EDI
0x40643b: POP ESI
0x40643c: POP EBX
0x40643d: LEAVE
0x40643e: RET
สิ่งที่อุปกรณ์โทร
ฟังก์ชั่นอิฐตีที่ 0x411f40 เครื่องชั่งน้ำหนักของกระเบื้องประสานงานโดย 30 เพิ่ม 20 แล้วผลักดันมันก่อนที่จะเรียก:
0x411f50: MOV EAX, dword ptr [EBP + 0x8]
0x411f53: ADD EAX, EAX
0x411f55: LEA EAX, [EAX + EAX*0x2]
0x411f58: LEA EAX, [EAX + EAX*0x4]
0x411f5b: ADD EAX, 0x14
0x411f5e: PUSH EAX
0x411f5f: CALL 0x00406400
0x411f64: ADD ESP, 0x4
สิ่งที่ข้อมูลอ่านสร้าง
| ที่อยู่ | ค่า | ใช้สำหรับ |
|---|---|---|
0x420068 |
1.5625 |
คูณครั้งแรก |
0x420070 |
500.0 |
การลบ |
0x4210a0 |
1.0 ในตอนแรก |
ขนาดกระทะที่เก็บไว้ |
บันทึกด้วย REA 4.1.0 สำหรับแฮตรึง DX-Ball 1.07 เป้าหมาย บันทึกการตรวจสอบที่เชื่อมโยงเก็บรหัสหลักฐาน
การตรวจสอบฟังก์ชั่นการกู้คืน
ฟังก์ชั่นการกู้คืนผ่านการตรวจสอบสอง:ค่าส่งคืนตรงกับต้นฉบับและไบต์ที่คอมไพล์ตรงกับปฏิ
3,205 กรณีพฤติกรรม
86 และเปรียบเทียบค่าตอบแทนของมันกับซีที่เก็บรักษาไว้มันครอบคลุมทุกตำแหน่งจำนวนเต็มตั้งแต่ 0 ถึง 640 ที่ห้าเครื่องชั่งแพน:0,0.5,1,20 และ -1
63 ไบต์ที่ตรงกัน
4.0 รีเพลย์คอมไพเลอร์ตรงกับฟังก์ชันที่สมบูรณ์หลังจากใช้การย้ายที่ตรวจสอบและตรวจสอบค่า
ในระดับ 1 คำนวณคืน -500 ที่ขอบด้านซ้าย 0 ที่ศูนย์และ 500 ที่ขอบด้านขวา ส่วนถัดไปของการทำงานเสียงคือการบูรณาการค่าที่มีแบ็กเอนด์เสียงของเกม
ต่อการสืบสวน
วิธีการเดียวกันจะถูกใช้สำหรับการปรับปรุงอนุภาคคิวการระเบิดและการสร้างโบนัส:ตรวจ
เพื่อตรวจสอบฟังก์ชั่นเสียงแพนด้วยตัวคุณเองให้ทำตาม DX-Ball คำแนะนำในการติดตั้งของโครงการและจัดหาเป้าหมายเดิมที่ตรงกัน แล้วเรียกใช้:
scripts/rea function original/DXBALL.EXE 0x00406400 \
--snapshot .analysis/rea/dxball.snapshot.json --json
- DX-Ball ที่เก็บข้อมูลแหล่งที่มาปัจจุบันความคืบหน้าและการตั้งค่าท้องถิ่น
- REA เวิร์กโฟลว์การวิเคราะห์ทำตามการคำนวณ,แล้วใช้วิธีการเดียวกันกับไบนารีของคุณเอง.
- อนุภาคและการผลิตโบนัสการสืบสวนขนาดใหญ่ในรัฐคิวและพิกเซลเขียน