Defensive research / Full technical release

Memahami Perilaku dan Cara Mendeteksi Program Cheat Point Blank V1

26 Agustus 2026Windows / PE32 / Detection Engineering / Anti-Cheat

Executive overview

Tulisan ini merupakan rilis teknis lengkap dari analisis statis terhadap tiga artefak PE32/x86 yang berkaitan dengan sebuah program cheat Point Blank V1. Sasaran utamanya adalah developer game, anti-cheat engineer, detection engineer, incident responder, dan analyst yang membutuhkan indikator konkret untuk membedakan perilaku normal dari pola process injection, thread-context manipulation, hardware breakpoint, Vectored Exception Handler (VEH), perubahan memory protection, serta modul yang menyamarkan format aslinya.

Binary tidak dijalankan selama tahap analisis ini. Karena itu, setiap kesimpulan dipisahkan menjadi terkonfirmasi secara statis, sangat kuat tetapi belum runtime-validated, atau hipotesis yang masih memerlukan telemetry/debugging terisolasi. Pemisahan ini penting agar indikator tidak berubah menjadi asumsi yang berisiko menghasilkan false positive atau tindakan enforcement yang tidak proporsional.

Tujuan publikasi: memberikan material yang cukup rinci agar pihak developer dapat melakukan triage, membuat telemetry, mengembangkan signature, memvalidasi runtime behavior, dan membangun mitigasi. Detail yang tidak diperlukan untuk pertahanan dan hanya berguna untuk mereplikasi mekanisme injection tidak dijadikan instruksi operasional.

1. Ruang lingkup analisis

Analisis difokuskan pada hubungan antar-artefak, primitive process injection, manipulasi thread dan context, memory protection, exception handling, hooking/redirection, komunikasi jaringan, static indicators, telemetry runtime, serta strategi validasi yang dapat digunakan pihak game.

2. Artefak, format, ukuran, dan SHA-256

3233321001311.exe
Type   : PE32 console executable
Arch   : x86
Size   : 76,589 bytes
SHA256 : d4bda4a791062f8f4e81710370c72f9102add63c95ad12c65364a6e231a70d76

3533625655.dll
Type   : PE32 DLL, subsystem CUI
Arch   : x86
Size   : 914,730 bytes
SHA256 : 5272468eedcdbb45662f22403916f76de738a630b75e9398c7ca9ec504b170fe

7677826866.ini
Type   : PE32 DLL despite .ini extension
Arch   : x86
Size   : 8,499 bytes
SHA256 : f4384d90393ae7d96b54966bd5350384e8aabf2c540c2960a471c5007de24e84

Hash exact-match adalah indikator confidence tinggi untuk sampel yang sama, tetapi bukan signature jangka panjang. Rename tidak mengubah hash, sedangkan rebuild atau modifikasi kecil akan menghasilkan hash baru. Karena itu, hash harus dikombinasikan dengan signer, path, parent process, PE characteristics, dan behavior sequence.

3. Artefak executable: injector/controller

Executable pertama menunjukkan kombinasi import dan call-flow yang konsisten dengan controller yang mencari proses target, membuka proses dengan hak luas, mengalokasikan memory remote, menulis data/stub ke proses target, mengaktifkan execution primitive, menunggu completion, lalu melakukan cleanup.

Import penting

CreateToolhelp32Snapshot
Process32First / Process32Next
OpenProcess
VirtualAllocEx
WriteProcessMemory
VirtualFreeEx
GetModuleHandleA
GetProcAddress
GetFullPathNameA
WaitForSingleObject
CloseHandle

WinINet-related imports observed:
InternetOpenA
InternetConnectA
HttpOpenRequestA
HttpSendRequestA
InternetReadFile

Kehadiran VirtualAllocEx dan WriteProcessMemory menunjukkan kemampuan menulis memory proses lain. Import table tidak memperlihatkan CreateRemoteThread, sehingga primitive aktivasi perlu ditentukan dari disassembly dan resolver dinamis, bukan dari import list saja.

4. Call-flow remote process yang terkonfirmasi

Disassembly statis menemukan dua routine injection yang sangat mirip di sekitar RVA 0x25xx dan 0x29xx. Pola umumnya:

OpenProcess(access luas)
  -> resolve required function(s)
  -> VirtualAllocEx untuk path/data
  -> WriteProcessMemory untuk path/data
  -> VirtualAllocEx untuk remote stub
  -> WriteProcessMemory untuk remote stub
  -> internal helper mengaktifkan remote execution
  -> WaitForSingleObject
  -> VirtualFreeEx
  -> CloseHandle

Ini mengangkat confidence dari sekadar “memiliki API injection” menjadi memiliki implementasi remote-process injection yang benar-benar terhubung dalam call-flow.

Call-site penting untuk triage dan correlation

5. Primitive remote thread: kecocokan kuat NtCreateThreadEx

Helper internal sekitar RVA 0x24C0 tidak memanggil API thread creation melalui import table. Ia melakukan resolusi fungsi secara dinamis melalui identifier internal, mendekode ntdll.dll, lalu memanggil fungsi hasil resolusi menggunakan susunan argument yang sangat cocok dengan signature NtCreateThreadEx.

Argumen yang terlihat konsisten dengan output thread handle, desired access, object attributes, process handle, start address, parameter, flags, zero bits, stack commit/reserve, dan buffer tambahan. Dengan demikian status temuan adalah:

Assessment: penggunaan primitive remote-thread adalah terkonfirmasi; identifikasi spesifik sebagai NtCreateThreadEx memiliki confidence sangat kuat berdasarkan resolver ntdll.dll dan kecocokan signature, tetapi masih idealnya dikonfirmasi pada runtime.

6. Dua jalur payload dan orchestration

Call-site RVA 0x731F dan 0x7342 memanggil dua routine injection berbeda, masing-masing menuju routine sekitar 0x2910 dan 0x2610. Sebelum pemanggilan, process identifier diteruskan melalui ECX, sedangkan pointer path diteruskan melalui EDX. Kedua routine menggunakan GetFullPathNameA sebelum menjalankan chain remote-process yang sama.

Interpretasi yang paling kuat adalah executable memiliki dua kandidat path/payload yang dicoba secara berurutan. Jika jalur pertama gagal, kode berpindah ke jalur kedua. Setelah kegagalan berulang terdapat retry delay; setelah sukses handle proses ditutup, terdapat delay pendek, lalu flag state internal di-set.

target/process discovery
  -> OpenProcess(access luas)
  -> injection path A
  -> jika gagal: injection path B
  -> jika keduanya gagal: Sleep sekitar 100 ms
  -> kembali ke outer loop
  -> outer discovery loop juga memiliki Sleep sekitar 200 ms
  -> jika sukses: CloseHandle
  -> Sleep sekitar 10 ms
  -> success state flag = 1

Pada area .rdata terdapat string case-variant PointBl dan pointbl. Ini adalah indikator kuat terhadap pencarian target, tetapi bentuk nama lengkap tidak dipaksakan sebagai fakta karena data di sekitarnya masih menunjukkan transformasi/obfuscation.

7. Remote stub: apa yang diketahui dan apa yang belum

Dua routine injection membentuk stub kecil berukuran sekitar 17 byte di stack sebelum menyalinnya ke proses target. Secara konseptual, struktur yang terlihat adalah rangkaian push terhadap parameter runtime, pemuatan function pointer ke register, indirect call, lalu return.

Placeholder dan operand runtime belum dapat dipetakan secara penuh hanya dari file mentah. Karena itu, analisis tidak menyatakan nama loader final atau path final. Yang terkonfirmasi adalah keberadaan stub remote kecil, proses penyalinan stub, dan activation primitive yang mengikuti penulisan tersebut.

8. Artefak DLL runtime: initialization dan worker

DLL besar menunjukkan profil berbeda dari executable. Entry point berada pada RVA 0x90E4C. Pada DLL_PROCESS_ATTACH, kontrol diteruskan ke dispatcher internal sekitar RVA 0x90D16, kemudian ke routine sekitar RVA 0x77FA0.

Routine initialization:

9. VEH dan EXCEPTION_SINGLE_STEP

Salah satu worker memasang AddVectoredExceptionHandler dengan callback pada alamat 0x10077320. Callback memeriksa exception code 0x80000004, yaitu EXCEPTION_SINGLE_STEP.

Jika exception address cocok dengan lokasi internal yang dipantau, callback mengubah instruction pointer pada context ke alamat internal lain, termasuk 0x1002FBD0 atau 0x100321A0, kemudian menandai exception sebagai handled.

hardware breakpoint fires
      |
      v
EXCEPTION_SINGLE_STEP
      |
      v
VEH callback
      |
      +--> validate exception address
      |
      v
modify instruction pointer
      |
      v
continue execution through redirected routine

10. Thread enumeration dan debug-register manipulation

Worker yang sama melakukan urutan:

  1. GetCurrentProcessId.
  2. CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD).
  3. Memfilter thread berdasarkan owner process ID.
  4. Membuka thread dengan access 0x1FFFFF.
  5. SuspendThread.
  6. GetThreadContext menggunakan ContextFlags = 0x10010.
  7. Mengubah context/debug registers.
  8. SetThreadContext.
  9. ResumeThread.

Context yang disiapkan mengandung Dr7 = 0x55. Nilai Dr0/Dr1 berasal dari state internal. Pada x86, Dr0–Dr3 dapat menyimpan alamat hardware breakpoint, sedangkan Dr7 mengontrol aktivasi breakpoint. Kombinasi ini merupakan bukti kuat bahwa mekanisme utama DLL menggunakan hardware breakpoint + VEH redirection.

11. Memory protection dan instruction-cache behavior

DLL melakukan beberapa pemanggilan VirtualProtect terhadap state/code internal dengan protection 0x40 atau PAGE_EXECUTE_READWRITE, kemudian mengembalikan protection lama. FlushInstructionCache juga terlihat pada surface runtime.

Bagi anti-cheat, perubahan executable page menjadi writable lalu executable kembali, terutama bila berdekatan dengan context manipulation atau exception redirection, merupakan sinyal bernilai tinggi. Namun sinyal ini harus dikorelasikan dengan signer/module allowlist karena JIT engine, security software, dan beberapa legitimate runtime juga dapat melakukan perubahan protection.

12. Penilaian mekanisme hook/redirection

Tidak ditemukan import/string yang cukup kuat untuk menyimpulkan modul runtime menggunakan library inline-hook tertentu. Sebaliknya, bukti yang konsisten adalah:

Kesimpulan defensif yang paling aman adalah custom redirection berbasis hardware breakpoint + VEH. Kemungkinan inline/IAT hook di area lain belum dapat dikesampingkan, tetapi tidak didukung sebagai mekanisme utama oleh evidence yang tersedia.

13. Artefak .ini yang sebenarnya DLL

7677826866.ini bukan file konfigurasi teks. PE header menunjukkan PE32 DLL x86 dengan:

Disassembly entry-flow menunjukkan wrapper DLL standar MSVC, IsDebuggerPresent, SetUnhandledExceptionFilter/UnhandledExceptionFilter, callback exception internal, function pointer global, dan state lifecycle berbasis InterlockedExchange/InterlockedCompareExchange.

Tidak terlihat VirtualAllocEx, WriteProcessMemory, SetThreadContext, CreateThread, atau networking pada import table. Penilaian saat ini: modul runtime/guard/exception-support pendamping, bukan injector utama. Hubungannya dengan dua artefak lain belum terkonfirmasi.

14. Peta hubungan sementara

3233321001311.exe
  ├─ process discovery
  ├─ OpenProcess / remote allocation
  ├─ remote write
  ├─ dynamic remote-thread primitive
  ├─ two candidate payload paths
  └─ likely activates a runtime payload
          |
          +-- 3533625655.dll (strong working hypothesis)
                ├─ worker threads
                ├─ thread context manipulation
                ├─ debug registers
                ├─ hardware breakpoints
                ├─ VEH single-step redirection
                ├─ memory protection changes
                └─ network-capable import surface

7677826866.ini
  └─ disguised PE32 DLL / support component
     direct relationship not yet proven

15. Timeline eksekusi statis

executable starts
  -> initialization / string processing
  -> target discovery (PointBl / pointbl indicator)
  -> OpenProcess with broad access
  -> injection path A or B
       -> normalize payload path
       -> remote allocation/write for path/data
       -> remote allocation/write for small stub
       -> dynamic ntdll resolver
       -> remote execution primitive
       -> wait
       -> cleanup remote memory / handles
  -> runtime payload may become active
  -> if large DLL is loaded:
       DllMain / dispatcher
       -> worker threads
       -> VEH registration
       -> thread snapshot
       -> SuspendThread
       -> GetThreadContext
       -> debug-register setup
       -> SetThreadContext
       -> ResumeThread
       -> hardware breakpoint
       -> EXCEPTION_SINGLE_STEP
       -> VEH execution redirection

16. Detection philosophy: sequence > single signal

Nama file, hash, satu API, atau satu memory-protection event tidak cukup sebagai dasar enforcement. Detection engineering yang kuat menggabungkan:

static IOC
   + signer/path reputation
   + process access telemetry
   + remote memory telemetry
   + thread/context telemetry
   + module/VEH telemetry
   + server-side session context
   = correlated confidence

Sequence bernilai tinggi dalam window sekitar 30 detik:

process discovery
  -> external OpenProcess(access luas)
  -> VirtualAllocEx
  -> WriteProcessMemory
  -> remote thread or context modification
  -> unknown module / VEH / hardware breakpoint

17. High-value indicators untuk pihak game

18. Event telemetry minimum

Untuk deteksi awal, sensor tidak perlu menyimpan isi memory game atau data pribadi. Metadata operasi sudah cukup bernilai:

{
  "timestamp": "2026-08-25T00:00:00Z",
  "source_pid": 1234,
  "target_pid": 5678,
  "source_image_sha256": "...",
  "source_path_class": "user-writable|program-files|unknown",
  "operation": "open_process|remote_alloc|remote_write|remote_thread|thread_context|module_load|veh_observed",
  "requested_access": "0x1fffff",
  "memory_protection": "0x40",
  "context_flags": "0x10010",
  "module_sha256": "...",
  "signed": false
}

Tambahkan parent process, image base, signer identity, start time, target module, dan session identifier bila tersedia. Data tersebut memungkinkan korelasi tanpa mengambil gameplay data atau memory contents secara default.

19. Behavioral scoring baseline

Baseline berikut bukan kebijakan ban; ini titik awal untuk calibration:

0–39   : observation
40–69  : review + additional telemetry
70–99  : high-confidence investigation
100+   : containment/review according to developer policy

Auto-ban berdasarkan skor client tunggal tidak direkomendasikan. Simpan event sequence dan korelasikan dengan server-side evidence sebelum tindakan akun permanen.

20. Response bertingkat

  1. Simpan metadata dan tandai sesi untuk review.
  2. Minta revalidation launcher/module resmi.
  3. Tambahkan telemetry sementara jika confidence belum cukup.
  4. Batasi fitur kompetitif bila confidence tinggi dan kebijakan memungkinkan.
  5. Gunakan korelasi server-side dan bukti berurutan sebelum tindakan akun final.

21. False-positive checklist

22. Static triage: YARA exact-match dan behavioral rules

Rule berikut ditujukan untuk defensive triage. Rule behavioral harus dikorelasikan dengan telemetry dan tidak dipakai sebagai auto-ban tunggal.

import "hash"
import "pe"

rule PBV1_Injector_Exact
{
    meta:
        description = "Exact hash of analyzed PE32 injector/controller"
        confidence = "high"
        scope = "defensive triage"
    condition:
        hash.sha256(0, filesize) ==
        "d4bda4a791062f8f4e81710370c72f9102add63c95ad12c65364a6e231a70d76"
}

rule PBV1_RuntimeDLL_Exact
{
    meta:
        description = "Exact hash of analyzed PE32 runtime DLL"
        confidence = "high"
        scope = "defensive triage"
    condition:
        hash.sha256(0, filesize) ==
        "5272468eedcdbb45662f22403916f76de738a630b75e9398c7ca9ec504b170fe"
}

rule PBV1_DisguisedINI_DLL
{
    meta:
        description = "PE32 DLL using an INI-looking filename"
        confidence = "medium"
        scope = "defensive triage"
    strings:
        $manifest = "requestedExecutionLevel" ascii
        $kernel = "KERNEL32.dll" ascii nocase
        $crt = "MSVCR100.dll" ascii nocase
    condition:
        uint16(0) == 0x5A4D and
        pe.characteristics & pe.DLL and
        filename matches /(?i)\\.ini$/ and
        $manifest and $kernel and $crt
}

rule PBV1_Injector_Behavioral_Artifacts
{
    meta:
        description = "Static indicators of analyzed remote-process injector"
        confidence = "medium"
        scope = "defensive triage; do not auto-ban alone"
    strings:
        $api_open = "OpenProcess" ascii
        $api_alloc = "VirtualAllocEx" ascii
        $api_write = "WriteProcessMemory" ascii
        $api_proc = "Process32First" ascii
        $api_next = "Process32Next" ascii
        $api_resolve = "GetProcAddress" ascii
        $target_a = "PointBl" ascii nocase
        $target_b = "pointbl" ascii nocase
    condition:
        uint16(0) == 0x5A4D and
        4 of ($api_*) and
        1 of ($target_*)
}

rule PBV1_Runtime_VEH_HardwareBreakpoint
{
    meta:
        description = "Static indicators of VEH/context-manipulation runtime module"
        confidence = "medium"
        scope = "defensive triage; corroborate with runtime telemetry"
    strings:
        $veh = "AddVectoredExceptionHandler" ascii
        $getctx = "GetThreadContext" ascii
        $setctx = "SetThreadContext" ascii
        $suspend = "SuspendThread" ascii
        $resume = "ResumeThread" ascii
        $protect = "VirtualProtect" ascii
        $flush = "FlushInstructionCache" ascii
        $debugger = "IsDebuggerPresent" ascii
    condition:
        uint16(0) == 0x5A4D and
        5 of ($veh, $getctx, $setctx, $suspend, $resume, $protect, $flush, $debugger)
}

23. Module/file triage recommendations

24. Server-side correlation

25. Mitigasi dan hardening

26. Rencana validasi lab terisolasi

Tujuan validasi adalah membuktikan nilai runtime yang belum terlihat pada disassembly, bukan menjalankan artefak pada mesin pemain atau produksi.

Prasyarat

A. Baseline

Catat module resmi, thread count, memory map, VEH normal, signer, dan operasi launcher resmi selama startup. Tanpa baseline, event seperti VirtualProtect, thread creation, atau exception handler mudah disalahinterpretasikan.

B. Injector observation

C. Runtime DLL observation

D. Network observation

Catat domain/IP/port, waktu koneksi, ukuran request/response, dan parent module. Gunakan sinkhole/proxy lab; jangan mengirim kredensial produksi atau data game ke endpoint luar scope.

E. Reproducibility

Ulangi minimal tiga kali dari snapshot bersih. Pisahkan invariant behavior dari alamat/timing yang berubah akibat ASLR, build, atau scheduling.

Expected output

Stop conditions

Hentikan eksperimen jika artefak mencoba mengakses kredensial, menyebar ke host lain, memodifikasi sistem di luar scope, atau keluar dari network sinkhole.

27. Tingkat keyakinan

Finding                                              Confidence
---------------------------------------------------  ------------------------------
3233321001311.exe melakukan remote memory write      HIGH
Remote execution primitive tersedia                  HIGH
Primitive cocok dengan NtCreateThreadEx              VERY STRONG, runtime pending
Dua jalur payload/injection                           HIGH
3533625655.dll memakai hardware breakpoint + VEH     HIGH
Dr7 = 0x55 digunakan dalam context setup              HIGH
VEH menangani EXCEPTION_SINGLE_STEP                   HIGH
7677826866.ini adalah PE32 DLL                         HIGH
7677826866.ini adalah injector utama                   LOW
Tiga file pasti satu runtime chain yang sama           MEDIUM / not fully proven
Final loader function/path                             UNKNOWN / requires runtime

28. Hal yang masih belum terbukti

29. Metodologi dan batasan

Analisis menggunakan pemeriksaan PE, hash, import table, strings/resources, entry-point disassembly, cross-reference, dan korelasi control flow. Binary tidak dieksekusi pada workspace analisis. Karena itu, alamat loader final, parameter runtime, endpoint purpose, serta hubungan pemuatan antar-file harus divalidasi dengan debugging/telemetry terisolasi oleh pihak yang berwenang.

Beberapa jalur analisis independen digunakan untuk memeriksa ulang injector, remote stub, DLL VEH/context manipulation, modul berekstensi .ini, dan indikator defensif. Primitive utama dan hash konsisten; ketidakpastian yang tersisa sengaja dipertahankan sebagai ketidakpastian, bukan diisi dengan asumsi.

30. Kesimpulan untuk developer game

Signature perilaku paling kuat bukan nama file atau satu hash, melainkan rantai:

target discovery
  -> broad process handle
  -> remote allocation
  -> remote write
  -> remote execution
  -> runtime module activity
  -> thread suspend/context modification
  -> debug-register hardware breakpoint
  -> EXCEPTION_SINGLE_STEP
  -> VEH-based execution redirection

Untuk pertahanan yang tahan terhadap rename/rebuild, prioritas sebaiknya diberikan pada korelasi process-access telemetry, remote memory operations, remote execution, module provenance, debug-register changes, VEH ownership, dan server-side session evidence. Exact hash tetap berguna sebagai IOC cepat, tetapi behavioral sequence adalah fondasi yang lebih sulit dihilangkan tanpa mengubah arsitektur program secara signifikan.

Recommendation: gunakan IOC/hash untuk immediate triage, implementasikan sequence-based telemetry untuk detection jangka menengah, lalu lakukan isolated runtime validation untuk menutup tiga gap utama: primitive remote-thread final, payload path/relationship, dan network purpose.

Indikator dari rangkaian analisa ini dipakai oleh PBGuard — pendeteksi cheat Point Blank by Dolenthis.

CONTACT
← Kembali ke Blog