找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 489|回复: 2

api-结束进程中DLL-(昭姐易语言)

[复制链接]

30

主题

1

回帖

0

积分

版主

积分
0
发表于 2013-6-9 12:20:52 | 显示全部楼层 |阅读模式

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

.程序集 窗口程序集1
.程序集变量 系统进程, 进程信息, , "0"
.程序集变量 I, 整数型
.程序集变量 X, 整数型
.程序集变量 系统进程1, 进程信息, , "0"
.程序集变量 I1, 整数型
.程序集变量 系统进程数组, 整数型, , "0"
.程序集变量 I2, 整数型
.程序集变量 i3, 整数型
.程序集变量 i4, 整数型
.程序集变量 i5, 整数型
.程序集变量 硬盘信息, 硬盘信息
.程序集变量 路径, 文本型

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

提升进程权限 ()
置随机数种子 (取秒 (取现行时间 ()))
_启动窗口.标题 = 到文本 (取随机数 (100000, 999999))
表项 ()
列表 ()
XP风格 (1)

.子程序 提升进程权限, 逻辑型, 公开
.参数 目标进程, 整数型, 可空
.参数 权限类别, 文本型, 可空
.局部变量 hdlProcessHandle, 整数型
.局部变量 hdlTokenHandle, 整数型
.局部变量 tmpLuid, LuID
.局部变量 tkp, TOKEN_PRIVILEGES
.局部变量 tkpNewButIgnored, TOKEN_PRIVILEGES

.如果真 (取操作系统类别 () ≠ 3)
    返回 (假)
.如果真结束
.如果真 (是否为空 (目标进程))
    hdlProcessHandle = 获取线程 ()
.如果真结束
.如果真 (是否为空 (权限类别))
    权限类别 = #调试
.如果真结束
打开令牌 (hdlProcessHandle, 40, hdlTokenHandle)
恢复权限 (“”, 权限类别, tmpLuid)
tkp.PrivilegeCount = 1
tkp.lowpart = tmpLuid.lowpart
tkp.highpart = tmpLuid.highpart
tkp.Attributes = 2
返回 (获取令牌特权 (hdlTokenHandle, 0, tkp, 28, 0, 0))

.子程序 列表

超级列表框1.全部删除 ()
重定义数组 (系统进程, 假, 0)
连续赋值 (0, X, I)
系统进程 = 取系统进程列表 ()
数组排序 (系统进程, 真)
.计次循环首 (取数组成员数 (系统进程), I)
    X = X + 1
    超级列表框1.插入表项 (X, 到文本 (系统进程 [I].进程标识符), , , , )
    超级列表框1.置标题 (X - 1, 1, 系统进程 [I].进程名称)
    超级列表框1.置标题 (X - 1, 2, 到文本 (系统进程 [I].线程优先权))
    超级列表框1.置标题 (X - 1, 3, 到文本 (系统进程 [I].线程数))
    超级列表框1.置标题 (X - 1, 4, 到文本 (系统进程 [I].父进程标识符))
    超级列表框1.置标题 (X - 1, 5, 到文本 (系统进程 [I].进程模块标识符))
    路径 = 取模块路径 (系统进程 [I].进程标识符)
    .如果 (寻找文本 (路径, “\??\”, , 真) ≠ -1)
        路径 = 取文本右边 (路径, 取文本长度 (路径) - 4)
    .否则

    .如果结束
    超级列表框1.置标题 (X - 1, 6, 路径)

.计次循环尾 ()

.子程序 _按钮1_被单击

列表 ()

.子程序 表项

超级列表框1.插入列 (0, “PID”, 40, , , )
超级列表框1.插入列 (1, “映像名称”, 100, 1, , )
超级列表框1.插入列 (2, “线程优先权”, 75, 1, , )
超级列表框1.插入列 (3, “线程数”, 50, 1, , )
超级列表框1.插入列 (4, “父进程标识”, 75, 1, , )
超级列表框1.插入列 (5, “模块标识”, 60, 1, , )
超级列表框1.插入列 (6, “路径”, 260, 1, , )


.子程序 _按钮2_被单击

.如果 (终止进程 (到数值 (超级列表框1.取标题 (超级列表框1.现行选中项, ))) = 假)
    _启动窗口.总在最前 = 假
    信息框 (“该进程为关键进程,不能结束!”, 0, )
    _启动窗口.总在最前 = 真
.否则
    按钮2.禁止 = 真
.如果结束


.子程序 _时钟1_周期事件

系统进程1 = 取系统进程列表 ()
连续赋值 (0, I2, i4, i3)
i3 = 超级列表框1.取表项数 ()
i5 = 取数组成员数 (系统进程1)
.如果 (i3 < i5)
    .计次循环首 (i5, i4)
        .计次循环首 (i3, I2)
            .如果 (系统进程1 [i4].进程标识符 = 到数值 (超级列表框1.取标题 (I2 - 1, 0)))
                跳出循环 ()
            .否则
                I2 = I2 + 1
                .如果 (I2 > i3)
                    超级列表框1.插入表项 (i3, 到文本 (系统进程1 [i4].进程标识符), , , , )
                    超级列表框1.置标题 (i3, 1, 系统进程1 [i4].进程名称)
                    超级列表框1.置标题 (i3, 2, 到文本 (系统进程1 [i4].线程优先权))
                    超级列表框1.置标题 (i3, 3, 到文本 (系统进程1 [i4].线程数))
                    超级列表框1.置标题 (i3, 4, 到文本 (系统进程1 [i4].父进程标识符))
                    超级列表框1.置标题 (i3, 5, 到文本 (系统进程1 [i4].进程模块标识符))
                    路径 = 取模块路径 (系统进程1 [i4].进程标识符)
                    .如果 (寻找文本 (路径, “\??\”, , 真) ≠ -1)
                        路径 = 取文本右边 (路径, 取文本长度 (路径) - 4)
                    .否则

                    .如果结束
                    超级列表框1.置标题 (i3, 6, 路径)
                .否则

                .如果结束

            .如果结束

        .计次循环尾 ()
    .计次循环尾 ()

.否则
    .计次循环首 (i3, I2)
        .计次循环首 (i5, i4)
            .如果 (到数值 (超级列表框1.取标题 (I2 - 1, )) = 系统进程1 [i4].进程标识符)
                跳出循环 ()
            .否则
                i4 = i4 + 1
                .如果 (i4 > i5)
                    超级列表框1.删除表项 (I2 - 1)
                .否则

                .如果结束

            .如果结束

        .计次循环尾 ()
    .计次循环尾 ()
.如果结束


.子程序 _选择框1_被单击

.如果 (选择框1.选中 = 真)
    时钟1.时钟周期 = 1000
    按钮1.禁止 = 真
.否则
    时钟1.时钟周期 = 0
    按钮1.禁止 = 假
.如果结束


.子程序 _超级列表框1_左键单击表项

按钮2.禁止 = 假

.子程序 取模块路径, 文本型
.参数 processid, 整数型
.局部变量 snap, 整数型
.局部变量 mod, 模块信息

snap = CreateToolhelp32Snapshot (8, processid)
.如果真 (snap = -1)
    返回 (“”)
.如果真结束
mod.size = 1024
Module32First (snap, mod)
返回 (取字节集数据 (到字节集 (mod.szpath), 10))

.子程序 列调用的模块
.参数 pid, 整数型
.局部变量 snap, 整数型
.局部变量 mod, 模块信息
.局部变量 b, 整数型

列表框1.清空 ()
snap = CreateToolhelp32Snapshot (8, pid)
mod.size = 1024
b = Module32First (snap, mod)
.判断循环首 (b ≠ 0)
    列表框1.加入项目 (取字节集数据 (到字节集 (mod.szpath), 10, ), mod.pid)
    b = Module32Next (snap, mod)
.判断循环尾 ()
关闭句柄 (snap)


.子程序 _超级列表框1_当前表项被改变

列调用的模块 (到数值 (超级列表框1.取标题 (超级列表框1.现行选中项, )))


.子程序 _列表框1_双击选择

结束进程中DLL (到数值 (超级列表框1.取标题 (超级列表框1.现行选中项, )), 列表框1.取项目文本 (列表框1.现行选中项))
_超级列表框1_当前表项被改变 ()


.子程序 结束进程中DLL, 逻辑型, , 不是所有的DLL都能结束,本函数可能造成被结束DLL的进程异常退出,请小心使用
.参数 进程ID, 整数型, , 需要结束其中DLL的进程ID号
.参数 Dll名称, 文本型, , 需要结束的DLL的名称
.局部变量 线程ID, 整数型
.局部变量 分配内存, 整数型
.局部变量 退出代码, 整数型
.局部变量 线程地址, 整数型
.局部变量 线程句柄, 整数型
.局部变量 长度, 整数型

线程ID = 打开进程 (2035711, 真, 进程ID)  ' 在进程中创建一个线程
.判断开始 (线程ID = 0)  ' 为0表示创建失败,直接返回
    返回 (假)
.默认
    长度 = 取文本长度 (Dll名称) + 1  ' 取出dll的全路径长度
    分配内存 = VirtualAllocEx (线程ID, 0, 长度, 4096, 4)  ' 分配内存用来保存GetModuleHandleA的参数
    .如果 (WriteProcessMemory (线程ID, 分配内存, 到字节集 (Dll名称), 长度, 0))  ' 将参数写到远程的进程内存中
        线程地址 = GetProcAddress (GetModuleHandle (“Kernel32”), “GetModuleHandleA”)  ' 远程取得GetModuleHandleA入口地址
        线程句柄 = CreateRemoteThread (线程ID, 0, 0, 线程地址, 分配内存, 0, 0)  ' 远程执行命令
        WaitForSingleObject (线程句柄, -1)  ' 等待执行退出
        GetExitCodeThread (线程句柄, 取变量地址 (退出代码))  ' 获得远程命令返回的结果
        VirtualFreeEx (线程ID, 分配内存, 长度, 16384)  ' 释放内存
        关闭句柄 (线程句柄)  ' 关闭线程
        线程地址 = GetProcAddress (GetModuleHandle (“Kernel32”), “FreeLibraryAndExitThread”)  ' 远程取得FreeLibraryAndExitThread入口地址
        线程句柄 = CreateRemoteThread (线程ID, 0, 0, 线程地址, 退出代码, 0, 0)  ' 远程执行命令
        WaitForSingleObject (线程句柄, -1)  ' 等待执行退出
        VirtualFreeEx (线程ID, 分配内存, 长度, 16384)  ' 释放内存
        关闭句柄 (线程句柄)  ' 关闭线程
        关闭句柄 (线程ID)
    .否则
        VirtualFreeEx (线程ID, 分配内存, 长度, 16384)
        返回 (假)
    .如果结束


.判断结束
返回 (真)
[attachment=88]

0

主题

7

回帖

0

积分

新手上路

积分
0
发表于 2013-8-20 07:14:26 | 显示全部楼层

必须顶起
必须顶起
必须顶起必须顶起必须顶起

0

主题

8

回帖

0

积分

新手上路

积分
0
发表于 2013-10-4 11:27:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 13:50 , Processed in 0.112991 second(s), 21 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表