首页
社区
课程
招聘
[转帖]用汇编语言写QQ任我聊
发表于: 2007-8-11 23:59 6054

[转帖]用汇编语言写QQ任我聊

2007-8-11 23:59
6054
以下转自电脑爱好者论坛
原帖地址:http://bbs.cfan.com.cn/thread-384930-1-1.html
原帖日期:2006-8-20
原帖作者:zhangke

[注意]原创,转载请注明!!!
呵呵!一个小工具而已,就是没加为好友也可以和别人聊天,临时会话!跟群里的和网站上的那种原理是一样的!

原理解析:
在Tencent的互动服务里面(http://imis.qq.com/)可以为你生成网页代码放到自己的网页中,让别人在网站上点一下就可以给你留言!
程序就是利用的这个生成的代码,直接在浏览器中输入
tencent://message/?uin=你想聊天的QQ号码&Site=im.qq.com&Menu=yes

就可以和别人聊天了,取消临时会话的用户不行(这个就是临时会话嘛!)
下面是汇编程序源代码:

.386
.model flat,stdcall  
option casemap:none  
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\masm32.inc
include \masm32\include\shell32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\shell32.lib
.data?
QQnum db ?
hInstance HINSTANCE ?
swidth  dd ?
sheight dd ?
dwidth  dd ?      
dheight dd ?
rect    RECT <>
mystr db ?
szTemp1 db ?
szTemp2 db ?
.data
str1 db "tencent://message/?uin=",0
str2 db "&Site=im.qq.com&Menu=yes",0
MainDialog db "MyDialog",0
szMutex db "zhangkesqqtalker",0
ErrorText db "Program already run...",0
ErrorTitle db "Warning!!!",0

.const
BTNSTART equ 1003
EDITNUM  equ 1002
.code

start:

Main proc
    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke DialogBoxParam,hInstance,addr MainDialog,NULL,addr DlgProc,NULL
    invoke ExitProcess,0
Main endp
DlgProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    .if uMsg==WM_INITDIALOG
        invoke CreateMutex,NULL,FALSE,addr szMutex
        invoke GetLastError
        .IF eax == ERROR_ALREADY_EXISTS
            invoke MessageBox,NULL,addr ErrorText,addr ErrorTitle,MB_ICONWARNING
            invoke ExitProcess,NULL
        .ENDIF
        ;上面几行代码的作用的防止程序多开(即只能运行一个实例)
        invoke GetSystemMetrics,SM_CXSCREEN     ;
        mov swidth,eax                          ;
        invoke GetSystemMetrics,SM_CYSCREEN     ;
        mov sheight,eax                         ;
        invoke GetWindowRect,hWnd,addr rect     ;
        mov eax,rect.right                      ;这几行是为下面invoke SetWindowPos做准备
        sub eax,rect.left                       ;
        mov dwidth,eax                          ;
        sub swidth,eax                          ;使窗体出现在屏幕中心
        mov eax,rect.bottom                     ;
        sub eax,rect.top                        ;
        mov dheight,eax                         ;其中不明白的地方看一下Platform SDK就可以了
        sub sheight,eax                         ;
        shr sheight,1                           ;
        shr swidth,1                            ;
        invoke SetWindowPos,hWnd,HWND_NOTOPMOST,swidth,sheight,dwidth,dheight,SWP_SHOWWINDOW
    .elseif uMsg==WM_COMMAND
        mov eax,wParam
          .if ax==BTNSTART
            invoke szCopy,addr str1,addr mystr
              invoke GetDlgItemText,hWnd,EDITNUM,addr QQnum,11
            invoke szCatStr,addr mystr,addr QQnum
              invoke szCatStr,addr mystr,addr str2
              invoke ShellExecute,NULL,NULL,addr mystr,NULL,NULL,SW_HIDE
        .endif
    .elseif uMsg==WM_CLOSE
        invoke EndDialog,hWnd,0
    .else
        mov eax,FALSE
          ret
    .endif
    mov eax,TRUE
    ret
DlgProc endp

end start

忘了说!补充一句,使用工具为MASM32!!!

有任何问题请与我联系:zk_invincible@163.com

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
2
就一个shellexecute调用,没多大实用性
2007-8-12 00:24
0
雪    币: 108
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
对于我这个初学Win32汇编的新手来说,还算个不错的例子!

不过楼主貌似没把RC文件的源码发上来?
2007-8-12 01:27
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
shellexecute谁都会用,但是别人没写出原理之前不是每个人都知道要shellexecute什么

rc文件在原文地址可以下载
2007-8-12 10:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个简单一点:

=========================

.486
.model flat,stdcall
option casemap:none

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;        Include 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include kernel32.inc
include shell32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
includelib shell32.lib

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;        Equ 数据 RC资源
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

DLG_MAIN        equ                1000
IDC_EDT         equ             1001
IDC_IDOK        equ             1002
QQ_N            equ             12            ;设置QQ号的最大位数

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.data

temp db "tencent://message/?uin=",'%s',"&Site=im.qq.com&Menu=yes",0

.data?
posBuffer  db 50+QQ_N dup (?)
qqtemp db QQ_N dup (?)
hInstance HINSTANCE ?  

.code

;********************************************************************
_ProcDlgMain        proc        uses ebx edi esi, \
                hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD

            mov eax,wMsg
   
               cmp eax,WM_CLOSE
            je  boxClose
        cmp eax,WM_INITDIALOG
        je  boxStart
        cmp eax,WM_COMMAND
        je commoand
   
   retFalse:
           mov        eax,FALSE
           ret   
                 
   boxClose:
          invoke EndDialog,hWnd,NULL
          jmp retTrue
         
   boxStart:
         
              invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0, SWP_NOMOVE or SWP_NOSIZE ;窗口置顶
              jmp retTrue
                  
   commoand:
           mov eax,wParam
      
          .if eax == IDC_IDOK
                          
              invoke GetDlgItemText,hWnd,IDC_EDT ,addr qqtemp,QQ_N  ;取用户输入到文本
                             
              invoke wsprintf,addr posBuffer,addr temp,addr qqtemp ;连接文本串
                              
              invoke ShellExecute,NULL,NULL,addr posBuffer,NULL,NULL,SW_HIDE  ;执行IE命令
                              
              ;invoke MessageBox,NULL,addr posBuffer,addr qqtemp,MB_ICONWARNING ;调试

           .endif
            
     retTrue:
      
           mov        eax,TRUE
           ret      

_ProcDlgMain        endp

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

start:
  invoke GetModuleHandle,NULL
  mov hInstance,eax
  invoke DialogBoxParam,eax,DLG_MAIN,NULL,offset _ProcDlgMain,0
  invoke ExitProcess,NULL

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

end        start
2007-8-12 21:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这种临时会话QQ需要验证,请问高手是怎么解决的?
2007-11-3 15:58
0
雪    币: 206
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
tencent://message/?uin=??
任何语言都一样。正如二楼所言
2007-11-4 09:14
0
游客
登录 | 注册 方可回帖
返回
//