吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6128|回复: 37
收起左侧

[分享] 一种在32位Windows进程中运行64位代码的方法

  [复制链接]
qzhsjz 发表于 2020-12-28 15:58
通过用汇编强改段寄存器的方式,以C++内联汇编为例:

[C++] 纯文本查看 复制代码
void 运行部分64位代码(void *想运行的代码入口)
{
    unsigned long origin_esp = 0;
    __asm {
            mov origin_esp, esp
            and esp, 0xfffffff0

            push 033h                        ; CS=0x33时CPU对程序的地址空间解释为64位
            call push_eip
        push_eip:
            add[esp], 5
            retf

            ; CPU进入64位模式
            sub esp, 040h                    ; 从栈顶开一块空间
            mov eax, 想运行的代码入口
            call eax                              ; 从此开始执行目标64位代码,最终返回这里
            add esp, 040h

            mov ecx, 02bh
            mov ss, cx

            call push_rip
        push_rip:
            mov dword ptr[esp + 4], 023h     ; CS=0x23时CPU对程序的地址空间解释为32位
            add dword ptr[esp], 0dh
            retf

            ; CPU回到32位模式
            mov esp, origin_esp
    }
}

免费评分

参与人数 6吾爱币 +7 热心值 +5 收起 理由
251768938 + 1 + 1 谢谢@Thanks!
ZZF1949 + 1 + 1 谢谢@Thanks!
5omggx + 1 用心讨论,共获提升!
ljj_1025 + 1 + 1 用心讨论,共获提升!
huangsijun17 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| qzhsjz 发表于 2020-12-30 13:19
837468220 发表于 2020-12-30 11:21
有没有示例呢。。。

我一楼发的就是示例呀,难不成你是想要这种示例?
[Asm] 纯文本查看 复制代码
.版本 2

.子程序 ExecuteNative64
.参数 EntryPoint, 整数型
.局部变量 saved_esp, 整数型

saved_esp = 0
置入代码 ({ 137, 101, 252, 131, 228, 240, 106, 51, 232, 0, 0, 0, 0, 128, 4, 36, 5, 203, 131, 236, 64, 139, 69, 8, 255, 208, 131, 196, 64, 185, 43, 0, 0, 0, 142, 209, 232, 0, 0, 0, 0, 199, 68, 36, 4, 35, 0, 0, 0, 131, 4, 36, 13, 203, 139, 101, 252 })
返回 ()

拿好不谢
昨夜星辰恰似你 发表于 2021-1-5 10:07
建议进入x64后首先将RSP寄存器值进行8字节对齐,不然很大几率后面访问堆栈地址没对齐崩溃,要使用kernel32等还要自己加载到64位空间    然后wow64下64位空间的PEB  TEB各种坑 ,系统回调也被wow64接管了,跑跑小shellcode还行   大程序就算了
guangzisam 发表于 2020-12-28 20:17
好想法,但要防止8字节的数据,运行前应检查
国际豆哥 发表于 2020-12-28 16:25
感谢楼主的分享!
bachelor66 发表于 2020-12-28 16:26
楼主试过什么程序可以呢?                        
 楼主| qzhsjz 发表于 2020-12-28 16:30
bachelor66 发表于 2020-12-28 16:26
楼主试过什么程序可以呢?

这个是我一个配合shellcode使用的产品,call eax那个地方就是call我注入到其他64位进程中的64位shellcode的。如果是其他应用场景的话也可以不call,代码少的话在call那个位置继续写代码就可以了。
jopyy2020 发表于 2020-12-28 17:37
感谢楼主分享
ynjian 发表于 2020-12-28 18:01

感谢楼主分享
caiji1 发表于 2020-12-28 20:31
感谢楼主分享
ellvincent 发表于 2020-12-28 21:25
感谢分享
鸭子咯咯哒~ 发表于 2020-12-28 22:23
wow!好东西收藏先
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-27 00:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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