-
Notifications
You must be signed in to change notification settings - Fork 464
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
convert user32.dll to shellcode and load it into memory failed #10
Comments
Have you ever load a system dll(user32.dll, ntdll.dll) succeed? |
I have played with this as well, but had similar results. I can try to find some time to take a look, I agree with your setiment that some part of the loading process is obviously being missed. You could try loading with the MemoryModule project and see if you have better luck. Their code does a much better job of handling edge cases in the unpacking process. Off the top of my head, delayed imports and TLS call backs are still missing from sRDI |
AH, I firstly try MemoryModule but also failed with another error messages
It seems that totally simulating the process of loading system DLLs is very difficult. |
Interesting results. I might assume there is a class of core system DLLs (kernel32, user32, ntdll, etc.) which have special handling to deny loading multiple instances in one process. Other Microsoft DLLs like urlmon, gdi, etc. might not have this special handling and therefore might give better results. Going to do some digging to try and find out more. The PE load process is well documented, but I can't shake the feeling that Microsoft has some special handling that doesn't conform to well-known standards. |
Adding an interesting note here, kernel32.dll appears to load and run fine for those wondering. I can validate the failure of user32 and the crash from urlmon. Looking through ReactOS and online material, my guess for the user32 failure is the relation to GDI. Potentially something about GDI heaps being allocated and mapped in the PEB. |
Environment: Win10 1709
DLL: C:\Windows\SysWOW64\user32.dll
python Python\ConvertToShellcode.py user32.dll
convert user32.dll to user32.bin.Native.exe user32.bin
to load the shellcode.The exe crashed and report a error :
I ensure that the GetProcAddressR return the correct address of MessageBoxA.
I found that the 0x7774CCC5 belongs to ntdll.dll!RtlAllocateHeap function:
![image](https://user-images.githubusercontent.com/2485043/42331896-31f87a56-80a9-11e8-909f-f47f30d3052f.png)
Do you have comments that which possible cause this problem? My conclusion is that reflective loading a DLL written by ourselves works fine but loading a system dll(ntdll, user32..) will not work. It seems that there is something the loader doesn't handle when load the system dll into memory.
The text was updated successfully, but these errors were encountered: