Author: David Zimmer
Date: 03.14.11 - 3:05pm
I have been running lots of shellcode through scdbg, adding new api and dlls as required. With an emulator, you create the envirnoment, so if you want to support a function or replicate part of the Windows envirnoment, it has to be manually implemented.
This also has a cool side effect, in that if what you have doesnt work, you can investigate and what you find is usually something you didnt know about before. One of these little gems turned up today in the form of a shellcode that scans kernel32 dll memory looking for a static signature found within the opcodes of GetProcAddress. This is how it locates the function which it then uses to load the rest of its api.
00401020 . 56 PUSH ESI 00401021 > AC LODS BYTE PTR DS:[ESI] 00401022 . 3C 8B CMP AL,8B 00401024 .^75 FB JNZ SHORT 00401021 00401026 . 803E 7D CMP BYTE PTR DS:[ESI],7D 00401029 .^75 F6 JNZ SHORT 00401021 0040102B . 83C6 03 ADD ESI,3 0040102E . AD LODS DWORD PTR DS:[ESI] 0040102F . 3D FFFF0000 CMP EAX,0FFFF 00401034 .^75 EB JNZ SHORT 00401021 00401036 . 83EE 11 SUB ESI,11 Data it scans for: .text:GetProcAddress+9 8B 7D 0C mov edi, [ebp+lpProcName] .text:GetProcAddress+C BB FF FF 00 00 mov ebx, 0FFFFh