กรณีศึกษา*ทูโฮ 4:เรื่องโลตัสแลนด์

การฟื้นฟู TH04ของ
รูปแบบกระสุน

แหวนของกระสุนเริ่มต้นด้วยการคำนวณมุมสั้น ใช้ REA รวจสอบฟงกชันดอสดั้งเดิมจากนั้นปฏิบัติตามคำแนะนำของฟงกชันดอสที่สามารถอ่านได

PC-98 ·ดอส 16 บิต·ซีดีและแอสเซมบลี

ดู TH04 การฟื้นฟู

จากคำแนะนำเดิมไปยังแหล่งที่มาที่ตรวจสอบ

  1. 01*เกมเดิมกเขาเอ็กเซสร PC-98 ปฏิบัติการและผู้ช่วยกระสุนของมุม
  2. 02·ตรวจสอบด้วย REAคำแนะนำ+อ้างอิงตรวจสอบโค้ดดอสโหลดและอ่านการคำนวณมุมจากปฏิบัติการ
  3. 03·อ่านซี++พื้นที่จุดมุ่งหมาย ro หมุนเชื่อมต่อการดำเนินการแต่ละครั้งเพื่อการฟื้นฟูการบำรุงรักษา
  4. 04·ตรวจสอบแหล่งที่มา2,139 ไบต์ที่ตรงกันตรวจสอบคอมไพเลอร์ที่บันทึกไว้ครอบคลุมรหัสรุ่นกระสุนที่ประกอบด้วยตัวช่วยนี้
REA ส่งกลับรหัสต้นฉบับและหลักฐานการวิเคราะห์ ร TH04 โครงการอุปกรณ์การบำรุงรักษาแหล่งที่มาและคอมไพเลอร์ตรวจสอบ

วิธีแหวนเล็งไปที่ผู้เล่น

การโจมตีของเอลลี่ขอแหวนเล็งที่มีจำนวนเริ่มต้น 16 หนึ่งผู้ช่วยคำนวณทิศทางของกระสุนแต่ละ แหวนเดียวกันสามารถเผชิญกับทิศทางที่คงที่หรือหันไปทางผู้เล่น

ตัวแทนการเข้ารหัสของคุณ

ใช้ REA เพื่อหาวิธีการ TH04 สร้างแหวนของกระสุนและมีจุดมุ่งหมายที่ผู้เล่น อธิบายการคำนวณและแสดงรหัส

พร้อมท์ตัวอย่างด้วยการเช็คเอาท์ที่ปฏิบัติการและการฟื้นฟูเดิมที่มีอยู่ภายใน

TH04 เก็บหมุนตามเข็มนาฬิกาเต็มรูปแบบใน 256 หน่วยมุม สำหรับ 16 กระสุน,แต่ละดัชนีเพิ่ม 16 หน่วย: 0, 16, 32, …, 240. การเพิ่มทิศทางของผู้เล่นหมุนตำแหน่งเหล่านั้นเข้าด้วยกัน

สองแผนภาพของแหวน 16 กระสุน แหวนคงเริ่มต้นที่มุมศูนย์ การเพิ่มทิศทางของผู้เล่น 40 หมุนทุกทิศทางโดยจำนวนเดียวกัน;ไฮไลต์จุดกระสุนแรกที่มีต่อผู้เ ทั้งคู่มีระยะห่าง 16 หน่วยหรือ 22.5 องศา
ภาพประกอบของคณิตศาสตร์มุมกู้คืนสำหรับการนับ 16 ทิศทางผู้เล่น 40 และการหมุนแม่แบบ 0 เปิดรูป

แม่แบบการยิงในแหล่งที่มาที่กู้คืน

การโจมตีแหวนของเอลลี่*ที่มาตัดตอนมา
bullet_template.angle = 0;
bullet_template.group = BG_RING_AIMED;
bullet_template.count = 16;
bullet_template_tune();

เส้นเหล่านี้เลือกรูปแบบก่อนที่จะปรับความยากลำบากและประสิทธิภาพการทำงาน อ่านแหล่งที่มาของการโจมตี.

อะไรนะ REA การคืนสินค้า

เราตรวจสอบ bullet_velocity_and_angle_set() ฟังก์ชั่นที่กำหนดความเร็วและมุมของกระสุน REA ส่งคืนคำแนะนำของรหัสปลอมและการอ้างอิง สามส่วนของผลลัพธ์นั้นอธิบายรูปแบบ

  1. ตรวจสอบภาพก่อนอ่านรหัส

    เจ้าหน้าที่→ REA
    open_binary
    {"path": "MAIN.EXE"}
    
    inspect_native_load_image
    {}
    REA agent ตัวแทน·ช่องที่เลือกไว้
    status: "verified"
    format: "dos-mz"
    load_segment: 4096
    header_bytes: 6144
    module_bytes: 150114

    ตรวจสอบผูกโค้ดที่โหลดและระเบียนการย้ายไปยังปฏิบัติการที่ให้มา เส้นทางด้านบนจะสั้นลงสำหรับการแสดงผล

  2. อ่านแหวนคูณและหาร

    เจ้าหน้าที่→ REA · analyze_function
    {"procedure": "0x2cfc8"}
    REA →ตัวแทน*ตัดตอนการเรียนการสอน
    0x2d0eb: MOV AX, SI
    0x2d0ed: SHL AX, 0x8
    0x2d0f0: MOV DL, byte ptr [0x53af]
    0x2d0f9: IDIV BX

    SI ถือดัชนีกระสุน กะคูณด้วย 256 แล้วส่วนที่ใช้นับอ่านจาก DS:53AF. ชื่อแหล่งที่มาที่เก็บรักษาไว้ bullet_template.count. ลำดับที่สมบูรณ์ปรากฏด้านล่าง

  3. หาที่รูปแบบหันไปทางผู้เล่น

    ผลฟังก์ชั่นเดียวกัน*ตัดตอนมาจุดมุ่งหมาย
    0x2d190: SUB AX, word ptr [0x53a6]
    0x2d198: SUB AX, word ptr [0x53a4]
    0x2d19d: CALLF 0x1000:1da8
    0x2d1a2: ADD word ptr [BP + -0x2], AX
    การบำรุงรักษาที่สอดคล้องกันค++
    group_angle_offset += iatan2(
      player_pos.cur.y - bullet_template.origin.y,
      player_pos.cur.x - bullet_template.origin.x
    );

    การเรียนการสอนดำเนินการเปิดเผยความแตกต่างสองประสานงานและผู้ช่วยทิศทาง มูลค่าผลตอบแทนของมันจะถูกเพิ่มในมุมแหวนสัมพัทธ์ ชื่อแหล่งที่มาทำให้ที่อยู่เหล่านั้นสามารถอ่านได้; REA ช่วยให้ตัวแทนตรวจสอบการดำเนินงานเดิมที่อยู่เบื้องหลังพวกเขา

จากการชุมนุมที่จะอ่านค++

เลือกขั้นตอนเพื่อให้ตรงกับคำแนะนำเดิมกับการคำนวณมุม สรุปนี้เป็นไปตามเส้นทางที่มุ่งแหวน;แหล่งที่มาเต็มรูปแบบยังจัดการแพร่กระจาย,กองและรูป

REA *คำแนะนำเดิม 16 บิต
0x2cfcf: MOV SI, word ptr [BP + 0x4]
0x2d0eb: MOV AX, SI
0x2d0ed: SHL AX, 0x8
0x2d0f0: MOV DL, byte ptr [0x53af]
0x2d0f4: MOV DH, 0x0
0x2d0f6: PUSH DX
0x2d0f7: CWD
0x2d0f8: POP BX
0x2d0f9: IDIV BX
0x2d0fb: MOV word ptr [BP + -0x2], AX
0x2d18d: MOV AX, [0x4650]
0x2d190: SUB AX, word ptr [0x53a6]
0x2d194: PUSH AX
0x2d195: MOV AX, [0x464e]
0x2d198: SUB AX, word ptr [0x53a4]
0x2d19c: PUSH AX
0x2d19d: CALLF 0x1000:1da8
0x2d1a2: ADD word ptr [BP + -0x2], AX
0x2d1b9: MOV AL, byte ptr [BP + -0x2]
0x2d1bc: ADD AL, byte ptr [0x53ad]
0x2d1c0: MOV [0xbcc8], AL
Reอ่านได้ค*สรุปเล็งแหวน
unsigned char aimed_ring_angle(
    int index, int count,
    int player_direction,
    unsigned char rotation)
{
    int angle = index;
    angle = (angle * 256) / count;
    angle += player_direction;
    angle += rotation;
    return (unsigned char)angle;
}

01*อ่านดัชนีกระสุน อาร์กิวเมนต์สแต็คถูกโหลดลงใน SI. ในวงแหวนกระสุน 16 ดัชนีสมาชิกนี้ทำงานจาก 0 ถึง 15

การชุมนุมเลือกสาขาเล็งแหวน,การคำนวณจุดมุ่งหมายและเก็บสุดท้าย บทความนี้ไม่มีการอ้างอิงจากเอกสารอ้างอิงหรือแหล่งข้อมูลโปรดช่วยพัฒนาบทความนี้โด ตรวจสอบคอมไพเลอร์ด้านล่างนำไปใช้กับแหล่งที่มาของการบำรุงรักษาในโครงการที่เชื่

อ่านแหวนที่เก็บรักษาไว้และจุดมุ่งหมาย
แมโครแหวน · TH04 สาขาที่ตัดตอนมา
angle_offset = (i * BULLET_ANGLE_FULL_TURN) / count;
if (i >= (count - 1)) {
    group_complete = true;
}
goto aim_or_no_aim;
มุมและความเร็ว*ข้อความที่ตัดตอนมา
aim:
    group_angle_offset += iatan2(
        (player_pos.cur.y - bullet_template.origin.y),
        (player_pos.cur.x - bullet_template.origin.x)
    );

no_aim:
    vector2_near(
        bullet_template.velocity,
        (group_angle_offset + bullet_template.angle),
        speed
    );
    bullet_spawn_angle = (group_angle_offset + bullet_template.angle);

แมโครแหวน · จุดมุ่งหมายและแหล่งที่มาของความเร็ว · การแสดงมุม

การตรวจสอบแหล่งที่มาที่บำรุงรักษา

ร TH04 การตรวจสอบการบันทึกของโครงการรวบรวมรหัสรุ่นกระสุน,รวมทั้งผู้ช่วยนี้,กับเทอร์โบตรึงค 44.0

2,139 ไบต์ที่ตรงกัน

รหัสรุ่นกระสุนที่คอมไพล์ตรงกับส่วน 2,139 ไบต์ของปฏิบัติการเดิม

สองสร้างสะอาด

สองรุ่นที่แยกต่างหากผลิตไบต์ที่ตรงกันเดียวกัน แฮชอินพุตที่บันทึกไว้ตรงกับแหล่งที่มาที่เก็บรักษาไว้ที่แสดงที่นี่

บันทึกใน 3 ตุลาคม 2026. อ่านการตรวจสอบคอมไพเลอร์.

อัตลักษณ์เป้าหมายและขอบเขตการวิเคราะห์
เป้าหมายเดิม MAIN.EXE,156,258 ไบต์,เมกะไบต์
รายการผู้ช่วย 0x2cfc8 ใน REAภาพโหลดของ
ชดเชยแฟ้มต้นฉบับ 0x1e7c8,ส่งคืนโดย address_to_file_offset
การตรวจสอบรหัสที่บันทึกไว้ REA4.1.0·7 ตุลาคม 2026

ตรวจสอบคอมไพเลอร์ครอบคลุมส่วนโค้ดเพิ่มกระสุนที่สมบูรณ์รวมถึงตัวช่วยนี้ พวกเขายังเปรียบเทียบการมีส่วนร่วมของแผนที่และการย้ายที่ทับซ้อนกัน

REA ตรวจสอบภาพโหลดแบบคงที่ที่ส่วนโหลด 0x1000. ที่อยู่ของมันอธิบายภาพการวิเคราะห์นั้น ผลฟังก์ชันรายงาน 503 ไบต์ร่างกายในสองช่วงข้ามช่วง 517 ไบต์;คำแนะนำที่เลือกข้างต้นอยู่ในช่วง

ชื่อแหล่งที่มาและการตรวจสอบคอมไพเลอร์มาจาก TH04 ด่านตรวจ 0d72e980. การสังเกตการฟื้นฟูก่อนหน้านี้ใช้สคริปต์การวิเคราะห์ของตัวเองของโครงการ;หน้านี้จะเพิ่ REA การตรวจสอบของเป้าหมายเดิมเดียวกัน ตัวตนของเกมที่ให้มาถูกตรึงโดยที่ประจักษ์พื้นที่เก็บข้อมูลที่มีแหล่งที่มาที่เก่าแก่การถ่ายโอน

รูปที่แสดงให้เห็นถึงการคำนวณมุม การควบคุมเต็มรูปแบบเกมระยะเวลาและ PC-98 รวจสอบรันไทม์แยกต่างหากในโครงการฟื้นฟู

เต็ม TH04 การฟื้นฟู

งการสร้างเกมสี่ผลิตภัณฑ์ดอสจากการบำรุงรักษาซีซีและการชุมนุม นอกเหนือจากการสร้างกระสุน,แหล่งที่มาครอบคลุมขั้นตอนผู้บังคับบัญชา,การแสดงผล,การป้อ

สำรวจ TH04 ที่เก็บข้อมูล

ด้านบน