Jarayonga biriktirishni o'chirib qo'yish

Men tekshirish va men boshlagan dastur/jarayonga kimdir biriktirilganligini tekshirish uchun qidiraman.

Jarayonga qo'shilishni o'chirib qo'yish orqali dasturni muhandisga aylantirishni qiyinlashtirmoqchiman.

Bu mumkinmi? mening ishimga biror narsa qo'shiladimi yoki yo'qmi, shuning uchun ham oxir-oqibat bittasini ko'rish uchun qandaydir API chaqiruvi bormi?

Mening tushunchamdan bu kodni tekshirishim mumkin yoki buni tekshirib ko'rishim kerak va agar bu haqiqat ekanligini ko'rsam, o'zimni yoki mening o'zimga qo'shilgan narsalarni o'ldirishi mumkin.

#if DEBUG
RTBconsole.Text = "Debug version";
#endif

Bu mening kodimni diskvalifikatsiya qilishdan to'xtatdi, men o'zimning ishim bo'yicha amalga oshiriladigan har qanday qo'shimcha shaklni to'xtatishni xohlayman.

0
Men faqat yadro darajasidagi xatolarni tuzatuvchidan foydalanishim mumkin. Men biriktirilganligimni hech qachon bilib bo'lmaydi.
qo'shib qo'ydi muallif Roger Lipscombe, manba
Anti-disk raskadrovka - Ishlab chiquvchilar ko'rinishi (PDF) qiziqishi bo'lishi mumkin ( chunki u boshqariladigan kod bilan ishlamaydi, texnikani qo'llash mumkin emas yoki qo'shimcha ish kerak bo'ladi).
qo'shib qo'ydi muallif user786653, manba

2 javoblar

Bir necha strategiya ...

# 1:

There are some APIs for detecting the presence of a debugger:

Lekin bu erda aniq cheklovlar mavjud: agar disk raskadrovka ijrosi to'xtatilsa, bu tekshirish foydasizdir. Shunday qilib, bu suvda emas.

# 2:

Attach your own debugger to the processes you care about. That way the user cannot attach their own (a process can only be debugged once simultaneously).

Albatta foydalanuvchi xatolarni tuzatuvchi jarayonni o'ldirishi mumkin.

Yoki sizni oldini olish yoki aniqlay olmaydigan yadro disk raskadrovka vositasidan foydalaning.

Which leads to the conclusion: at some level, as long as the user has full access to the system, they can do whatever they want, so be sure to weigh your anti-debugging efforts against the realization that it will take less time for a novice hacker to work around it.

4
qo'shib qo'ydi

Boshqariladigan xato tuzatuvchini aniqlash uchun Tizimga qo'ng'iroq qilishingiz mumkin. Diagnostics.Debugger.IsAttached ni bosing.

Agar mahalliy nosozliklarni aniqlashni istasangiz, kerakli vazifaga IsDebuggerPresent . R/buni shunday chaqiring:

[DllImport("kernel32")]
static extern bool IsDebuggerPresent();

@Tenfour xabar berishicha, bu yondashuvlarning hech biri qat'iy buzg'unchiga qarshi samarali emas - ammo keyin hech narsa yo'q.

3
qo'shib qo'ydi