exoproc

Başlangıç

Exoproc, Windows x64 üzerinde çalışan TypeScript/Bun süreçler arası enstrümantasyon araç takımıdır. Hedef belleğini okuyup yazabilir, hedefin...

Exoproc, Windows x64 üzerinde çalışan TypeScript/Bun süreçler arası enstrümantasyon araç takımıdır. Hedef belleğini okuyup yazabilir, hedefin mevcut bir thread'i üzerinde çağrı çalıştırabilir ve fonksiyon girişlerini hook'layabilir.

Gereksinimler

  • Bun 1.3 veya üstü
  • Windows x64; geliştirme ve test için Wine kullanılabilir
  • Hedef sürece uygun erişim hakları
bun install
bun run build
bun test

bun test, Wine ile yapılandırılmış bir Linux ortamında da çalışabilir; yerel Windows hedefi için Windows Bun gerekir. Önce denetlediğiniz, yeniden başlatılabilir bir test süreci kullanın.

İlk accessor

Çoğu kullanımda başlangıç noktası createAccessor(processId) olmalıdır. Varsayılan olarak process'in aday thread'lerini dener; ilk başarılı yönlendirmeyi seçer ve hazır accessor'ı döndürür. Bu nedenle dönen nesneyi kullanmadan önce ayrıca init() çağırmayın.

import { createAccessor, Kernel32Impl } from 'exoproc';

const memory = await createAccessor(processId, {
  hostOptions: { timeoutMs: 20_000 },
});

try {
  const threadId = await memory.call(Kernel32Impl.GetCurrentThreadId);
  console.log(`Çağrı hedef thread üzerinde çalıştı: ${threadId}`);

  const address = await memory.alloc(64);
  try {
    await memory.write(address, Buffer.from('merhaba'));
    console.log((await memory.read(address, 7)).toString());
  } finally {
    await memory.free(address);
  }
} finally {
  await memory.deinit();
}

Bu örnekte alloc, write, read ve call aynı accessor zincirinden geçer. deinit() isteğe bağlı bir temizlik değildir: yakalanan thread'in bağlamını geri yükleyip accessor kaynaklarını kapatan normal çıkış yoludur.

İlk kavramlar

bun-xffi, bellek ve C ABI temelini sağlar. bun-winapi, Win32 nesnelerini TypeScript sınıflarıyla sarar. bun-nthread, yeni bir uzak thread oluşturmadan çağrı yürütür. Üstteki hook paketleri bu katmanları kullanır.

Uzaktaki süreçle çalışmak, normal uygulama kodundan daha kırılgandır: yanlış adres, yanlış tür, uyumsuz çağrı imzası veya yanlış anda askıya alınmış bir thread hedef sürecin çökmesine neden olabilir. Thread seçimi ve çağrı sınırları için NThread, hata inceleme sırası için sorun giderme bölümüne bakın.