汇编GDI绘图晋级篇:屏幕重绘并实现简单的左键控制

前面说到汇编仅仅用一个API就实现窗口重绘..

https://shadowkong.com/archives/104

今天再次用汇编尝试屏幕重绘 虽然效果一样 但是用到的API大有不同~

整个屏幕重绘的关键代码:

invoke GetDC,hWin2
mov @hDc2,eax;
invoke CreateDC,addr szDriver,NULL,NULL,NULL
mov @hDc1,eax;
invoke GetClientRect,hWin2,addr @stRect
invoke BitBlt,@hDc2,0,0,@stRect.right,@stRect.bottom,\
@hDc1,0,0,SRCCOPY
invoke ReleaseDC,hWin2,@hDc2
invoke DeleteDC,@hDc1

窗口重绘和屏幕重绘分别用到不同的API配对~

说实话屏幕重绘其实就是那么简单~

但是我额外给它加了个功能:

屏幕响应窗口按键~

也就是相当于QQ远程协助中的远程控制…

当然这里只实现了简单的 鼠标键键和鼠标指针移动…

上图上图..

原理在于:

用特别的API获取屏幕句柄~

.elseif eax== WM_CREATE

invoke GetDesktopWindow

mov WindowHwnd,eax

然后通过处理窗口按键时候的坐标在屏幕相应坐标响应事件~

mov eax,@stPoint.y

shl eax,16

add eax,@stPoint.x

invoke PostMessage,WindowHwnd,WM_LBUTTONDOWN,MK_LBUTTON,eax

invoke PostMessage,WindowHwnd,WM_LBUTTONUP,0,eax

呃 就是这样…

基本原理就是这样…

更深入的问题是:

如何是它能实现响应IO消息?

如何与HOOK联合起来形成屏幕监视?

如何与网编联合起来实现类似远程控制?

这涉及到TCP\IP协议族的图片传输问题..(暂时不能解决)

浅谈WIN32汇编下捕获远程消息

最近闲来无事去搞了下网编 不如直接说看了下教程比较真实,研究了下在TCP/IP协议族的汇编编程和WINDOWS远程钩子,发现其中两者联合起来用 会有意想不到的效果,(所谓的最简单的监视病毒应该就是这样子的吧)。

简单的说:

原理

通过TCP协议 建立连接 建立套接字 绑定IP  建立监听  路由器映射 等一系列的措施后

A:在服务端上建立远程日记钩子(其他钩子也成吧..)在钩子上指定捕获消息参数(例如键盘参数:WM_KEYDOWN)

B:在客户端建立接收器 分析数据包和接收消息

代码实现:(网站空间有限 只给出具体API不详细解说用法)

建立连接服务端部分:

A:调用 WSAStartup 和socket建立套接字(具体逻辑过程)

B:调用WSAAsyncSelect,htons,bind绑定和监听..

C:调用RECV函数来接受数据

别忘记在关闭程序的时候调用closesocket关闭套接字

建立连接客户端部分:

A:socket,WSAAsyncSelect建立套接字

B:连接到服务器中监听的套接字inet_addr,htons,connect

C:recv调用RECV函数来接受数据

别忘记在关闭程序的时候调用closesocket关闭套接字

钩子部分:(在服务端)

A:在初始化消息处建立钩子,调用SetWindowsHookEx

B:编写钩子回调函数,调用CallNextHookEx(防止钩子不止一个,若同类钩子多个需要调用这个函数传递消息),如果是捕获对方WM_KEYDOWN消息的话则调用GetKeyboardState,GetKeyState处理按键消息

C:向客户端(远程监视方)发生消息send

贴点代码比较好看?

钩子回调函数部分…

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

HookProc proc _dwCode,_wParam,_lParam
local @szKeyState[256]:byte
invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam
pushad
.if _dwCode == HC_ACTION
mov ebx,_lParam
assume ebx:ptr EVENTMSG
.if [ebx].message == WM_KEYDOWN
invoke GetKeyboardState,addr @szKeyState
invoke GetKeyState,VK_SHIFT
mov @szKeyState + VK_SHIFT,al
mov ecx,[ebx].paramH
shr ecx,16
invoke ToAscii,[ebx].paramL,ecx,addr @szKeyState,addr szAscii,0
mov byte ptr szAscii [eax],0
.if szAscii == 0dh
mov word ptr szAscii+1,0ah
.endif
invoke SendDlgItemMessage,hWinMain,IDC_TEXT,EM_REPLACESEL,0,addr szAscii
.endif
assume ebx:nothing
.endif
popad
xor eax,eax
ret
HookProc endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

以下是效果图…

结果被清风美其名曰..键盘记录器..

只上传PE文件..源码就那啥了..毕竟不是啥好东西

http://dl.dbank.com/c0fb6y7fyk

汇编实现扫描+清理垃圾

最近清理系统垃圾,发现三年前清风给了个文件…

是清风给的一个批处理…代码如下:(保存为.BAT文件即可)
[code lang=”java”]

@echo off
echo 正在清除系统垃圾文件,请稍等……
del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old
del /f /s /q %systemdrive%\recycled\*.*
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\prefetch\*.*
rd /s /q %windir%\temp & md %windir%\temp
del /f /q %userprofile%\cookies\*.*
del /f /q %userprofile%\recent\*.*
del /f /s /q “%userprofile%\Local Settings\Temporary Internet Files\*.*”
del /f /s /q “%userprofile%\Local Settings\Temp\*.*”
del /f /s /q “%userprofile%\recent\*.*”
echo 清除系统垃圾完成!
echo. & pause

[/code]

代码没什么问题..问题在于执行批处理后CMD跳出的不兼容UNICODE,而导致少部分返回的信息根本就是乱码…(当然在VS2008的命令提示下支持)
于是用汇编写了个类似的…接下来看下返回信息的效果:
执行中:
顺便提下..执行的过程中是虚化的 因为..删除文件过程中涉及内存优化的问题..暂时解决不了~这个技术难题也导致我在用自己的程序全盘扫描完毕的时候和用AVAST全盘扫描完毕后机子的速度天差地别…
虚化主要实现首先是给窗口WS_EXD_LAYERED属性…
;code>>>
invoke    GetWindowLong,hwnd,GWL_EXSTYLE
or             eax,WS_EXD_LAYERED
invoke    SetWindowLong,hwnd,GWL_EXSTYLE,eax
invoke     SetLayeredWindowAttributes,hwnd,0,bAlpha,LWA_ALPHA
;end>>>至于放在什么位置随意拉~
执行完毕后看效果:
完全没有UNICODE乱码的问题….
窗口下方还有扫描硬盘文件的功能  功能的实现主要是参照教程什么的~
一下是各个功能实现用到的技巧点:
虚化:指定窗口WS_EXD_LAYERED,调用SetLayeredWindowAttributes
清理垃圾:创建管道,调用clean.bat并把信息写入窗口文本
;CODE>>>
push eax
mov    eax,100
mov    bAlpha,eax
invoke     SetLayeredWindowAttributes,hWnd,0,bAlpha,LWA_ALPHA
pop   eax;虚化
.while TRUE
invoke RtlZeroMemory,addr buffer,1024
invoke ReadFile,hRead,addr buffer,1023,addr bytesRead,NULL
.if eax==NULL
.break
.endif
invoke SendMessage,hwndEdit,EM_SETSEL,-1,0
invoke SendMessage,hwndEdit,EM_REPLACESEL,FALSE,addr buffer
.endw
push eax
mov    eax,255
mov    bAlpha,eax
invoke     SetLayeredWindowAttributes,hWnd,0,bAlpha,LWA_ALPHA     ;ÉèÖÃ͸Ã÷
pop eax;实化
;END>>
清理垃圾:其实还可以用筛选扫描直接DELDETEFILE…这样估计就不会卡机0.0
扫描:定义COM接口 调用FindFirstFile FindNextFile等..
硬盘文件大小的计算这个就没啥好说了..分析WIN32_FIND_DATA结构
存在的问题:(1)扫描返回信息的时候输出的信息处理不完善.
(2)扫描完后的收尾工作不会 例如整理内存
(3)清理垃圾的时候会卡机..(虚化的作用是防止在这个时候给窗口发送其他消息)
(4)筛选扫描上有问题…分析 WIN32_FIND_DATA结构逻辑出问题了
但是清理垃圾的功能还是没问题的…
有个问题强调下..本人业余 (防吐槽)
以下是EXE+源码:

汇编书籍整合

最近有朋友说搞汇编不知道看什么书,哎 当初我也遇到这个问题很困惑了很久~走了许多弯路(什么?看书都走弯路..呃 由于咱实在小白 所以一开始看<C专家编程>果然天书呢..兴许你不会)

此处用来整合我许久以来在互联网上多处寻得的关于学习汇编各个方面的书籍,由于可能对于初学者来说,从什么地方开始都是一个难题..(呵呵 有点自大了呢)..PPS:自己没看过的我不会贴上来..

本来这贴在那啥博客上的,但是后来发现一个问题所以贴回这里了..果然自己的网站里啥都方便啊~但是认为太SB的东西又不敢挂上来 (现在的情况是,偶尔会认为自己昨天之前很SB)..因为只有可怜的300MB啊~而且两个邮箱都好贵好贵了..

(1)16位入门经典书籍 王爽汇编语言 经典中的经典(给朋友的建议:如果你真的想学汇编,这本书就必须完成其中的各个任务,否则浪费了王爽老师的一片苦心)

作者:王爽

这本书没找到清晰版 不过这个版本也不错 你可以去其他地方找找看..

汇编语言:http://dl.dbank.com/c02witsx3z

答案:http://dl.dbank.com/c0in8om672

(2)Win32入门经典书籍 高清版 INTEL汇编语言程序设计

作者:Kip Irvine

作者网站:http://kipirvine.com/asm/

网上很多模糊版本 唯独这个是高清版 花了我不少时间去找呢…(源代码随便G.CN上都有 这里就不放上来了)

我曾致电作者,不过作者似乎一直忙着另外一本书的写作 无暇顾及读者呢..呵呵 当然也可能是由于我魅力不够..抑或ZG人在国际形象不好。。。人家懒得理

A卷:http://dl.dbank.com/c01i0vqwk5#

B卷:http://dl.dbank.com/c089t7nqw4

(3)Win32汇编编程技巧介绍书:Iczelion的Win32汇编教程

作者:Iczelion

着本书总的来说是相对于有一定Win32汇编基础的或者是有高级编程语言基础的人,总的来说就是API,API,API 几个经典的API调用,但是的却非常精简 全是必要的技术部分 值得一看!

书籍:http://dl.dbank.com/c0ltkvv7te

(4)从DOW到WIN32汇编书 出自AOGO论坛的 DOS2WIN32

整合:AOGO坛友

这资料总的来说是不错的,因为整合了AOGO汇编论坛的精华部分,但是看个人喜欢不喜欢咯..

AOGO论坛虽然现在人气下降,但确是我最喜欢的论坛之一..感觉一下回到了90年代的..清新自然

DOS2Win:http://dl.dbank.com/c0hypuzhfn

(5)Win32位汇编最经典书籍:Windows环境下32位汇编语言程序设计 第一版 第二版

作者:罗云彬

这本书一直被汇编界奉为经典中的经典 等级和王爽老师的同级 一个16位 一个32位 撑起整个汇编语言学习界,由于汇编本来研究的人就不多 学的人也不多,这就造就了关于汇编的教程少之又少 幸亏有这这两个老师的努力编写,在这里必须给他们敬礼..以下是URL

说明:第一版不是扫描版而是完全的字体版 非常好 我找了很久才找到..

第二版是扫描版 清晰度一般..第二版在内容上和第一版差不多 但是第二版扩充了点内容…

第一版:http://dl.dbank.com/c0gn6a6lzx

第二版:http://dl.dbank.com/c0w2dh7s0b

(6)保护模式下编程:保护模式下汇编编程

作者:昌哥

这本书..不好描述 但是很受汇编学习着的欢迎..当然也许我说错了..

书籍:http://dl.dbank.com/c0oe8t9igy

PS:暂时就那么多,以后再更新

汇编实现简单的关机软件

最近很多朋友老纠结于怎么定时关机..所以用汇编做了个~

当然只是实现 没去完善…有兴趣的朋友可以拿去完善下~

功能有重启关机注销等…定时是定到规定时间的~

其实这比动态关机时间更难实现..

仅限XP…如果是WIN7要改下调用路径..

怎么改:

以下API就是WINDOWS提供的最好方法:

invoke GetCurrentDirectory,dwBufferSize,lpBuffer ;获取当前目录
invoke GetTempPath,dwBufferSize,lpBuffer ;获取临时目录
invoke GetWindowsDirectory,lpBuffer,dwBufferSize ;获取Windows目录
invoke GetSystemDirectory,lpBuffer,dwBufferSize ;获取系统目录

你要调用那个系统PE文件就..捕获它所在的..目录然后.加上你要调用的文件名..

http://dl.dbank.com/c0qxwtvgyb

wp核心文件记录

1.WPINC/load.php,定义一组加载 WP 所需要的函数,无执行代码;
2.WPINC/default-constants.php,定义一组函数,这些函数对那些能够被重写的常量和全局变量进行默认赋值,它们通常可以在 wp-config.php 中重新配置,无执行代码;
3.WPINC/compat.php,提供某些 PHP 版本缺少的函数(用于支持不同版本 PHP 上的兼容和移植),无执行代码;
4.WPINC/functions.php,定义 WP 主要的 API,无执行代码;
5.WPINC/classes.php,定义 WP 主要的类,无执行代码。
6.WPINC/plugin.php,定义插件 API,这些 API 用于创建 action、filter、以及钩子函数和方法,无执行代码;
7.WPINC/pomo/mo.php,定义语言处理类 MO,并加载文件,无执行代码:
8.WPINC/pomo/translations.php,定义对 entry 进行翻译的相关类,并加载文件,无执行代码:
9.WPINC/pomo/entry.php,定义翻译实体类 Translation_Entry,无执行代码;
10.WPINC/pomo/streams.php,定义一组类,用于从文件读入数据流,无执行代码。

————————我是基本功能分割线————————

11.WPINC/l10n.php,定义一组进行语言翻译的 API/函数,无执行代码。
12.WPINC/formatting.php,定义 WP 主要格式化API,用于对文本、字符串、函数输出进行格式化,无执行代码;
13.WPINC/query.php,定义一组 WP 的查询 API,无执行代码;
14.WPINC/theme.php,定义一组主题、模板和样式表函数,无执行代码;
15.WPINC/user.php,定义一组 WP 的用户 API,无执行代码;
16.WPINC/meta.php,定义一组元数据 API,这些 API 用于获取和操作 WP 中各种对象类型的元数据,一个对象的元数据简单的表示为键值对,对象可能包含多个元数据实体,他们有相同的键但不同的值,无执行代码;
17.WPINC/general-template.php,定义常用的模板标签,它们可以在模板中任意使用,无可执行代码;
18.WPINC/link-template.php,定义一组模板中处理链接的函数(例如处理固定链接),无可执行代码;
19.WPINC/author-template.php,定义一组模板中处理作者的函数,这些函数在主题中使用,并且必须出现在 WP LOOP 中,无可执行代码;
20.WPINC/post-template.php,定义一组模板中处理文章的函数,用于获取 Loop 中当前文章的内容,无可执行代码;
21.WPINC/category.php,定义一组 WP 的目录 API,无可执行代码;
22.WPINC/category-template.php,定义一组目录的模板标签和 API,无可执行代码;
23.WPINC/comment.php,定义一组 WP 的评论 API,无可执行代码;
24.WPINC/comment-template.php,定义一组评论的模板标签,旨在 Loop 中有用,无可执行代码;
25.WPINC/feed.php,定义一组 WP 的 Feed API,其中大部分只在 Loop 中使用,无可执行代码;
26.WPINC/bookmark.php,定义一组 WP 的友情链接/书签 API,无可执行代码;
27.WPINC/bookmark-template.php,定义一组书签的模板标签,无可执行代码;
28.WPINC/cron.php,定义一组 WP 的 CRON(定时任务) API,用于进行事件调度,无可执行代码;
29.WPINC/deprecated.php,一组已废弃的 API,无可执行代码;
30.WPINC/class.wp-dependencies.php,定义类 WP_Dependencies 和 _WP_Dependency,用于反压脚本队列,这些类由 WP_Scripts类和 WP 脚本队列 API 重构而来,无可执行代码;
31.WPINC/class.wp-scripts.php,定义类 WP_Scripts,继承自 WP_Dependencies,功能同上,无可执行代码;