Schakel attach-to-attach uit

Ik ben op zoek naar een manier om te controleren en te zien of iemand die aan een programma/proces is gekoppeld, kan beginnen.

Ik wil het moeilijker maken om mijn programma te reverse engineeren door attach-to-attach uit te schakelen.

Kan dit? is er een API-aanroep die zal kijken om te zien of er iets aan mijn proces is gekoppeld en zo het proces eindigt.

Ik kan of moet dit in mijn code kunnen of moeten kunnen controleren en als ik zie dat dit waar is, kan ik mezelf doden of wat ik aan mezelf heb gehecht.

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

Dit weerhield me er alleen van om mijn code te debuggen, ik wil kunnen voorkomen dat een bijlageformulier in mijn proces plaatsvindt.

0
Ik kan alleen een debugger op kernelniveau gebruiken. Je zult nooit weten dat ik gehecht was.
toegevoegd de auteur Roger Lipscombe, de bron
Anti-Debugging - A Developers View (PDF) heeft mogelijk interesse ( omdat het niet om beheerde code gaat, zijn de technieken misschien niet van toepassing of hebben ze extra werk nodig).
toegevoegd de auteur user786653, de bron

2 antwoord

Een paar strategieën ...

# 1:

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

Maar er zijn duidelijke beperkingen hier: als een debugger de uitvoering heeft opgeschort, is deze controle duidelijk nutteloos. Dus dit is niet waterdicht.

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

Natuurlijk kan de gebruiker gewoon je debugger-proces doden.

Of gebruik een kernel-foutopsporing, die u niet kunt voorkomen of detecteren.

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
toegevoegd

Als u een beheerde foutopsporing wilt detecteren, kunt u System aanroepen. Diagnostics.Debugger.IsAttached .

Als u native debuggers wilt detecteren, wordt de functie die u nodig hebt genoemd IsDebuggerPresent . P/roep het zo aan:

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

Zoals @tenfour zegt, is geen van deze benaderingen bijzonder effectief tegen een resolute aanvaller - maar dan is niets.

3
toegevoegd