最新要闻
- 重磅!“听音写稿”成真 讯飞听见重大升级:一段录音 一键成稿 今热点
- 热资讯!菜鸟驿站爆改大征集:夜间自助取件 这5个城市方便了
- 国产AI逆袭!一图看懂讯飞星火:文本生成、知识问答、数学三大能力已超越ChatGPT
- 理想汽车五一出行报告出炉:行程1.44亿公里、一半都在烧油
- 世界聚焦:山东黄金董事长李航:预计金价仍有进一步上涨空间
- 今日视点:首座深远海浮式风电平台完成海上安装
- 头条:男孩掉入黄河被救 家长抬羊登门拜谢 网友:知恩图报的正确打开方式
- 遥遥领先!讯飞星火认知大模型可自动创作 生成虚拟人朗读-每日消息
- 《银河护卫队3》上映2天票房破7000万 豆瓣评分高达8.7-天天热头条
- 18.98万起售 曝比亚迪海豹冠军版接受预定:比现款便宜多了
- 天天速读:科大讯飞刘庆峰:讯飞星火大模型中文能力已经超过ChatGPT
- 江阴枪击案嫌犯或已跟踪受害人半年具体是什么情况
- 哨兵模式立大功 理想L9遭遇奥迪“开门杀”:清清楚楚拍下全过程
- 天天动态:1.6亿赔款谁来出?承重墙被砸现高楼内仍有人居住 网友称楼体扭曲变形
- 国产最强AI来了!讯飞星火认知大模型发布:中文超越ChatGPT 英文已接近
- 要闻:传比亚迪电池配套欧版特斯拉 官方:不予置评
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【全球播资讯】用Radare2模拟shellcode运行
当我们在编写汇编时,可能有的时候你需要看看编译器中到底发生了什么。如果你正在排除shellcode出现的问题,你那么更需要耐心地、慎重地运行指令。
本文将探讨如何在x86_64的Ubuntu系统上模拟32位ARM shellcode。由于大多数笔记本电脑和工作站还没有运行ARM,我们这里需要一种其他方法在系统上执行非原生的指令。另外,原始的shellcode二进制文件并不是可执行文件格式,并不能被大多数工具所运行,所以我们需要一种其他的方法来执行这些文件。
在这里我们使用的是Radare2, Radare2是一个控制台驱动的框架,集成了一套简便易用的二进制分析工具。你可以把这些工具编写成脚本,或者使用交互式的命令行界面。要在Ubuntu上设置这个,我们只需要几个简单的命令。
【资料图】
mkdir ~/githubcd ~/githubgit clone https://github.com/radareorg/radare2.gitcd radare2sys/install.sh
如果你已经安装了radare2,请确保你目前运行的是最新版本。这个工具一直在积极维护并定期进行更新。另外,在2022年6月的版本之前有一些错误,使得此次试验可能无法更好的完成。
cd ~/github/radare2git pullsys/install.shr2 -V
为了复制我们将在本文中使用的shellcode二进制文件,你可以在bash提示符下运行以下内容:
nemo@hammerhead:~$ echo -n -e "\x01\x30\x8f\xe2\x13\xff\x2f\xe1\x78\x46\x0c\x30\xc0\x46\x01\x90\x49\x1a\x92\x1a\x0b\x27\x01\xdf\x2f\x62\x69\x6e\x2f\x73\x68\x00" > shellcode-696.binnemo@hammerhead:~$ md5sum shellcode-696.bin 42ba1c77446594cac3508b940926575d shellcode-696.bin
ESIL简介
可评估字符串中间语言(ESIL)是radare2使用的一种从硬件中抽象出来的指令,可以在不考虑底层硬件的情况下,来 "执行" 机器指令。这对于在仿真环境中执行非本地的汇编指令是非常理想的。
为了使用ESIL来执行我们的shellcode,我们需要做以下工作:
加载我们的shellcode二进制文件
配置radare2,使其知道如何正确解释我们的shellcode二进制文件
初始化ESIL
根据需要设置寄存器
通过我们的汇编指令来验证其功能
【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】
① 网安学习成长路径思维导图 ② 60+网安经典常用工具包 ③ 100+SRC漏洞分析报告 ④ 150+网安攻防实战技术电子书 ⑤ 最权威CISSP 认证考试指南+题库 ⑥ 超1800页CTF实战技巧手册 ⑦ 最新网安大厂面试题合集(含答案) ⑧ APP客户端安全检测指南(安卓+IOS)
用 ESIL 执行ARM shellcode
加载我们的shellcode二进制文件
当我们对shellcode二进制文件运行 "file"命令时,我们看到Linux不能确定其文件格式。同样地,radare2也不能确定它是什么。
nemo@hammerhead:~/labs/shellcode/asm$ file shellcode-696.binshellcode-696.bin: data
由于它只是一个二进制的文件,我们需要把它加载到radare2中后指定我们要看的是什么。在这里,我们修改了一些软件的分析设置,以便我们能够正确地分析我们的ARM文件:
nemo@hammerhead:~/labs/shellcode/asm$ r2 shellcode-696.bin[0x00000000]> e anal.arch = arm[0x00000000]> e asm.arch = arm[0x00000000]> e asm.bits = 32[0x00000000]> e anal.armthumb=true
配置radare2,使其知道如何正确运行我们的shellcode二进制文件
接下来我们要指定哪些指令是ARM,哪些是THUMB。我发现要做到这一点,就需要定义指令类型改变的函数。在这个特定的shellcode中,它会在ARM和THUMB指令之间进行切换。
[0x00000000]> af[0x00000000]> pdf┌ 8: fcn.00000000 ();│ rg: 0 (vars 0, args 0)│ bp: 0 (vars 0, args 0)│ sp: 0 (vars 0, args 0)│ 0x00000000 01308fe2 add r3, pc, 1└ 0x00000004 13ff2fe1 bx r3
在这个radare2命令的片段中,我正在分析一个地址为0的函数。在这里并不存在一个真正的函数,但是我们这样做是为了让我们的"函数"可以指定为ARM或者THUMB。"pdf "命令只是打印了函数的反汇编指令,这其中包含了add和bx指令。
[0x00000000]> s 8[0x00000008]> af[0x00000008]> pdf┌ 24: fcn.00000008 (int32_t arg1, int32_t arg2);│ ; arg int32_t arg1 @ r0│ ; arg int32_t arg2 @ r1│ 0x00000008 78460c30 andlo r4, ip, r8, ror r6│ 0x0000000c c0460190 andls r4, r1, r0, asr 13 ; arg2│ ┌─< 0x00000010 491a921a bne 0xfe48693c│ │ 0x00000014 0b2701df svcle 0x1270b│ │ 0x00000018 2f62696e cdpvs p2, 6, c6, c9, c15, 1└ │ 0x0000001c 2f736800 rsbeq r7, r8, pc, lsr 6[0x00000008]> afB 16
从地址8开始的下一组指令是THUMB指令。"s 8 " 指令会在文件中寻找8个字节,并跳转到一个我们希望到达的地方,然后定义下一个 "函数"。用 "af "创建函数后,当我们试图用 "pdf "显示它时,它看起来有点古怪。这是因为工具仍然会将这些指令解释为ARM。
我们可以通过设置比特数为16来指定这个 "函数 " 是THUMB。也就是将asm.bits设置为16,不过只针对这个函数生效。在一个正常的ARM二进制文件中,radare2会尝试自动进行这种区分,但是由于我们只有这一串shellcode指令,我们仍然需要进行手动区分。
注意我们可以删掉前两条指令并使用全THUMB的shellcode。如果我们这样做,我们就可以在打开文件时设置 "e asm.bits=16",而不必再重新定义函数。只不过,如果需要的话,你可以区分这两种指令类型。
Radare2还有一个更方便的方法,就是用 "izz "命令显示二进制文件中的所有字符串。
> izz[Strings]nth paddr vaddr len size section type string―――――――――――――――――――――――――――――――――――――――――――――――――――――――0 0x00000008 0x00000008 4 5 ascii xF\f01 0x00000018 0x00000018 7 8 ascii /bin/sh
现在我们已经能够正确的加载我们的shellcode二进制文件了。
初始化ESIL
如前所述,radare2内置了很多命令,在命令前缀中加入"?" 可以列出所有相关的命令。"ae? " 命令将列出与ESIL和仿真相关的命令。
[0x00000000]> ae?Usage: ae[idesr?] [arg] ESIL code emulation| ae [expr] evaluate ESIL expression| ae? show this help| ae?? show ESIL help| aea[f] [count] analyse n esil instructions accesses (regs, mem..)| aeA[f] [count] analyse n bytes for their esil accesses (regs, mem..)| aeb ([addr]) emulate block in current or given address| aeC[arg0 arg1..] @ addr appcall in esil| aec[?] continue until ^C| aef [addr] emulate function| aefa [addr] emulate function to find out args in given or current offset| aeg [expr] esil data flow graph| aegf [expr] [register] esil data flow graph filter| aei[?] initialize ESIL VM state (aei- to deinitialize)| aek[?] [query] perform sdb query on ESIL.info| aeL list ESIL plugins| aep[?] [addr] manage esil pin hooks (see “e cmd.esil.pin”)| aepc [addr] change esil PC to this address| aer[?] [..] handle ESIL registers like “ar” or “dr” does| aes[?] perform emulated debugger step| aets[?] esil Trace session| aev [esil] visual esil debugger for the given expression or current instruction| aex [hex] evaluate opcode expression
在这里,我们首先需要用 "aei "命令来初始化ESIL。之后,我们需要初始化一个堆栈。Radare2会自动选择一个堆栈的位置,不过这也可以使用"aeim "命令参数来指定地址 。
[0x00000008]> aei[0x00000008]> aeim
根据需要设置寄存器
由于我们的shellcode指令是从0开始的,我们需要用 "aepc 0 "命令将我们的程序计数器(PC)设置为0。如果我们想在偏移量0以外的位置开始执行,我们可以用 "aepc
"来设置起始地址。[0x00000008]> aepc 0
我们的shellcode中的一条指令("subs r1, r1, r1")会将r1设置为0.由于这个寄存器默认已经为0,让我们将它设置为0xffff,这样我们就可以看到当我们在shellcode中步进时所发生的变化。要做到这一点,我们需要使用 "aer "命令。
[0x00000008]> aer r1 = 0xffff
通过我们的设置来验证其功能
好了,现在我们已经设置好了。我们可以切换到可视化模式,进入到调试器面板。在可视模式下有多个选项(面板),所以我们需要敲两次 "p "来进入正确的面板。如果你想在任何时候退出可视化模式,只需按下escape键。你也可以按"?"来查看可用的命令列表。
[0x00000008]> V(hit “p” twice to get to the debugger panel)
然后你会注意到靠近顶部有一组寄存器。它看起来会像这样:
通常在控制台输入的任何r2命令也可以在视觉模式下输入。例如,如果我们想打印偏移量为0x18的字符串,我们需要执行以下命令:
# Hit “:” while in visual mode.> ps @0x18/bin/sh> # Hit enter on a blank line to return to visual mode.
现在,我们可以通过使用"s "键来执行汇编指令。当你在浏览时,你会注意到顶部的寄存器与堆栈数据会一起被更新(在第一张图片中从0x00178000开始)。你还会注意到,下一条要执行的指令(又称PC)的地址在汇编指令中被突出显示(第一幅图中的0x00000010)。
注意,上面的图片显示r1寄存器持有0x0000ffff。还注意到下一条指令将会被执行,即 "subs r1, r1, r1"。这条指令将会从自身减去r1,并将其存回r1,本质上是使其变为0。
再次按 "s "键,进入下一条指令。
现在一切都准备好了,可以通过 "svc 1 "指令通过守护进程调用了。我们现在正在进行 "execve "调用,所以我们应该在r7寄存器中设置0xb。r0中的第一个参数应该是一个指向我们要执行的二进制文件路径的指针。我们可以发现r0持有0x18。我们可以通过运行以下命令来验证它的指向:
# Hit “:” while at the “svc 1” instruction in visual mode.> ps @r0/bin/sh>
现在我们没有向"/bin/sh "传递任何参数,也没有设置任何环境变量,因此我们可以发现r1和r2都被设置为0。
由于我们不是在ARM系统上运行,所以我们不能正确地使用守护进程调用("svc 1")指令。当你在测试更复杂的shellcode时,请牢记这一点。
总结
无论您是对自定义的shellcode进行故障排除,还是验证您所看到的静态内容,有时您只需要看看指令到底在做什么。Radare2允许您从一个未知的文件格式(如shellcode二进制文件或固件镜像)加载非本地汇编文件,并一步一步地执行指令。
更多网安技能的在线实操练习,请点击这里>>
关键词:
【全球播资讯】用Radare2模拟shellcode运行
全球时讯:数仓建模规范--非常全
Vue2的生命周期 每日速递
美国制裁升级,推动国产化网卡发展刻不容缓
重磅!“听音写稿”成真 讯飞听见重大升级:一段录音 一键成稿 今热点
热资讯!菜鸟驿站爆改大征集:夜间自助取件 这5个城市方便了
国产AI逆袭!一图看懂讯飞星火:文本生成、知识问答、数学三大能力已超越ChatGPT
理想汽车五一出行报告出炉:行程1.44亿公里、一半都在烧油
世界聚焦:山东黄金董事长李航:预计金价仍有进一步上涨空间
新消息丨前端开发环境搭建踩坑笔记——npm install node-sass安装失败的解决方案
C/C++代码内捕获异常发生时的调用栈
天天即时看!如何通过代码接入手机在网状态 API
不一样的设计模式——— 重新理解6大原则[外篇]
今日视点:首座深远海浮式风电平台完成海上安装
头条:男孩掉入黄河被救 家长抬羊登门拜谢 网友:知恩图报的正确打开方式
遥遥领先!讯飞星火认知大模型可自动创作 生成虚拟人朗读-每日消息
《银河护卫队3》上映2天票房破7000万 豆瓣评分高达8.7-天天热头条
18.98万起售 曝比亚迪海豹冠军版接受预定:比现款便宜多了
天天速读:科大讯飞刘庆峰:讯飞星火大模型中文能力已经超过ChatGPT
Idea编译:Java找不到符号(终极解决方案篇)_天天要闻
分布式场景下,如何对外提供易变的服务,打造可靠的注册中心?
每日消息!涨知识!你不知道的中国手机号码的编码和划分规则
汽车的供电状态
江阴枪击案嫌犯或已跟踪受害人半年具体是什么情况
哨兵模式立大功 理想L9遭遇奥迪“开门杀”:清清楚楚拍下全过程
天天动态:1.6亿赔款谁来出?承重墙被砸现高楼内仍有人居住 网友称楼体扭曲变形
国产最强AI来了!讯飞星火认知大模型发布:中文超越ChatGPT 英文已接近
要闻:传比亚迪电池配套欧版特斯拉 官方:不予置评
当前区块链研究领域的前沿技术和研究方向
快克智能(603203):短期承压不改趋势 半导体业务落地打开新空间|环球讯息
全球报道:没有金刚钻别揽瓷器活 特斯拉Model Y涉水越野:“脸”都烂了
同比猛涨128% 奇瑞4月销量出炉:狂卖12.7万辆站稳自主第一梯队 天天快播报
环球热头条丨AIGPT中文版(无需魔法)最简单的方式实现AI绘画
当前聚焦:热门的免费 API 合辑整理
.NET几种微服务框架,你用过吗?
热点聚焦:两个系统之间跳转免密登录
承重墙被砸1.6亿赔款谁来出? 法律人士:租户、施工队责任重大
中国电子云成为政企信创促进中心首批成员单位
科济药业AB011联合用药一线治疗胃癌获批临床 全球热文
梦幻西游检查更新失败是什么原因?梦幻西游检查更新失败怎么解决?
美剧《西游ABC》新海报发布:杨紫琼观音、吴彦祖美猴王下凡_世界资讯
男子花32万买二手奔驰获赔98万:车商隐瞒是泡水报废车
戴尔xps13怎么增加固态硬盘?戴尔xps13笔记本参数
富士宝电磁炉质量怎么样?富士宝电磁炉故障大全
多玩盒子是什么时候出的?多玩盒子怎么卸载?
索尼投影机灯泡时间怎么清零?索尼投影机驱动怎么安装?
教师节是中国的还是国际的?教师节为什么定在9月10号?
天天亮点!手机内存卡怎么加密码_手机内存卡怎么加密
旷亮无比的意思是什么?旷亮无比的天空仿写三个词语
林书豪现在在哪个球队?林书豪的父母简介
生肖是按农历还是阳历计算的?96属鼠跟什么属相更配?正确的属相划分时间是什么?
什么是文创产品?文创产品的功能有哪些?文创发展趋势是什么?
一文详解如何在 ChengYing 中通过产品线部署一键提升效率-每日热门
今日快看!存货、负债、坏账持增 经营现金流量净额转负 宏工科技能过会么
特斯拉索赔500万名誉维权案将开庭 被告方为“刹车失灵”车主张女士:积极应诉 每日热议
达人契约能增加多少伤害(达人契约)
MYSQL数据库基础--MySQL子查询怎么操作?_世界百事通
易基因:2023年植物表观转录组研究的最新进展(m6A+m5C)|深度综述
32位进程设置大地址(3G)空间-世界滚动
Unix教程_编程入门自学教程_菜鸟教程-免费教程分享 最新消息
讯息:抖音芭比q是什么意思梗_网络语芭比q是什么意思
天天实时:5月26上映!迪士尼发真人版《小美人鱼》极清剧照:黑小美人鱼好看吗?
德国进口:Knoppers榛子巧克力威化饼干29.9元/13包|环球热闻
漫威回归内地首作!《黑豹2》今日上线网播:“优爱腾”同步上线
天天最新:智联招聘:应届毕业生选择单位就业比例升至57.6%
解析智慧园区的发展瓶颈
Linux下搭建Python2.7环境 环球观焦点
今日快看!git~分支管理规范
余维佳退出?世纪证券官宣新董事长和新总经理,去年投行资管双丰收|世界消息
立夏吃一蛋力气长一万!夏天模式开启:你那有什么习俗?_每日热讯
4999元起!小米13/13 Ultra限量定制色今日首发:三款新配色|全球热议
39999元买它!索尼:我们是游戏电视的引领者
强劲非农数据重燃紧缩预期 美债收益率全线回升 全球快资讯
凝望是什么意思_凝望的意思 天天微头条
环球新资讯:4倍降温吹凉风!小米米家智能蒸发式冷风扇上架:众筹价489元
全球最资讯丨Mate50立功!华为站起来 跻身前十背后:4G打败5G 品牌溢价高买手机就认它
天天热资讯!学系统集成项目管理工程师(中项)系列18a_进度管理(上)
恩施州气象台发布雷电黄色预警【III级/较重】【2023-05-06】
世界热门:ChatGPT最全提示词Prompts总结,看这一篇就够了!
Unity开发Hololens2—交互发布配置
中国高铁真狂魔!一张照片里 五条隧道、五座大桥 观热点
喜欢在沙里挖陷阱的小虫子叫啥?儿时经常玩 如今一斤卖6000 世界观速讯
环球今日报丨研究称脂肪过多会降低智商:吓得我感觉吃个烧烤压压惊
全球热议:火锅里咬起来咯吱咯吱的“贡菜”:究竟是什么?
30%的苹果税不好赚了 iOS 17大改:第三方应用来了
环球视讯!BLG晋级正赛,队内语音很欢乐,Bin想冲进敌方泉水,随便赢
大一一封家书范文500字(热门27篇) 环球动态
灵跃武器怎么转换_灵跃武器怎么获得
菲梦少女第三季为什么禁播_菲梦少女第三季免费版_天天快资讯
千万粉丝网红吃播小贝饿了带货因虚假宣传被罚46万:调理牛排宣传为原切
全球短讯!AMD最强核显称霸掌机!干掉RTX 2050、逼近GTX 1650 Ti
金仓数据库KingbaseES 两表关联Update的两种写法与性能
天天日报丨[HNCTF 2022 WEEK2]
天眼看湾区|广州狮岭皮具商会会长期待牵手贵州,迎美好未来_每日信息
港交所CEO欧冠升:“互换通”是全球首个衍生产品市场的联通机制-天天关注
天天速读:《暗黑破坏神4》将于6月2日抢先体验:PC、主机全平台同步
PS5偷盘哥事件更过去 《塞尔达传说》盗版玩家开始举报正版_环球速看
可可托海天气预报长期_可可托海天气-环球新要闻
天天观察:Rabbitmq 介绍 、安装、基于Queue实现生产者消费者模型、基本使用、消息安全之ack、durable持久化、利用闲置消费、发布订阅、发布订阅
中疾控:奥密克戎变异株再次感染,只有少数需医疗干预