Diberikan sebuah game berbasis .net yang diminta untuk bypass barrier supaya mendapatkan flag. Mari kita decompile source code nya 😀
Untuk decompile source code .net saya menggunakan dnspy. Masukkan semua file yang ada lalu tinggal inspect Assembly-CSharp.dll karena semua logika game berada disini.

Ternyata terdapat sebuah class PlayerController yang berisi tentang bagaimana logika berjalan / bergerak player itu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
using System; using UnityEngine; // Token: 0x02000007 RID: 7 public class PlayerController : MonoBehaviour { // Token: 0x06000014 RID: 20 RVA: 0x000020CC File Offset: 0x000002CC private void Start() { this.rb = base.GetComponent<Rigidbody>(); } // Token: 0x06000015 RID: 21 RVA: 0x0000207D File Offset: 0x0000027D private void Update() { } // Token: 0x06000016 RID: 22 RVA: 0x000020DA File Offset: 0x000002DA private void FixedUpdate() { this.movementSpeed = this.baseMovementSpeed; this.Move(); } // Token: 0x06000017 RID: 23 RVA: 0x00002318 File Offset: 0x00000518 private void Move() { Vector3 vector = default(Vector3); if (Input.GetKey(KeyCode.W)) { vector += Vector3.forward; } if (Input.GetKey(KeyCode.S)) { vector += Vector3.back; } if (Input.GetKey(KeyCode.D)) { vector += Vector3.right; } if (Input.GetKey(KeyCode.A)) { vector += Vector3.left; } vector = this.rb.rotation * vector * this.movementSpeed; this.rb.velocity = new Vector3(vector.x, this.rb.velocity.y, vector.z); } // Token: 0x0400000E RID: 14 public float baseMovementSpeed; // Token: 0x0400000F RID: 15 private float movementSpeed; // Token: 0x04000010 RID: 16 public float jumpPower; // Token: 0x04000011 RID: 17 private Rigidbody rb; } |
Jika dilihat pada code PlayerController diatas maka kurang lebih logikanya seperti ini.
- Terdapat movement speed yang bisa diubah valuenya
- Lalu pada function Move() itu logika dasar movement player jika button WASD ditekan
Nah, saya terpikirkan bahwa jika saya merubah value dari movement speed itu maka barrier akan bisa saya lewati lalu flag didapatkan. Maka dari itu saya mencoba untuk merubah movement speed dikalikan dengan 100.
1 2 3 4 5 6 7 |
...... private void FixedUpdate() { this.movementSpeed = this.baseMovementSpeed * 100f; this.Move(); } ...... |

Flag : ICTF{ARE_YOU_WINNING_SON_GGGGG}