dll注入

.版本 2

.DLL命令 寻找窗口句柄, 整数型, "user32", "FindWindowExA", , , 寻找窗口句柄
    .参数 hwndParent, 整数型, , 父窗口句柄
    .参数 hwndChildAfter, 整数型, , 子窗口句柄
    .参数 lpszClass, 文本型, , 类名
    .参数 lpszWindow, 文本型, , 标题

.DLL命令 取模块句柄, 整数型, "kernel32", "GetModuleHandleA", , API_GetModuleHandle  获取一个应用程序或动态链接库的模块句柄  如执行成功成功,则返回模块句柄。零表示失败。会设置GetLastError
    .参数 lpModuleName, 文本型, , 指定模块名,这通常是与模块的文件名相同的一个名字。例如,NOTEPAD.EXE程序的模块文件名就叫作NOTEPAD;

.DLL命令 取窗口进程线程PID, 整数型, "user32.dll", "GetWindowThreadProcessId", , , 取窗口进程线程PID。返回线程PID
    .参数 hWnd, 整数型, , 窗口句柄
    .参数 lpdwProcessId, 整数型, 传址, 返回进程ID 指定一个变量,用于装载拥有那个窗口的一个进程pid

.DLL命令 CallNextHookEx, 整数型, , "CallNextHookEx", , , 下一个钩子
    .参数 hhk, 整数型
    .参数 nCode, 整数型
    .参数 wParam, 整数型
    .参数 lParam, 整数型

.DLL命令 创建钩子, 整数型, , "SetWindowsHookExA", , , 创建钩子
    .参数 idHook, 整数型, , 第一个参数是钩子类型。全局鼠标是14.键盘是13.
    .参数 lpfn, 子程序指针, , .第二个是子程序指针
    .参数 hmod, 整数型, , GetModuleHandle(0)
    .参数 dwThreadId, 整数型, , 0

.DLL命令 卸载钩子, 逻辑型, , "UnhookWindowsHookEx", , , 卸载钩子
    .参数 hhk, 整数型

.DLL命令 WindowFromPoint, 整数型, "user32", "WindowFromPoint", , , 返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口  包含了指定点的窗口的句柄。如指定的点处没有窗口存在,则返回零
    .参数 xPoint, 整数型, , x点值
    .参数 yPoint, 整数型, , y点值;

.DLL命令 GetModuleHandle, 整数型, "kernel32.dll", "GetModuleHandleA", , 获取一个应用程序或动态链接库的模块句柄。如执行成功成功,则返回模块句柄。零表示失败。
    .参数 lpModuleName, 整数型, , 指定模块名,这通常是与模块的文件名相同的一个名字。例如,NOTEPAD.EXE程序的模块文件名就叫作NOTEPAD只有在当前进程的场景中,这个句柄才会有效

自定义数据

.版本 2

.数据类型 MOUSEHOOKSTRUCT, 公开
    .成员 pt, POINT
    .成员 hwnd, 整数型
    .成员 wHitTestCode, 整数型
    .成员 dwExtraInfo, 整数型

.数据类型 POINT, 公开
    .成员 X, 整数型
    .成员 Y, 整数型

.数据类型 MSG1, 公开
    .成员 message, 整数型
    .成员 paraml, 整数型
    .成员 paramH, 整数型
    .成员 time, 整数型
    .成员 hwnd, 整数型

.数据类型 MSG, 公开
    .成员 句柄, 整数型
    .成员 message, 整数型
    .成员 w, 整数型
    .成员 l, 整数型
    .成员 time, 整数型
    .成员 位置, 整数型

.数据类型 鼠标结构, 公开
    .成员 成员1, 整数型
    .成员 成员2, 坐标结构, , , 鼠标x,y
    .成员 成员3, 整数型

.数据类型 坐标结构, 公开
    .成员 成员x, 整数型
    .成员 成员y, 整数型

  主程序代码

.版本 2
.支持库 eAPI
.支持库 spec

.程序集 窗口程序集_启动窗口
.程序集变量 句柄, 整数型
.程序集变量 鼠标钩子, 整数型
.程序集变量 键盘钩子, 整数型

.子程序 __启动窗口_创建完毕

键盘钩子 = 创建钩子 (13, &键盘钩子回调函数, GetModuleHandle (0), 0)
鼠标钩子 = 创建钩子 (14, &鼠标钩子回调函数, GetModuleHandle (0), 0)

.子程序 _按钮1_被单击
.局部变量 pid, 整数型
.局部变量 鼠标坐标, 整数型, , "0"
.局部变量 进程列表, 进程信息, , "0"
.局部变量 i, 整数型

延时 (1000)

加入成员 (鼠标坐标, 取鼠标水平位置 ())
加入成员 (鼠标坐标, 取鼠标垂直位置 ())
调试输出 (鼠标坐标)
' 调试输出 (取操作系统 ())
句柄 = 寻找窗口句柄 (0, 0, “WTWindow”, “API助手 V2.0版”)
调试输出 (句柄)
取窗口进程线程PID (句柄, pid)
调试输出 (pid)
' 进程列表 = 取系统进程列表 ()
.' 计次循环首 (取数组成员数 (进程列表), i)
    .判断开始断 (进程列表 [i].进程名称 = “API助手 V2.0版”)
        ' pid = 进程列表 [i].进程标识符
    .默认
        ' i = 0
    .判断结束

.' 计次循环尾 ()
' 调试输出 (进程列表)

.子程序 键盘钩子回调函数, 整数型
.参数 参数一, 整数型
.参数 参数二, 整数型, , 按键状态
.参数 参数三, 整数型, , 结构指针
.局部变量 键值, 整数型
.局部变量 index, 整数型

' 不使用键盘结构体如何获取键值
' 指针到字节集后里的参数二,1---,只取 1 位,因为整数在字节集里的占1位
' 把指针就转换成了 键值
' 3 s是整数型
键值 = 取字节集数据 (指针到字节集 (参数三, 1), 3, )
' 256是按下
' 257是弹起
.判断开始 (参数二 = 256)
    调试输出 (键值)
    .判断开始 (键值 ≥ 112 且 键值 ≤ 123)
        键值 = 键值 - 111
        _启动窗口.标题 = “F” + 到文本 (键值)
    .默认

    .判断结束

    ' 对26个字母键操作
    .判断开始 (键值 ≥ 65 且 键值 ≤ 90)
        ' 取键盘指示灯状态’
        .判断开始 (取键盘指示灯状态 (1) = 真)
            _启动窗口.标题 = 字符 (键值)
            ' 大写字母比对应的小写字母少 32
        .默认
            _启动窗口.标题 = 字符 (键值 + 32)
        .判断结束

    .默认

    .判断结束
    ' 判断按下A键了--就可以弹出消息框
    .判断开始 (键值 = #回车键)
        信息框 (“操作正确”, 0, , )
    .默认

    .判断结束
    ' 按键弹起

.默认

.判断结束
返回 (CallNextHookEx (键盘钩子, 参数一, 参数二, 参数三))

.子程序 鼠标钩子回调函数, 整数型
.参数 参数1, 整数型
.参数 参数2, 整数型
.参数 参数3, 整数型
.局部变量 鼠标信息, 鼠标结构
.局部变量 坐标z, 坐标结构

.判断开始 (参数2 = 513)
    _启动窗口.标题 = “你按下了鼠标左键”
.默认

.判断结束
.判断开始 (参数2 = 514)
    _启动窗口.标题 = “你放开了鼠标左键”
.默认

.判断结束
.判断开始 (参数2 = 516)
    _启动窗口.标题 = “你按下了鼠标右键”
.默认

.判断结束
.判断开始 (参数2 = 517)
    _启动窗口.标题 = “你放开了鼠标右键”
.默认

.判断结束
调试输出 (参数1)
调试输出 (参数2)
调试输出 (参数3)
返回 (CallNextHookEx (鼠标钩子, 参数1, 参数2, 参数3))


.子程序 汇编_鼠标相对移动, 整数型, 公开, SendInput
.参数 dx, 整数型
.参数 dy, 整数型

' sub esp,0x3C
' mov [esp],0 //type
' mov eax,[ebp+0x8]
' mov [esp+0x4],eax //dx
' mov eax,[ebp+0xC]
' mov [esp+0x8],eax //dy
' mov [esp+0xC],0 //mouseData
' mov [esp+0x10],1 //dwFlags
' mov [esp+0x14],0 //time
' mov [esp+0x18],0 //dwExtraInfo
' mov eax,esp
' add esp,0x3C
' push 0x1C //cbSize
' push eax //pInputs
' push 1 //cInputs
' call @SendInput
' add esp,0xC
' leave
' ret 0x8
' @SendInput:
' mov eax,0x1082
' xor ecx,ecx
' lea edx,[esp+0x4]
' call [fs:0xC0]
' ret
置入代码 ({ 131, 236, 60, 199, 4, 36, 0, 0, 0, 0, 139, 69, 8, 137, 68, 36, 4, 139, 69, 12, 137, 68, 36, 8, 199, 68, 36, 12, 0, 0, 0, 0, 199, 68, 36, 16, 1, 0, 0, 0, 199, 68, 36, 20, 0, 0, 0, 0, 199, 68, 36, 24, 0, 0, 0, 0, 137, 224, 131, 196, 60, 106, 28, 80, 106, 1, 232, 7, 0, 0, 0, 131, 196, 12, 201, 194, 8, 0, 184, 130, 16, 0, 0, 49, 201, 141, 84, 36, 4, 100, 255, 21, 192, 0, 0, 0, 195 })
返回 (0)


.子程序 取操作系统, 整数型, 公开, 0.未知 1.Win95 2.Win98 3.WinME 4.WinNT 5.Win2000 6.WinXP 7.Win2003 8.Vista 9.Win7 10.Win8

置入代码 ({ 83, 49, 192, 100, 139, 29, 24, 0, 0, 0, 100, 139, 13, 48, 0, 0, 0, 133, 201, 121, 32, 185, 0, 0, 83, 0, 57, 75, 88, 117, 4, 176, 1, 235, 99, 57, 75, 84, 117, 4, 176, 2, 235, 90, 57, 75, 124, 117, 85, 176, 3, 235, 81, 139, 153, 168, 0, 0, 0, 139, 137, 164, 0, 0, 0, 131, 249, 4, 119, 4, 176, 4, 235, 60, 131, 249, 5, 117, 27, 131, 251, 0, 117, 4, 176, 5, 235, 46, 131, 251, 1, 117, 4, 176, 6, 235, 37, 131, 251, 2, 117, 4, 176, 7, 235, 28, 131, 249, 6, 117, 7, 131, 251, 0, 117, 4, 176, 8, 235, 14, 131, 251, 1, 117, 2, 176, 9, 131, 251, 2, 117, 2, 176, 10, 91, 137, 236, 93, 195 })
返回 (0)

.子程序 汇编_十到十六, 文本型, 公开, 十进制转换到十六进制
.参数 十进制整数, 整数型
.局部变量 缓冲区, 文本型

缓冲区 = 取空白文本 (8)
置入代码 ({ 139, 69, 8, 87, 139, 125, 252, 49, 201, 177, 8, 80, 36, 15, 60, 9, 119, 4, 4, 48, 235, 2, 4, 55, 136, 68, 15, 255, 88, 193, 232, 4, 226, 233, 95 })
返回 (缓冲区)

.子程序 Asm_鼠标相对移动, 整数型, , SendInput
.参数 dx, 整数型
.参数 dy, 整数型

' sub esp,0x3C
' mov dword [esp],0 ; type
' mov eax,[ebp 0x8]
' mov dword [esp 0x4],eax ; dx
' mov eax,[ebp 0xC]
' mov dword [esp 0x8],eax ; dy
' mov dword [esp 0xC],0 ; mouseData
' mov dword [esp 0x10],1 ; dwFlags
' mov dword [esp 0x14],0 ; time
' mov dword [esp 0x18],0 ; dwExtraInfo
' mov eax,esp
' add esp,0x3C
' push 0x1C
' push eax
' push 1
' call SendInput
' add esp,0xC
' leave
' ret 0x8
' SendInput:
' mov eax,0x1082 ;有的系统可能不是0x1082
' xor ecx,ecx
' lea edx,[esp 0x4]
' call dword [fs:0xC0]
' ret
置入代码 ({ 131, 236, 60, 199, 4, 36, 0, 0, 0, 0, 139, 69, 8, 137, 68, 36, 4, 139, 69, 12, 137, 68, 36, 8, 199, 68, 36, 12, 0, 0, 0, 0, 199, 68, 36, 16, 1, 0, 0, 0, 199, 68, 36, 20, 0, 0, 0, 0, 199, 68, 36, 24, 0, 0, 0, 0, 137, 224, 131, 196, 60, 106, 28, 80, 106, 1, 232, 7, 0, 0, 0, 131, 196, 12, 201, 194, 8, 0, 184, 130, 16, 0, 0, 49, 201, 141, 84, 36, 4, 100, 255, 21, 192, 0, 0, 0, 195 })