-
Notifications
You must be signed in to change notification settings - Fork 142
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Problems with vmprotect #26
Comments
hi @merfin993 ! |
Hi @hasherezade, thanks for the reply. And the sample You will find the 3 payloads I made for safe testing. The two samples that have "ok" in the name are traced correctly while the one called "debugger" does not execute the payload. For simplicity the vmprotect antivm flags are disabled in all 3 samples. I'm also trying to find a solution. Thank you |
thank you @merfin993 ! I appreciate. I am gonna check it & get back to you soon |
Hi @hasherezade. I wanted to ask if they could be useful to identify the problems that tiny_tracer has with vmprotect. I thank you again. |
hi @merfin993 ! was you able to pinpoint what exactly are the flags that VMProtect checks? to be honest, so far I wasn't able to find the exact ones. I am afraid finding them will require deeper digging, and devirtualization of this stub. so far I made some blackbox tests using Al-khaser, and I found what of the standard flags used by debuggers are set by PIN. And indeed I found something: it seems to set So I implemented in tiny_tracer an option to hide it: The feature seems to work correct (yet it turned out not to be sufficient to solve the original problem with VMProtect). This is before hiding enabled: This is after hiding enabled: Next I am gonna try to hide the marker based on INT 2D. So, so far I am trying to pinpoint what exactly is the check done by VMProtect for which I should find the workaround. If your collected material provides any clues about it, I would be grateful if you share! |
Hi @hasherezade. I did some tests by disabling virtualization and mutations to get the cleanest trace possible. (the sample is contained in the archive) I send you the results of the syscalls obtained through a driver. vmptrace.zip I'm still analyzing the traces to determine what checks vmprotect does (syscalls side) In case it's not a check made via syscalls these are some projects I'm analyzing: |
Hi @merfin993, just a small update. I hope soon I am gonna have more time to dedicate to TinyTracer again, and I will dig into details and try to make a complete bypass. |
…was set from the same thread. Confirmed bypass of VMProtect ant-dbg checks (Issue #26)
@merfin993 - After the latest updates, TinyTracer is finally able to bypass this Trap-based check. I tested with your sample application, as well as with my own testcases, protected by VMProtect with the mentioned settings. The bypass works when ANTIDEBUG mode is enabled |
I also tested it, and the 64-bit app version has no problem, but the 32-bit app protected by VMProtect cannot be traced either. Here is a 32-bit compiled app protected by VMProtect3.8 for testing. Hope this helps a little |
thank you @helloobaby , I will have a look when I get some free time |
@helloobaby - I added some fixes. It turns out that your sample switches to 64-bit mode via Heaven's Gate - this is something that PIN cannot handle. But it is now reported in the tracelog. ANTIDEBUG=1
ANTIVM=1
EMULATE_HYPERV=True |
Thank you very much, this question has puzzled me for many days. |
Hi, I was trying to check the syscalls of a malware sample protected with vmprotect and noticed that the execution stops before reaching the payload. (the malware does not run and no error message is displayed)
Doing other tests (with the demo version of vmprotect and a test payload) I realized that the problem is only related to the vmprotect debugger flag, without the flag the test payload is executed and traced.
Do you know of a way around this problem?
The text was updated successfully, but these errors were encountered: