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

即时调试远程CALL

[复制链接]

1793

主题

457

回帖

0

积分

管理员

积分
0
发表于 2013-8-26 14:44:13 | 显示全部楼层 |阅读模式
.版本 2

.程序集 窗口程序集1

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

编辑框1.内容 = “”
返回 ()


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

提升进程权限 ()

.子程序 转换为汇编码, 字节集
.参数 文本内容, 文本型
.局部变量 行数组, 文本型, , "0"
.局部变量 N, 整数型
.局部变量 返回汇编码, 字节集
.局部变量 临时字节集, 字节集
.局部变量 原来行数组, 文本型, , "0"
.局部变量 临时文本, 文本型

原来行数组 = 分割文本 (文本内容, #换行符, )
文本内容 = 到小写 (删全部空 (文本内容))
行数组 = 分割文本 (文本内容, #换行符, )
.计次循环首 (取数组成员数 (行数组), N)
    临时文本 = 取文本左边 (删首尾空 (行数组 [N]), 1)
    .如果真 (临时文本 = “=” 或 临时文本 = “'” 或 临时文本 = “/” 或 临时文本 = “\”)
        到循环尾 ()
    .如果真结束
    临时字节集 = 取行汇编码 (行数组 [N])
    .如果 (临时字节集 = {  })
        信息框 (“第 ” + 到文本 (N) + “ 行有错误:” + #换行符 + 原来行数组 [N], 0, )
        返回 ({  })
    .否则
        返回汇编码 = 返回汇编码 + 临时字节集
        输出调试文本 (字节集到十六进制 (临时字节集))
    .如果结束

.计次循环尾 ()
返回 (返回汇编码)

.子程序 取行汇编码, 字节集
.参数 行汇编码, 文本型
.局部变量 首, 文本型
.局部变量 中间, 文本型
.局部变量 值, 整数型

行汇编码 = 删首尾空 (行汇编码)
.判断开始 (行汇编码 = “pushad”)
    返回 ({ 96 })  ' 60
.判断 (行汇编码 = “pushad”)
    返回 ({ 97 })  ' 61
.默认

.判断结束
首 = 取文本左边 (行汇编码, 4)
.判断开始 (首 = “push”)
    中间 = 取文本中间 (行汇编码, 5, 3)
    .判断开始 (中间 = “eax”)
        返回 ({ 80 })  ' 50
    .判断 (中间 = “ebx”)
        返回 ({ 83 })  ' 53
    .判断 (中间 = “ecx”)
        返回 ({ 81 })  ' 51
    .判断 (中间 = “edx”)
        返回 ({ 82 })  ' 52
    .判断 (中间 = “esp”)
        返回 ({ 84 })  ' 54
    .判断 (中间 = “ebp”)
        返回 ({ 85 })  ' 55
    .判断 (中间 = “esi”)
        返回 ({ 86 })  ' 56
    .判断 (中间 = “edi”)
        返回 ({ 87 })  ' 57
    .默认
        值 = 取中括号中值 (行汇编码)
        .判断开始 (值 > 0)
            返回 ({ 255, 53 } + 到字节集 (值))  ' FF35
        .判断 (值 = 0)
            中间 = 取文本中间 (行汇编码, 5, 取文本长度 (行汇编码) - 4)
            ' 值 =
            返回 ({ 104 } + 到字节集 (到整数 (十六到十 (中间))))  ' 68
        .默认

        .判断结束

    .判断结束
    ' 01002825      50                    push eax
    ' 01002826      53                    push ebx
    ' 01002827      51                    push ecx
    ' 01002828      52                    push edx
    ' 01002829      54                    push esp
    ' 0100282A      55                    push ebp
    ' 0100282B      56                    push esi
    ' 0100282C      57                    push edi
    ' 0100282D      68 78563412           push 12345678
    ' 01002832      FF35 78563412         push dword ptr ds:[12345678]

.判断 (首 = “move”)
    中间 = 取文本中间 (行汇编码, 5, 2)
    值 = 取中括号中值 (行汇编码)
    .如果真 (值 = -1)
        信息框 (“这一句输入有错误:” + 行汇编码, #错误图标, )
        返回 ({  })
    .如果真结束
    .判断开始 (中间 = “cx”)
        .判断开始 (值 = 0)
            中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
            返回 ({ 185 } + 到字节集 (到整数 (十六到十 (中间))))  ' B9
        .判断 (值 > 0)
            返回 ({ 139, 13 } + 到字节集 (值))  ' 8B0D
        .默认


        .判断结束

    .判断 (中间 = “ax”)
        .判断开始 (值 = 0)
            中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
            返回 ({ 184 } + 到字节集 (到整数 (十六到十 (中间))))  ' B8
        .判断 (值 > 0)
            返回 ({ 161 } + 到字节集 (值))  ' A1
        .默认

        .判断结束

    .判断 (中间 = “bx”)
        .判断开始 (值 = 0)
            中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
            返回 ({ 187 } + 到字节集 (到整数 (十六到十 (中间))))  ' BB
        .判断 (值 > 0)
            返回 ({ 139, 29 } + 到字节集 (值))  ' 8B1D
        .默认

        .判断结束

    .判断 (中间 = “dx”)
        .判断开始 (值 = 0)
            中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
            返回 ({ 186 } + 到字节集 (到整数 (十六到十 (中间))))  ' BA
        .判断 (值 > 0)
            返回 ({ 139, 21 } + 到字节集 (值))  ' 8B15
        .默认

        .判断结束

    .判断 (中间 = “bp”)
        .判断开始 (值 = 0)
            中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
            返回 ({ 189 } + 到字节集 (到整数 (十六到十 (中间))))  ' BD
        .判断 (值 > 0)
            返回 ({ 139, 45 } + 到字节集 (值))  ' 8B2D
        .默认

        .判断结束

    .判断 (中间 = “si”)
        .判断开始 (值 = 0)
            中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
            返回 ({ 190 } + 到字节集 (到整数 (十六到十 (中间))))  ' BE
        .判断 (值 > 0)
            返回 ({ 139, 53 } + 到字节集 (值))  ' 8B35
        .默认

        .判断结束

    .判断 (中间 = “di”)
        .判断开始 (值 = 0)
            中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
            返回 ({ 191 } + 到字节集 (到整数 (十六到十 (中间))))  ' BF
        .判断 (值 > 0)
            返回 ({ 139, 61 } + 到字节集 (值))  ' 8B3D
        .默认

        .判断结束

    .默认

    .判断结束

.判断 (首 = “call”)
    值 = 取中括号中值 (行汇编码)
    .如果真 (值 > 0)
        返回 ({ 255, 21 } + 到字节集 (值))  ' FF15

    .如果真结束
    中间 = 取文本右边 (行汇编码, 3)
    .判断开始 (中间 = “eax”)
        返回 ({ 255, 208 })
    .判断 (中间 = “ebx”)
        返回 ({ 255, 211 })
    .判断 (中间 = “edx”)
        返回 ({ 255, 210 })
    .默认

    .判断结束
    ' 0100288A      FFD0                  call near eax
    ' 0100288C      FFD3                  call near ebx
    ' 0100288E      FFD2                  call near edx

.判断 (首 = “retn”)
    返回 ({ 195 })
.判断 (首 = “ret”)
    返回 ({ 195 })
.默认

.判断结束
返回 ({  })

' 01002838      B9 78563412           mov ecx,12345678
' 0100283D      8B0D 78563412         mov ecx,dword ptr ds:[12345678]
' 01002843      B8 78563412           mov eax,12345678
' 01002848      A1 78563412           mov eax,dword ptr ds:[12345678]
' 0100284D      BB 78563412           mov ebx,12345678
' 01002852      8B1D 78563412         mov ebx,dword ptr ds:[12345678]
' 01002858      BA 78563412           mov edx,12345678
' 0100285D      8B15 78563412         mov edx,dword ptr ds:[12345678]
' 01002863      BD 78563412           mov ebp,12345678
' 01002868      8B2D 78563412         mov ebp,dword ptr ds:[12345678]
' 0100286E      BE 78563412           mov esi,12345678
' 01002873      8B35 78563412         mov esi,dword ptr ds:[12345678]
' 01002879      BF 78563412           mov edi,12345678
' 0100287E      8B3D 78563412         mov edi,dword ptr ds:[12345678]
' 01002884      FF15 78563412         call near dword ptr ds:[12345678]


.子程序 取中括号中值, 整数型
.参数 代码, 文本型
.局部变量 N1, 整数型
.局部变量 N2, 整数型

N1 = 寻找文本 (代码, “[”, , 假)
.如果真 (N1 < 1)
    返回 (0)
.如果真结束
N2 = 寻找文本 (代码, “]”, N1 + 1, 假)
.如果真 (N2 < 1)
    返回 (-1)
.如果真结束
返回 (十六到十 (取文本中间 (代码, N1 + 1, N2 - N1 - 1)))


.子程序 _按钮2_被单击
.局部变量 临时字节集, 字节集

临时字节集 = 转换为汇编码 (编辑框1.内容)


.子程序 _组合框1_将弹出列表
.局部变量 进程ID数组, 整数型, , "0"
.局部变量 进程名称数组, 文本型, , "0"
.局部变量 N, 整数型

枚举进程 (进程ID数组, 进程名称数组)
组合框1.清空 ()
.计次循环首 (取数组成员数 (进程ID数组), N)
    组合框1.加入项目 (进程名称数组 [N], 进程ID数组 [N])
.计次循环尾 ()

.子程序 _按钮3_被单击
.局部变量 进程句柄, 整数型
.局部变量 临时字节集, 字节集

进程句柄 = 打开进程 (组合框1.取项目数值 (组合框1.现行选中项))
' 输出调试文本 (进程句柄)
临时字节集 = 转换为汇编码 (编辑框1.内容)
.如果真 (临时字节集 = {  } 或 进程句柄 = 0)
    返回 ()
.如果真结束
远程执行 (进程句柄, 临时字节集)

.子程序 远程执行, 逻辑型
.参数 进程句柄, 整数型
.参数 代码, 字节集
.局部变量 函数地址, 整数型
.局部变量 线程句柄, 整数型


函数地址 = 创建虚拟内存页 (进程句柄, 0, 1024, 4096, 64)  ' 只在测试时用
.如果真 (函数地址 = 0)
    信息框 (“有问题 检查一下 code:2”, 0, )
    返回 (假)
.如果真结束



.如果真 (写入内存 (进程句柄, 函数地址, 代码, 取字节集长度 (代码), 0) = 0)
    信息框 (“有问题 检查一下 code:3”, 0, )
    ' 释放虚拟内存 (ZT_进程ID_特权, 函数地址, 0, 32768)
    返回 (假)
.如果真结束

线程句柄 = 创建远程线程 (进程句柄, 0, 0, 函数地址, 0, 0, 0)
.如果真 (线程句柄 = 0)
    信息框 (“有问题 检查一下 code:4”, 0, )
    返回 (假)
.如果真结束
等待远程线程结束 (线程句柄, -1)
关闭句柄 (线程句柄)
' 释放虚拟内存 (进程句柄, 寻路函数地址, 0, 32768)
返回 (真)

http://yunpan.cn/QXMChxEKtgj2d
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

GMT+8, 2026-2-1 15:12 , Processed in 0.065390 second(s), 21 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

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