安全黑客
当前位置:安全黑客文章资讯安全资讯安全新闻
日期:2019-01-20 23:25:00  来源:本站整理

mips64逆向新手入门(从jarvisoj一道mips64题目说起)[安全新闻]

赞助商链接



  本文“mips64逆向新手入门(从jarvisoj一道mips64题目说起)[安全新闻]”是由安全黑客为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

CTF比赛的逆向已经发展到向arm和mips等嵌入式架构发展了,国内可以看到关于mips逆向的一些基础文章,但是对于mips64却介绍比较少,这里通过jarvisoj一道mips64的题目(来自于某强网杯)来看看mips64的一些坑,以及介绍新手如何入门逆向mips64。
题目链接 Here
file一下程序,是mips64 rel2,静态编译且没有符号的。
root@kali:/mnt/hgfs/ctfsample/jarvisoj/mips64# file mips64
mips64: ELF 64-bit MSB executable, MIPS, MIPS64 rel2 version 1 (SYSV), statically linked, BuildID[sha1]=1fd09709a4c48cd14efe9454d332d16c1b096fd0, for GNU/Linux 3.2.0, stripped
拖入IDA64(7.0版本)分析,看到一堆sub函数,但是没有符号信息。

也能看到关键的字符串,但是无法交叉引用查找调用点


 
准备调试环境
安装qemu
在linux中安装qemu
sudo apt-get install qemu qemu-system qemu-user-static
然后尝试执行mips64的程序
qemu-mips64 ./mips64
可以看到程序运行效果如下

编译mips64-linux-gdb
我是从源码编译mips64版的gdb开始,环境是kali2008(如下),默认配置gdb 8.1.1,所以选择同版本的gdb源码进行编译。
Linux kali 4.17.0-kali1-amd64 #1 SMP Debian 4.17.8-1kali1 (2018-07-24) x86_64 GNU/Linux
1.从gdb官网http://www.gnu.org/software/gdb/download/下载[gdb-8.1.1.tar.gz](https://ftp.gnu.org/gnu/gdb/gdb-8.1.1.tar.gz)
2.将gdb-8.1.1.tar.gz 拷贝到任何你愿意的Linux目录下, 解压
tar -zxvf gdb-8.1.1.tar.gz
3.编译mips64-linux-gdb
到目录gdb-8.1.1下,编译命令
cd gdb-8.1.1
./configure --target=mips64-linux --prefix=/usr/local/mips64-gdb -v
make
make install
安装成功后,可以在 /usr/local/mips64-gdb/bin 目录中看到这两个文件
mips64-linux-gdb mips64-linux-run
4.运行mips64-linux-gdb
root@kali:/usr/local/mips64-gdb/bin# /usr/local/mips64-gdb/bin/mips64-linux-gdb
GNU gdb (GDB) 8.1.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later //gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-pc-linux-gnu --target=mips64-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
//www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
//www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb)
5.一些说明
使用IDA7.0 也可以链接gdbserver,可以设置断点,但是在调试过程中,F8(单步执行)经常跑飞,所以IDA会作为静态分析,就像pwn那样。
网上还有介绍使用 gdb-multiarch 调试的,直接apt-get可以安装,效果应该与源码编译雷同,有兴趣的朋友可以试试。
使用 gdb 调试qemu
启动qemu时,使用-g 9999 开启 gdbserver ,9999是调试端口号,gdb中用这个端口号链接gdbserver。
# qemu-mips64 -g 9999 ./mips64
然后在mips64-linux-gdb中链接gdbserver调试
file 指定被调试的文件
set architecture 根据目标程序的类型选择,参看之前file的结果,也可以用tab查看可以设置为什么类型。
target remote 是链接远程gdbserver,链接后程序停在 0x0000000120003c50 ,这是程序的入口地址,用IDA可以验证
(gdb) file mips64
Reading symbols from mips64...(no debugging symbols found)...done.
(gdb) set architecture mips:isa64r2
The target architecture is assumed to be mips:isa64r2
(gdb) target remote localhost:9999
Remote debugging using localhost:9999
0x0000000120003c50 in ?? ()

mips64-linux-gdb调试指令和gdb是一样的,常用的有:
i r #查看所有寄存器
i fl #查看所有fpu
c  #继续程序到下一个断点
ni #单步执行
x /10i $pc #查看当前指令情况
 
mips64基础知识
可以参考附录里面各种mips汇编指令的介绍,这里重点介绍几点与x86逆向调试不同的地方,了解了这些会让逆向事半功倍。
1.函数的输入参数分别在寄存器a0,a1,a2…中,关注这几个寄存器的值,就可以知道某个函数如sub_120022504(a0,a1,a2)的输入参数2.mips64的跳转指令时(b开头的指令),会执行跳转后一条语句之后再跳,这叫分支延迟。
如下面的代码片段,bc1f是跳转指令,满足条件跳转至 loc_120003B24 。无论是否满足跳转条件,都会先执行 ld $t9, -0x7F68($gp) 那条指令,再跳到 loc_120003B24 或者 ld $a0, -0x7F78($gp) 。gdb断点只能下到 0x120003C24 或 0x120003C2C,无法下到0x120003C28。

[1] [2] [3] [4] [5]  下一页


  以上是“mips64逆向新手入门(从jarvisoj一道mips64题目说起)[安全新闻]”的内容,如果你对以上该文章内容感兴趣,你可以看看安全黑客为您推荐以下文章:
  • mips64逆向新手入门(从jarvisoj一道mips64题目说起)
  • 在ubuntu下安装Dynamips
  • <b>Ubuntu下安装Dynamips</b>
  • 本文地址: 与您的QQ/BBS好友分享!

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    免责条款 - 广告合作 - 下载声明 - 欢迎投稿 - 友情连接 - 网站地图 -
    Copyright © 2012-2013 www.110hack.com. All Rights Reserved .