312 words
2 minutes
คู่มือ Cheat Engine – Find an unknown initial value

สารบัญ#

เกริ่นนำ#

การค้นหาค่าเริ่มต้นที่ไม่รู้จักมักจะใช้ในการค้นหาตำแหน่งตัวละครบ่อยที่สุด เพราะว่าเราไม่รู้ว่าตอนนี้เรายืนอยู่ที่ตำแหน่ง x y z อะไร จึงใช้ Scan Type แบบ Unknown initial value ในการหา

แต่ในบทความนี้เราจะทดลองโดยใช้โปรแกรม Cheat Engine Tutorial ในการเรียนรู้ไปก่อนซึ่งใน Step 3 ของ CE Tutorial นั้นโจทย์จะให้หาค่าเลือดและแก้ไขเป็น 5000 ถึงจะผ่านด้านนี้ โดยบอกใบ้เราว่าเลือดจะอยู่ระหว่าง 0 ถึง 500

โจทย์นี้ก็เหมือนกับว่าเรากำลังเล่นเกมที่มีค่าพลังชีวิตเป็นหลอดเลือด เหมือนกับเกม GTA V หรือ Ragnarok ในโปรแกรมทดลองของเราก็จะมีหลอดเลือดเหมือนกันอยู่ด้านล่างสุด ถ้าเรากด Hit me (ถ้าอยู่ในเกมก็อาจจะโดนโจมตีจนทำให้เลือดลดลง) ก็จะเห็นว่าหลอดเลือดนั้นลดลงและมีตัวเลขบอกว่าเลือดลดลงไปเท่าไหร่

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

image.png

image.png

ทีนี้เราจะคัดว่าที่ไม่ใช่ออกได้ยังไง เราก็สามารถใช้ฟังก์ชัน Increase หรือ Decrease ได้ เช่นถ้าเราโดนโจมตีหรือกด Hit me แล้วหมายความว่าเลือดของเราลดลงก็ใช้ Decrease Value แต่ถ้าเรายืนอยู่เฉยๆหรือไปเก็บไอเทมเลือดแล้วเลือดเพิ่มจากเดิมก็ใช้ Increase Value

image.png

Scan Type (Next Scan)#

  • Exact Value คือการค้นหาค่าที่เรารู้อยู่แล้วแต่ในกรณีของบทความนี้คงจะยากที่เราจะรู้ว่าตอนนี้เลือดเป็นเท่าไหร่แล้ว
  • Bigger than… คือการค้นหาค่าที่มากกว่าที่เรากำหนดในช่อง value
  • Smaller than… คือการค้นหาค่าที่น้อยกว่าที่เรากำหนดในช่อง value
  • Value between… คือการค้นหาค่าที่อยู่ระหว่าง 2 ค่า เช่น 0 ถึง 500 (บทความนี้ก็สามารถใช้ Option นี้ได้)
  • Increased value คือการค้นหาค่าที่เพิ่มขึ้นจากเดิม เช่น ตอนนี้เลือดมีอยู่ 50 พอเก็บไอเทมเลือดแล้วเลือดเพิ่มขึ้นเป็นเท่าไหร่ไม่รู้ แต่รู้แน่ๆว่ามันเพิ่มขึ้นก็ให้ใช้ตัวนี้
  • Increased value by คือการค้นหาค่าที่เพิ่มขึ้นจากเดิมแต่เรารู้ว่าเพิ่มขึ้นเท่าไหร่ เช่น มีเลือดอยู่ 50 กดไอเทมเพิ่มเลือดแล้วบนหน้าจอบอกว่าเลือดเด้งขึ้น 500 ก็สามารถใช้ตัวนี้ได้โดยใส่ value เป็น 500
  • Decreased value คือการค้นหาค่าที่ลดลงจากเดิมโดยที่ไม่รู้ว่าลดลงไปเท่าไหร่ แต่รู้ว่าลดลงแน่ๆ
  • Decreased value by คือการค้นหาค่าที่ลดลงจากเดิมโดยที่รู้ว่าลดลงไปเท่าไหร่ เช่น บนหน้าจอเกมบอกว่าโดนโจมตีแล้วเลือดลด 10 หน่วย
  • Changed value คือการค้นหาค่าที่เปลี่ยนแปลงจากเดิม เช่น ค่าที่หาเจอในช่อง address มีค่าที่เปลี่ยนแปลงจากเดิมก็จะคัดค่าที่ไม่เปลี่ยนแปลงออก
  • Unchanged value คือการค้นหาค่าที่ไม่เปลี่ยนแปลงจากเดิม เช่น ค่าที่หาเจอในช่อง address มีค่าที่เปลี่ยนแปลงจากเดิมก็จะคัดออกทันที
  • Ignore value ไม่เคยใช้เลย 555 เท่าที่หาข้อมูลมามันคือ การค้นหาจะเน้นไปที่การเปลี่ยนแปลงในหน่วยความจำ โดยไม่สนใจค่าเริ่มต้นที่มีอยู่ ซึ่งอาจจะเป็นประโยชน์ในกรณีที่คุณต้องการหาว่าการกระทำใด ๆ ที่คุณทำในเกมจะส่งผลให้ค่าใดค่าหนึ่งเปลี่ยนแปลง โดยไม่ว่าค่าเริ่มต้นจะเป็นอะไร

Let’s Start#

ทุกคนน่าจะพอเข้าใจกันบ้างแล้ว ก็เริ่มทดลองทำกันเลย ก็ทำเหมือนเดิมได้เลย Open Process แล้วก็เลือก Scan Type เป็น Unknown initial value และเลือก Value Type เป็น 4 Bytes เพราะเดาว่าน่าจะเป็น data type เป็น int เพราะในหน้าจอแสดงผล แสดงให้เห็นค่าเลือดที่ลดลง เป็นจำนวนเต็ม เลยคิดว่า data type ที่ใช้เก็บค่าเลือดก็น่าจะเป็น int ที่มีขนาด 4 Bytes

image.png

หลังจากกด First Scan ไปแล้วก็จะเจอ address จำนวนมาก ถ้าดูในรูปก็จะเห็นว่า Found: 826,368 เลยทีเดียว จากนั้นเราก็จะเลือกวิธี Scan Type ต่อไปว่าจะใช้แบบไหน แต่ในตอนนี้เราสังเกตได้ว่าในโปรแกรมทดลองของเรา (Cheat Engine Tutorial) เวลาที่กด Hit me แล้วจะมีเลขที่บอกว่าโดนลดจำนวนเลือดไปเท่าไหร่

image.png

ในกรณีของผม จะขึ้นว่า -1 ถ้าขึ้นแบบนี้ผมก็จะเลือกใช้ Decreased value by จะเป็นวิธีที่เหมาะที่สุด เราก็เลือก Scan Type เป็น Decreased value by แล้วก็กรอก Value เป็น 1 แล้วกด Next Scan ก็จะเห็นว่า จำนวน address ที่เจอก็จะเหลือแค่ 21 address เท่านั้น ถ้าหากเจอ address เยอะอยู่ก็ทำซ้ำไปเรื่อยๆจน address เหลือน้อยๆ (ตั้งแต่กด Hit me จนถึง กด Next Scan)

image.png

ในโจทย์เขาก็ใบ้ให้เราอยู่ว่าค่าเลือดจะอยู่ระหว่าง 0 ถึง 500 เราก็นั่งดูว่าใน address ที่เจอ มีอันไหนบ้างที่ value อยู่ระหว่าง 0 ถึง 500 บ้าง จะเห็นว่ามันก็ยังมีเยอะอยู่ แต่ที่แน่ๆ value 0 ไม่ใช่แน่ๆ เพราะว่าในหลอดเลือด ลดลงแค่นิดเดียวเอง งั้นก็ไม่น่าจะใช่ 0 แน่ๆ แล้วค่าอื่นๆละอย่าง 27,91,1 3 ค่านี้แล้วอันไหนที่ใช่ละ เราก็ต้องทดลองทีละอันละ

image.png

ลองดับเบิ้ลคลิกทีละค่าเลยครับ แล้วคลิกก็เปลี่ยนค่าไปเรื่อยๆทุกอัน ผมลองแก้ไขค่าที่เป็น 27 ให้เป็น 5000 เพื่อให้ผ่านด่านนี้ ก็จะเห็นว่า ปุ่ม Next จะสามารถกดได้

image.png

คู่มือ Cheat Engine – Find an unknown initial value
https://blog.0x01code.me/posts/tutorial-cheat-engine-find-an-unknown-initial-value/
Author
0x01code
Published at
2023-08-30
License
CC BY-NC-SA 4.0