Адключэнне падлучэння да апрацоўкі

Я шукаю спосаб, каб праверыць і паглядзець, калі хто-то прыкладаюцца да праграмы/працэсу я пачынаю.

Я хачу зрабіць гэта цяжэй перапраектоўваць сваю праграму шляхам адключэння падлучэння да працэсу.

Ці з'яўляецца гэта зрабіць у стане? ёсць некаторыя API выклік, які дасць падставы лічыць, каб убачыць, калі нешта прымацавана да майго працэсу, і калі так скончыцца працэс.

З майго разумення я магу або павінен быць у стане праверыць гэта ў маёй кодзе, і калі я бачу, што гэта праўда, я магу толькі забiць мяне сам, або, Што прыкладаецца да маёй уласнай асобы.

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

Гэта толькі мяне спынілі ад адладкі майго кода, я хачу, каб быць у стане спыніць любую форму ўкладання, якая адбываецца ў маім працэсе.

0
Я магу проста выкарыстоўваць ўзроўні ядра адладчык. Вы ніколі не будзеце ведаць, я быў прывязаны.
дададзена аўтар Roger Lipscombe, крыніца
антиотладочные - A Developers View (PDF) можа мець цікавасць да ( бо ён не мае справы з кіраваным кодам метаду не можа быць скарыстаная ці спатрэбіцца дадатковая работа).
дададзена аўтар user786653, крыніца

2 адказы

Некалькі стратэгій ...

# 1:

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

Але ёсць відавочныя абмежаванні тут: калі адладчык прыпыняе выкананне, гэтая праверка, відавочна, бескарысна. Так што гэта не герметычныя.

# 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).

Вядома, карыстальнік можа проста забіць працэс адладчыка.

Або выкарыстоўваць адладчык ядра, які вы не можаце прадухіліць або выявіць.

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
дададзена

Для выяўлення кіраванага адладчыка можна выклікаць Сістэма. Diagnostics.Debugger.IsAttached .

Калі вы хочаце, каб выявіць ўласныя адладчык функцыі вам трэба, называецца IsDebuggerPresent . P/спасылацца на гэта наступным чынам:

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

Як @tenfour кажа, ні адзін з гэтых падыходаў з'яўляецца асабліва эфектыўным супраць рашучага нападніка - але нічога.

3
дададзена