很久没用汇编写程序了,昨天看到一哥们用易语言写的QQ消息群发器,感觉很好玩,手痒用汇编写了个,没什么技术含量,纯模拟键盘输入,游戏之作,欢迎大家拍砖 ^-^
核心代码:
;########################################################################
; QQ消息群发器V1.0 by nohacks
;
; QQ:23453161 web:http://hi.baidu.com/nohacksa
;#####################################################
SendProc proc
LOCAL IsCheck,IsRet,Islen
mov IsRet,40
;检查循环设置
invoke SendDlgItemMessage,AppHwnd,IDC_CHK,BM_GETCHECK,0,0
mov IsCheck,eax
;检查展开设置
invoke SendDlgItemMessage,AppHwnd,IDC_CHK_LEN,BM_GETCHECK,0,0
mov Islen,eax
; 取用户输入
invoke GetDlgItemText,AppHwnd,IDC_EDT ,addr lpText,1024
;invoke LinkText,addr lpText,CTEXT(" 本消息由AiQQ发送 ") ;加点尾巴,^-^
start1:
invoke SetWindowForeground,QQHwnd ;QQ获取焦点
.if !eax
jmp exit
.endif
start2:
.if IsExit
jmp exit
.endif
invoke SimulateKey,IsRet,NULL,NULL,NULL ;向下或向上移动一次
.if IsCheck==0 && IsRet==38 ;如果循环设置关闭且光标向上就结束操作
jmp exit
.endif
invoke SendReTurn
invoke Sleep,1000 ;等待窗口载入
invoke GetForegroundWindow ;取前台窗口
.if eax==QQHwnd
invoke SendReTurn ;没有创建新窗口,遇到分组,再回车下还原现场
;我们下移回车看下是否有窗口创建
invoke SimulateKey,IsRet,NULL,NULL,NULL ;
invoke Sleep ,100
invoke SendReTurn
invoke Sleep,100
invoke GetForegroundWindow
;下移回车后有3种情况:
;1,不在QQ窗口,为展开的分组
;2,在QQ窗口,没有展开
;3.到尾部
.if eax==QQHwnd ;没有窗口创建,说明分组没有展开,我们后退之前的操作
invoke SendReTurn ;回车
.if IsRet==40 && Islen ;注意必须为向下时
;invoke SendReTurn ;回车
invoke Sleep,100
invoke SimulateKey,38,NULL,NULL,NULL ;上移
;展开分组
invoke SendReTurn
.endif
;检查是否到尾部
invoke SimulateKey,IsRet,NULL,NULL,NULL ;按IsRet移动上或下方向键
invoke SendReTurn
invoke Sleep,1000
invoke GetForegroundWindow
.if eax==QQHwnd ;判断到达尾部 IsRet=取反(IsRet)
.if IsRet==40
mov IsRet,38
.else
mov IsRet,40
.endif
jmp start2
.endif
.endif
.endif
start3:
invoke SetClipboardText,addr lpText ;设置输入到剪切板
invoke Sleep,100
invoke SimulateKey,VK_CONTROL,VK_V,NULL,NULL ;CTRL+V 粘贴
invoke Sleep,100
invoke SimulateKey,VK_MENU,VK_S,NULL,NULL ;ALT+S 发送
invoke Sleep,100
;invoke SimulateKey,VK_MENU,VK_C,NULL,NULL ;ALT+C 关闭
invoke GetForegroundWindow
.if eax!=QQHwnd
invoke SimulateKey,VK_MENU,VK_F4,NULL,NULL ;ALT+F4
.endif
invoke Sleep,1000
jmp start1
exit:
invoke SendDlgItemMessage,AppHwnd,IDC_EDT,WM_ENABLE,TRUE,0
ret
SendProc endp
上面的代码逻辑上可能有点错误,待修正!
另外看下面的代码,QQ的版本不同就需要修改,QQ版不同本默认焦点可能不同!
;窗口显示并获取焦点
SetWindowForeground proc hwnd
; LOCAL pornt:POINTAPI
;invoke ClientToScreen ,hwnd,addr pornt
; add pornt.x ,200
;add pornt.y,200
; invoke SetCursorPos,pornt.x ,pornt.y
invoke IsWindow,hwnd
.IF !eax
mov eax,0
ret
.endif
invoke ShowWindow,hwnd,SW_SHOW
invoke SetForegroundWindow ,hwnd
;invoke mouse_event,2,0,0,0,0
;invoke mouse_event,4,0,0,0,0
invoke Sleep,200
invoke SimulateKey,VK_TAB,NULL,NULL,NULL
invoke Sleep,200
invoke SimulateKey,VK_TAB,NULL,NULL,NULL
mov eax,TRUE
ret
SetWindowForeground endp
然后是完整的原代码:(RADasm+MASM)
[课程]Android-CTF解题方法汇总!