Advertisement
Guest User

Untitled

a guest
Sep 12th, 2013
309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. use32
  2. pushad
  3.  
  4.       mov  esi, $401000       ;WARNING: DEFAULT IMAGEBASE + SECTION SIZE
  5. @@:   lodsd                   ;EAX = [EDI];EDI+=4
  6.       test eax, eax           ;Did we reach the end?
  7.      je    .exit
  8.       cmp  DWORD[eax], $83EC8B55
  9.      jne   @B
  10.       cmp  DWORD[eax+4], $8D560CEC
  11.      jne   @B                 ;> Opcode matching, is it DllFunctionCall()?
  12.  
  13.       cdq                     ;EDX = 0
  14.       push edx                ;v
  15.       push edx                ;v
  16.       push edx                ;> buffer
  17.       push esp                ;Pointer to buffer
  18.       push $40000             ;Reserved
  19.       push DWORD[esp+$40]     ;Fnc
  20.       push DWORD[esp+$40]     ;Lib
  21.  
  22.       push esp                ;APICall structure made in stack
  23.       call eax                ;DllFunctionCall(APICall)
  24.       add  esp, 7*4           ;Clear stack
  25.  
  26.       mov  edx, [esp+$24]     ;&SAFEARRAY
  27.       mov  edx, [edx]         ;SAFEARRAY
  28.       test edx, edx
  29.      jz    .call
  30.       mov  ecx, [edx+$10]     ;SAFEARRAY size Elements
  31.       mov  esi, [edx+$C]      ;SAFEARRAY.pvData
  32.       imul edi, ecx, $10      ;v
  33.       add  esi, edi           ;>last variant
  34. @@:   sub  esi, $10           ;ESI = prev variant
  35.       mov  ebx, [esi+$8]      ;EAX = VARIANT.lVal
  36.       push ebx
  37.       loopne @B               ;Repeat
  38.  
  39. .call:call eax
  40.  
  41. .exit:mov  [esp-$1C], eax     ;Save return
  42.  
  43. popad
  44. ret 4*4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement