Pwnable-leg
2024-08-31 21:32:11
Download : http://pwnable.kr/bin/leg.c
Download :http://pwnable.kr/bin/leg.asm
友链
https://blog.csdn.net/lee_ham/article/details/78398551
下载之后,看看C的源码
if( (key1()+key2()+key3()) == key ){
printf("Congratz!\n");
int fd = open("flag", O_RDONLY);
char buf[];
int r = read(fd, buf, );
write(, buf, r);
(key1()+key2()+key3()) == key就可以获得flag
之后打开另一个文件,是asm汇编语言,一个main函数和三个小部分key
来逐一看看key的数值
key1
(gdb) disass key1
Dump of assembler code for function key1:
0x00008cd4 <+>: push {r11} ; (str r11, [sp, #-]!)
0x00008cd8 <+>: add r11, sp, #
0x00008cdc <+8>: mov r3, pc
0x00008ce0 <+12>: mov r0, r3
0x00008ce4 <+>: sub sp, r11, #
0x00008ce8 <+>: pop {r11} ; (ldr r11, [sp], #)
0x00008cec <+>: bx lr
End of assembler dump.
将PC赋值给r3,然后r3在给r0,而r0是函数的返回值,PC(program point)指向的是执行语句地址+8,即0x08cdc+8=0x08ce4,所以key1是0x08ce4
key2
(gdb) disass key2
Dump of assembler code for function key2:
0x00008cf0 <+>: push {r11} ; (str r11, [sp, #-]!)
0x00008cf4 <+>: add r11, sp, #
0x00008cf8 <+>: push {r6} ; (str r6, [sp, #-]!)
0x00008cfc <+12>: add r6, pc, #1
0x00008d00 <+16>: bx r6
0x00008d04 <+20>: mov r3, pc
0x00008d06 <+22>: adds r3, #4
0x00008d08 <+24>: push {r3}
0x00008d0a <+26>: pop {pc}
0x00008d0c <+28>: pop {r6} ; (ldr r6, [sp], #4)
0x00008d10 <+32>: mov r0, r
0x00008d14 <+>: sub sp, r11, #
0x00008d18 <+>: pop {r11} ; (ldr r11, [sp], #)
0x00008d1c <+>: bx lr
先看到pc和r6相加 0x08d04+0x1,然后再bx r6变成thumb状态(根据地址的最低位确定是否状态切换。如果末尾是1则切换到thumb状态,否则保留在asm状态)
之后pc+4赋值给r3(thumb状态,pc+4,asm状态则+8) 再通过adds把r3再加0x4,通过两次相加使得r3=PC+4+4,再赋值给r0 ,
所以r0=PC+4+4=0x8d0c, 即key2=0x8d0c
key3
Dump of assembler code for function key3:
0x00008d20 <+>: push {r11} ; (str r11, [sp, #-]!)
0x00008d24 <+>: add r11, sp, #
0x00008d28 <+8>: mov r3, lr
0x00008d2c <+12>: mov r0, r3
0x00008d30 <+>: sub sp, r11, #
0x00008d34 <+>: pop {r11} ; (ldr r11, [sp], #)
0x00008d38 <+>: bx lr
lr(link register)寄存器存储的是函数的返回地址,指向main函数,看看main函数
0x00008d7c <+>: bl 0x8d20 <key3>
0x00008d80 <+>: mov r3, r0
key3=0x8d80
之后相加即可
执行获取flag
My daddy has a lot of ARMv5te muscle!
最新文章
- 一个网站完整详细的SEO优化方案
- MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用
- Python爬虫爬取豆瓣电影名称和链接,分别存入txt,excel和数据库
- mybatis学习2
- Struts2实现简单的在线人数统计
- PostgreSQL连接Python
- 59. Spiral Matrix II
- SRM 584 第一次玩TopCoder。。。只水题一道。。。
- About Interface
- [C#]async/Await 使用小计
- rabbitmq 测试
- VC连接SQL server2005
- C# 类型的创建
- 图解:SQL Server SSIS包和job的部署攻略
- feign多文件上传
- Delphi中Chrome Chromium、Cef3学习笔记(四)
- css 中 position属性
- 突然发现用PHP做多条件模糊查询很简单
- Scrapy爬取遇到的一点点问题
- Cortex-A15架构解析:它为什么这么强(转)