Fahr
May 7th, 2004, 08:17
Hello all,
I'm working on an ASPR packed file, no problems there (thanks to hobferret and LaBBa) and I was just wondering if it would be possible to bypass IsDebuggerPresent in some other way.
What I do now is break on IsDebuggerPresent, step twice and change the value in the memory that is going to be written to EAX. No probs, all runs fine.
However, I also tried to fix the JE that tests the AL after the call to IsDebuggerPresent. I also tried to fix the value in EAX itself after the call. In both cases everything goes bad!
For some reason, if I do anything else than changing the value in memory (like fixing the jump or changing EAX), the packer code eventually lands in either a data segment, an endless loop or at 0.
Not that it's really NEEDED to bypass it some other way (though it would be more convenient when writing a loader), I was just wondering WHY it goes like this. Logically, I'd say fixing the jump or EAX should take care of it. There is only one call to IsDebuggerPresent, so why does it only work when I change the value in memory?
Maybe someone can shed some light on this issue.
Thanks,
- Fahr
I'm working on an ASPR packed file, no problems there (thanks to hobferret and LaBBa) and I was just wondering if it would be possible to bypass IsDebuggerPresent in some other way.
What I do now is break on IsDebuggerPresent, step twice and change the value in the memory that is going to be written to EAX. No probs, all runs fine.
However, I also tried to fix the JE that tests the AL after the call to IsDebuggerPresent. I also tried to fix the value in EAX itself after the call. In both cases everything goes bad!
For some reason, if I do anything else than changing the value in memory (like fixing the jump or changing EAX), the packer code eventually lands in either a data segment, an endless loop or at 0.
Not that it's really NEEDED to bypass it some other way (though it would be more convenient when writing a loader), I was just wondering WHY it goes like this. Logically, I'd say fixing the jump or EAX should take care of it. There is only one call to IsDebuggerPresent, so why does it only work when I change the value in memory?
Maybe someone can shed some light on this issue.
Thanks,
- Fahr