rendered paste body;======================================================================
; l2extender for l2server.exe x64 version
; Write by x64, Copyright (C) 2006
; Email & MSN Messenger:ezasm(ezasm@hotmail.com)
;======================================================================
include stdafx.inc
.const
.code
;==============================================================
;BYTE * GetUserObjectByName(BYTE *pUserSocket, wchar_t *pwszName)
;
;ŇÔ//sendhome char_nameÎŞ»ů׼
;
;rsp + 90h ·µ»Ř˝áąű˝áąążŞĘĽ
;rsp + A8h ˛éŃŻ˝áąąĚ忪ʼ
;rsp + 120h СдµÄĂű×Ö
;==============================================================
GetUserObjectByName proc
mov [rsp+08h], rcx ;socket
mov [rsp+10h], rdx ;name
mov [rsp+18h], rsi
mov [rsp+20h], rdi
mov rsi, rcx
mov rdi, rdx
sub rsp, 200h ;»şłĺÇř
mov rsi, [rsi + 158h] ;OFFSET_USERSOCKET_USER
test rsi, rsi
jnz JUMP_START
xor rax, rax ;·µ»ŘżŐÖ¸Őë
jmp JUMP_PROC_END
JUMP_START:
;Ľě˛é˝ÇÉ«Ăűł¤¶Č,ł¬ąý15×Ö·űÔň·µ»ŘżŐÖ¸Őë
mov rcx, rdi
call wcslen
cmp rax, 10h
jl JUMP_CHK_NAME_OK
xor rax, rax ;Ăű×Öł¬ł¤Ôň·µ»ŘżŐ
jmp JUMP_PROC_END
JUMP_CHK_NAME_OK:
;ÄÚ´ćÖĂ0
lea rcx, [rsp]
xor rdx, rdx
mov r8, 200h
call memset
mov rcx, rdi ;Ăű×Ö
lea rdx, [rsp + 120h] ;ת»»ÎŞĐˇĐ´
mov rax, 00759D40h
call rax ;LCase
;-----------------------------
;***0045A21E
mov r8d, 0E7Eh
mov rdx, 00831C40h ; ".\\BuilderCmdHandler.cpp"
mov rcx, rsi
mov rax, 004331A0h
call rax ;Creature_ReadLock
;***ĚîłäλÖĂA0,δ֪..ËĆşő˛»Đ´Ň˛żÉŇÔ
mov rax, [rsi]
mov rcx, rsi
mov rax, [rax + 2C8h]
call rax
mov [rsp + 0A0h], eax
;ĚîłäλÖĂD0,δ֪
mov rax, [rsi]
mov rcx, rsi
mov rax, [rax + 778h]
call rax
mov [rsp + 0D0h], eax
;ĚîłäλÖĂ100,˛éŃŻŐߵĵǽŐĘşĹ
lea r8, [rsi + 27FCh]
mov edx, 0Fh
lea rcx, [rsp + 100h]
call wcscpy_s
;***0045A305
mov rcx, rsi
mov rax, 00439A60h
call rax ;Creature_ReadUnlock
;----------------------------
;Ěîłä˝ÇÉ«Ăű
lea rcx, [rsp + 120h] ;ĽĆË㳤¶Č
call wcslen
cmp rax, 8 ;×î´ół¤¶Č
jl JUMP_SHORT_NAME
mov [rsp + 0C0h], rax ;×Ö·ű¸öĘý
mov rcx, 0Fh
mov [rsp + 0C8h], rcx ;×î´ół¤¶Č 0x0F
xor r8, r8
mov rdx, rax
lea rcx, [rsp + 0A8h]
mov rax, 00407970h
call rax ;operater new()
jmp JUMP_COPY_NAME_DONE
JUMP_SHORT_NAME:
mov [rsp + 0C0h], rax ;×Ö·ű¸öĘý
mov rcx, 07h
mov [rsp + 0C8h], rcx ;×î´ół¤¶Č 0x07
lea r9, [rax + rax]
lea r8, [rsp + 120h]
lea rdx, [rcx + rcx] ;»şłĺÇř´óС
lea rcx, [rsp + 0B0h]
call memcpy_s
JUMP_COPY_NAME_DONE:
lea rax, [rsp + 0A8h]
mov [rsp + 0E0h], rax
lea r8, [rsp + 0A8h]
lea rdx, [rsp + 090h]
mov rcx, 0E842BC0h
mov rax, 00455610h
call rax
mov rax, [rsp + 090h]
JUMP_PROC_END:
add rsp, 200h ;»şłĺÇř
mov rsi, [rsp+18h]
mov rdi, [rsp+20h]
ret
GetUserObjectByName endp
END