一起游 手游攻略 新游动态 exe脱壳 合天智汇前情提要:0x04flag 脱壳相关逆向题目解析

exe脱壳 合天智汇前情提要:0x04flag 脱壳相关逆向题目解析

时间:2024-06-05 02:00:35 来源:网络整理 浏览:0

回顾:

标题描述好像是脱壳相关的逆向工程题目。

根据给出的地址下载

文件

它是一个可执行文件

执行

emm什么都看不到,而且没有源码

然后加载gdb

Emmm,没有符号表,无法反汇编

哦,对了,根据标题,这是一个 shell,所以先脱壳

这是什么壳?

看一看

韓輯

这里对upx做一下简单的介绍:

UPX 是一个著名的压缩壳,主要作用是压缩 PE 文件(如 exe、dll 等文件),有时可能会被病毒利用来避杀。upx shell 是一个保护程序,一般是针对 EXE 文件的外部保护措施,主要用途有:

1.保护常规文件,使其难以被修改和破解。

2. 压缩文件使其更小。

3、保护防病毒软件安装程序不受到病毒的攻击。

4. 木马病毒的保护壳让病毒难以突破

相对于很多shell来说,upx的手动脱壳比较简单,不过本文主要侧重学习pwn而非脱壳,如果对upx的手动脱壳感兴趣的话,这里有一篇文章推荐:

我们可以在这里自动解压。

接下来,加载 gdb

拆开main之后,看到一个地址

打印出来

这是旗帜

装箱与拆箱技术:

复制上面的链接进行实验。

根据问题描述,编译时没有错误,那么会报错吗?

连上机器之后先看下源码

从源代码中我们可以看到

1.程序功能是先输入name,再回车,相当于输入一个用户名和两个密码

2. main中,login依次执行,中间没有push和pop,且两者的ebp相同

3. scanf 在 login() 中接收输入时,没有加 & 来获取地址。由于 未初始化,当我们用 scanf 输入数据时,并不知道数据保存在何处。我们只知道数据保存在 的值指向的地址中。

考虑到2和3,我们想知道我们是否可以控制name的内容。毕竟name占了100个字节,并且三者的ebp是相同的。

但是这可行吗?让我们在 gdb 上尝试一下

图十

可以看出name的地址是%ebp-0x70exe脱壳,.name的地址是ebp-0x10,两者相差0x70-0x10=96字节,.name的地址是%ebp-0xc,.name和from相差0x70-0xc=100字节,我们只能通过写name来控制,而不能控制

既然它可以被控制,这个想法就变得清晰了。

从源代码逻辑中我们可以看出,scanf,

我们控制的地址(name的最后4个字节)就是地址,后面scanf("%d",)接收输入的时候,就输入这个地址(“/bin/cat标志”

这样执行的时候就会执行,这样就可以读取flag了

通过GOT表获取flush地址

在图x中我们可以看到调用的地址是,但是在这之前还有一个参数传递操作,所以其实地址应该是,十进制

从而构建 exp

总结一下,这里用到的技术叫GOT覆盖,对于这道题来说,是这样的:

我们控制了 nane 的后四个字节,将 的值改为 的地址。程序中,后面会调用 scanf,而我们已将(“bin/cat flag”)的地址写入 ,覆盖了 GOT 表中的内容。因此,在调用 scanf 时,会直接执行打印 flag 的操作,绕过后面的比较逻辑。

根据描述,和随机数有关。

从源码中我们可以看到,只有当key和XOR满足的时候,才会打印flag。

key的值由rand函数生成,key的值由我们输入

所以这个问题的关键是找到什么值

我们知道rand函数其实生成的是伪随机数,所以我们可以写一个程序,先从rand生成一个数,然后与进行异或,得到的值就是我们输入的密钥

这是一种思维方式

或者我们也可以使用gdb调试,在程序判断if条件是否为真的地方设置断点,观察内存布局,同时还可以得到值

设置断点后,输入 2 并点击

如你所见,2 是我们的输入,并且

然后我们将这个值与输入的密钥进行异或

看标题,这道题是跟arm和有关的。

下载源代码并查看

可以看到,在main函数中必须满足key1()+key2()+key3()=key才可以打印出flag。

关键是我们需要输入

key1()等所代表的相关函数的返回值。

所以这道题就是找到相关函数的返回值并添加

C源代码中的三个函数采用内联汇编的形式。

或者直接用 gdb 来查看

标题告诉我们这是 arm

通常情况下,ARM 将返回值存储在寄存器 r0 中,该寄存器对应 x86 中的 eax。

这也可以从汇编中看出

那么每个函数中r0的值是多少?

逐一查看

先看key1

可以看到,pc->r3->r0,也就是说r0的值就是pc寄存器的值

这里有一个知识点

ARM是RISC,具有简化的指令和三级流水线:取指令、解码和执行。

当执行mov r3,pc时,pc为当前指令地址+0x8,并且+0x8

看看key2

add r6,pc,#1 表示r6=pc+1,由key1可知r6=+8+1,并且该值的最低位为1。

为什么要强调最低位?

因为下一条指令 bx r6

bx指令用于切换处理器状态模式,当最低位为1时,切换到Thumb指令执行,为0时,解释为ARM指令执行。

因此执行此命令后,它会切换到拇指模式

在thumb模式下,pc值为当前指令地址+4

所以当执行r3,pc时,r3的值为+4

然后执行adds,r3,#4和r3+4+4的值

执行mov r0,r3后,r0的值与r3相同

让我们看看 key3

执行完红框两条指令后,r0的值等于lr的值

lr是r14,存储函数返回地址

具体的值可以在main中看到。

总结一下,关键价值在于

后续资讯请关注每日文章推送!

声明:作者本意是为了分享和普及网络知识,若读者因此采取任何危害网络安全的行动,后果自负,与和天智汇及原作者无关!

标题:exe脱壳 合天智汇前情提要:0x04flag 脱壳相关逆向题目解析
链接:https://yqqlyw.com/news/xydt/7352.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
  • exe脱壳
  • 阴阳师4月22日更新内容:帝释天上线技能调整,红莲华冕活动来袭

    阴阳师4月22日更新内容:帝释天上线技能调整,红莲华冕活动来袭[多图],阴阳师4月22日更新的内容有哪些?版本更新

    2024-06-05
    四川电视台经济频道如何培养孩子的学习习惯与方法直播在哪看?直播视频回放地址

    四川电视台经济频道如何培养孩子的学习习惯与方法直播在哪看?直播视频回放地址[多图],2021四川电视台经济频

    2024-06-05
    湖北电视台生活频道如何培养孩子的学习兴趣直播回放在哪看?直播视频回放地址入口

    湖北电视台生活频道如何培养孩子的学习兴趣直播回放在哪看?直播视频回放地址入口[多图],湖北电视台生活频道

    2024-06-05
    小森生活金币不够用怎么办?金币没了不够用解决方法

    小森生活金币不够用怎么办?金币没了不够用解决方法[多图],小森生活金币突然就不够用的情况很多人都有,金币没

    2024-06-05