Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - .:UND3R:.

#991
Muchas gracias por la información, pero más bien el problema es mostrar el menú despegable o context menu (creo que así se llama), ya que logro detectar el doble clic, solo que me gustaría mostrar un menú al momento de hacer los dos clic aquí el código:

(Codigo poco limpio y consistente)

Código (asm) [Seleccionar]
TITLE  listview

.386
option casemap:none
.model flat,stdcall
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\comctl32.inc

includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\comctl32.lib

DlgProc PROTO,
hWnd:HWND,
uMsg:UINT,
wParam:WPARAM,
lParam:LPARAM

.const
IDC_LSV1 equ 1001
IDC_BTN1 equ 1002
M1 equ 1003
.data
DlgName byte "Hola",0
Heading1 byte "Test1",0
Heading2 byte "Test2",0

.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hlsv HANDLE ?
fila DWORD 0

.code
ShowOption proc
invoke SendMessage,hlsv,LVM_GETNEXTITEM,-1,LVNI_FOCUSED
; aquí obteniendo el item del listview me gustaría que se mostrara un MENU EMERGENTE
;invoke SendMessage,hlsv,LVM_DELETEITEM,eax,0
ret
ShowOption endp

InsertColumn proc,
hWnd:HWND
LOCAL lvc:LV_COLUMN
mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
mov lvc.pszText,offset Heading1
mov lvc.lx,150
invoke SendMessage,hWnd, LVM_INSERTCOLUMN,0,addr lvc

or lvc.imask,LVCF_FMT
mov lvc.fmt,LVCFMT_RIGHT
mov lvc.pszText,offset Heading2
mov lvc.lx,100
invoke SendMessage,hWnd, LVM_INSERTCOLUMN, 1 ,addr lvc
ret
InsertColumn endp

InsertItem proc
LOCAL lvi:LV_ITEM
mov lvi.imask,LVIF_TEXT+LVIF_PARAM

push fila
pop lvi.iItem

mov lvi.iSubItem,0
mov lvi.pszText,offset Heading1

push fila
pop lvi.lParam



invoke SendMessage,hlsv, LVM_INSERTITEM,0, addr lvi
mov lvi.imask,LVIF_TEXT
inc lvi.iSubItem
mov lvi.pszText,offset Heading2
invoke SendMessage,hlsv,LVM_SETITEM, 0,addr lvi
inc Heading2
push eax
push eax
ret
InsertItem endp

start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke DialogBoxParam,hInstance,ADDR DlgName,NULL,ADDR DlgProc,NULL
invoke ExitProcess,eax
DlgProc PROC hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg == WM_INITDIALOG
invoke InitCommonControls
invoke GetDlgItem,hWnd,IDC_LSV1
mov hlsv,eax
invoke InsertColumn,eax



; invoke GetDlgItem,hWnd,IDC_FOCUS
; invoke SetFocus,eax
.ELSEIF uMsg == WM_COMMAND
mov eax,wParam
mov edx,wParam
shr edx,16
.if dx==BN_CLICKED
.if ax==IDC_BTN1
invoke InsertItem
.endif
.endif
.ELSEIF uMsg == WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSEIF uMsg==WM_NOTIFY
push edi
mov edi,lParam
assume edi:ptr NMHDR
mov eax,[edi].hwndFrom
.if eax==hlsv
.if [edi].code==NM_DBLCLK
invoke ShowOption
.endif
.endif
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc ENDP
END start


Gracias y saludos
#992
cómo al hacer clic en un item de listview podría visualizar un menú despegable?

Gracias y saludos
#993
Era lo que me comentaban, muchísimas gracias a ambos, saludos  :)
#994
ASM / Re: Troyano MASM (duda con WINSOCK)
12 Mayo 2013, 18:49 PM
Gracias por las respuesta, me he basado en el orden presentado en MSDN (pero alterando el cliente por el servidor):

Server  (lo uso como cliente)
Initialize Winsock.
Create a socket.
Bind the socket.
Listen on the socket for a client.
Accept a connection from a client.
Receive and send data.
Disconnect.

Client (lo uso como servidor)
Initialize Winsock.
Create a socket.
Connect to the server.
Send and receive data.
Disconnect.

Saludos
#995
Hola a todos, actualmente estoy aprendiendo sobre listview y me surge la siguiente duda con el parámetro hWnd de la API SendMessage:

Tengo el siguiente código:

Código (asm) [Seleccionar]
TITLE  listview

.386
option casemap:none
.model flat,stdcall
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\comctl32.inc

includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\comctl32.lib

DlgProc PROTO,
hWnd:HWND,
uMsg:UINT,
wParam:WPARAM,
lParam:LPARAM

.const

.data
DlgName byte "Hola",0
Heading1 byte "Test1",0
Heading2 byte "Test2",0

.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?

.code
InsertColumn proc,
hWnd:HWND
LOCAL lvc:LV_COLUMN
mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
mov lvc.pszText,offset Heading1
mov lvc.lx,150
invoke SendMessage,hWnd, LVM_INSERTCOLUMN,0,addr lvc
or lvc.imask,LVCF_FMT
mov lvc.fmt,LVCFMT_RIGHT
mov lvc.pszText,offset Heading2
mov lvc.lx,100
invoke SendMessage,hWnd, LVM_INSERTCOLUMN, 1 ,addr lvc
ret
InsertColumn endp

start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke DialogBoxParam,hInstance,ADDR DlgName,NULL,ADDR DlgProc,NULL
invoke ExitProcess,eax
DlgProc PROC hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg == WM_INITDIALOG
invoke InitCommonControls
invoke InsertColumn,hWnd
; invoke GetDlgItem,hWnd,IDC_FOCUS
; invoke SetFocus,eax
.ELSEIF uMsg == WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc ENDP
END start


El problema que tengo es que la siguiente línea no funciona correctamente:

Código (asm) [Seleccionar]
invoke SendMessage,hWnd, LVM_INSERTCOLUMN,0,addr lvc

¿alguien podría guiarme para insertar las columnas?, saludos y gracias de ante mano

Solución: obtener con GetDlgItem el manejador:

Código (asm) [Seleccionar]
TITLE  listview

.386
option casemap:none
.model flat,stdcall
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\comctl32.inc

includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\comctl32.lib

DlgProc PROTO,
hWnd:HWND,
uMsg:UINT,
wParam:WPARAM,
lParam:LPARAM

.const
IDC_LSV1 equ 1001

.data
DlgName byte "Hola",0
Heading1 byte "Test1",0
Heading2 byte "Test2",0

.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?

.code
InsertColumn proc,
hWnd:HWND
LOCAL lvc:LV_COLUMN
mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
mov lvc.pszText,offset Heading1
mov lvc.lx,150
invoke SendMessage,hWnd, LVM_INSERTCOLUMN,0,addr lvc
or lvc.imask,LVCF_FMT
mov lvc.fmt,LVCFMT_RIGHT
mov lvc.pszText,offset Heading2
mov lvc.lx,100
invoke SendMessage,hWnd, LVM_INSERTCOLUMN, 1 ,addr lvc
ret
InsertColumn endp

start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke DialogBoxParam,hInstance,ADDR DlgName,NULL,ADDR DlgProc,NULL
invoke ExitProcess,eax
DlgProc PROC hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg == WM_INITDIALOG
invoke InitCommonControls
invoke GetDlgItem,hWnd,IDC_LSV1
invoke InsertColumn,eax
; invoke GetDlgItem,hWnd,IDC_FOCUS
; invoke SetFocus,eax
.ELSEIF uMsg == WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc ENDP
END start
#996
Desconozco de un programa de ofuscación en particular para lo que buscas, aun así te recomiendo que a parte de la ofuscación (si es que no las tienes) crees funciones que se encarguen de detectar presencias de debugger, puedes encontrar un sin fin de guías en Internet o aquí mismo, saludos.
#997
Intentando elaborar un troyano me surge la siguiente duda:

¿Cómo podría crear múltiples conexiones entrantes desde el cliente?

¿Debería crear un socket para cada conexión?, ¿Si es así, sería más menos lo siguiente?:

Client:
Initialize Winsock.
Create a socket.
Bind the socket.
Listen on the socket for a client.
Accept a connection from a client.
(¿aquí debería crear socket, bind y listen nuevamente y aceptar conexión con ese nuevo socket?)
Receive and send data.
Disconnect.

Saludos.

SOLUCIONADO:
Era tal como pregunté, saludos.
#998
Información API:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms737526(v=vs.85).aspx

Siguiendo con el estudio de WINSOCK estoy algo confundido con respecto a la API accept, ya que si pongo los parámetros:

Citar_Out_    struct sockaddr *addr,
 _Inout_  int *addrlen

LÍNEA 55: invoke accept,sock,addr acpt,sizeof acpt

Este me arroja un error:

Código (asm) [Seleccionar]
TITLE  cliente

.386
option casemap:none
.model flat,stdcall
include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\ws2_32.inc

includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
includelib  c:\masm32\lib\ws2_32.lib

.const

.data
wsadata WSADATA <>
sin sockaddr_in <>
acpt sockaddr <>

errort    byte "Error Server",0 ; temp
error1    byte "Error WSAStartup",0 ; temp
error2  byte "Error socket",0 ; temp
error3  byte "Error listen",0 ; temp
error4  byte "Error bind",0 ; temp

look  byte "Conexión recibida",0 ; temp

Port  equ 61116

.data?
sock SOCKET ?

.code
main PROC
invoke WSAStartup,101h,addr wsadata
.if eax!=NULL
invoke MessageBox,NULL,addr error1,addr errort,MB_ICONERROR + MB_OK ; temp
.else
invoke socket,AF_INET,SOCK_STREAM,0

.if eax!=INVALID_SOCKET
mov sock,eax
mov sin.sin_family,AF_INET
mov sin.sin_addr,INADDR_ANY
invoke htons,Port
mov sin.sin_port,ax

invoke bind,sock,addr sin,sizeof sin
.if eax!=SOCKET_ERROR
invoke listen,sock,15
.if eax!=SOCKET_ERROR
.while(TRUE)
invoke accept,sock,addr acpt,sizeof acpt
.if eax!=SOCKET_ERROR
invoke MessageBox,NULL,addr look,addr errort,MB_ICONERROR + MB_OK ; temp
.else
invoke WSAGetLastError
.endif
.endw
.else
invoke MessageBox,NULL,addr error3,addr errort,MB_ICONERROR + MB_OK ; temp
.endif
.else
invoke MessageBox,NULL,addr error4,addr errort,MB_ICONERROR + MB_OK ; temp
.endif
.else
invoke MessageBox,NULL,addr error2,addr errort,MB_ICONERROR + MB_OK ; temp
.endif
.endif

   invoke ExitProcess,0
main ENDP
END main


¿Cómo soluciono esto?
¿Para que sirve exactamente estos parámetros?

Gracias y saludos.

EDIT: El error generado al llamar accept es el siguiente:

271E (WSAEFAULT)   An invalid argument was supplied to the Windows Sockets API.
#999
Hola a todos, algo aburrido estoy intentando crear un troyano tipo conexión inversa, pero me nacen dudas con respecto a las API's de WinSock, me gustaría saber más menos el orden de estas y su aplicación (si se aplica en cliente o en el servidor):

CLIENTE:
- WSAStartup
- socket
- listen
- accept
[espera la interacción del usuario con el cliente]
- send (dependiendo de la opción que seleccione)
si la opción recibe datos:
- recv
- funcion mostrar

SERVIDOR:
- WSAStartup
- socket
- connect
- listen
- accept
- recv
if dependiendo de la opción recibida
si la opción recibida envía datos:
- send

A ver si me ayudan por favor, saludos.
#1000
Ingeniería Inversa / Re: Ayuda con .DLL
8 Abril 2013, 12:36 PM
Les comento que todo salió a la perfección, saludos.  ;-)