LINUX 下的逆向 用 IDA 分析,样本逆向中系统调用的识别方法
作者:RootKiter
无符号表情况下的逆向
LINUX平台下的程序,可以通过strip程序进行精简,精简过的可执行文件会变小,同时又丝毫不影响执行效率。但这种情况会给程序逆向带来困扰。由于没有符号表的支持,所有函数在IDA中都会被显示为sub_xxx的形式,这会给逆向工程带来麻烦。
这里简单记录一下各常见平台下的系统调用识别方法。
常见平台的系统调用识别方法
无论哪个平台的系统调用都有两个关键点,一个是调用指令,另一个是调用号。
系统调用的具体功能由系统调用号制定,调用号和功能的对应关系要参考相关头文件。
我把目前所有能找到的系统调用有关的头文件,都放在了github 上的Reverse-bins项目中,供查阅。
X86
调用指令 INT 80h
寄存器 eax
参考表 x86系统调用表
1.png (32.15 KB, 下载次数: 72)
2016-12-21 10:33 上传
ARM
ARM 下的系统调用,有两种,一种是带参数的,另一种是指令调用时参数指定,分别如下:
寄存器指定
调用指令 SVC 0
寄存器 r7
参考表 ARM系统调用表
2.png (21.33 KB, 下载次数: 69)
2016-12-21 10:33 上传
指令内指定
调用指令 SVC 0xXXXXX
寄存器
参考表 ARM系统调用表
3.png (30.02 KB, 下载次数: 61)
2016-12-21 10:33 上传
MIPS
调用指令 syscall 0
寄存器 $v0
参考表 MIPS系统调用表
4.png (39.73 KB, 下载次数: 60)
2016-12-21 10:33 上传
PPC
调用指令 sc
寄存器 r0
参考表 PPC系统调用表
5.png (35.95 KB, 下载次数: 61)
2016-12-21 10:33 上传
SH4
调用指令 trapa #h’10
寄存器 r3
参考表 SH4系统调用表
6.png (40.52 KB, 下载次数: 71)
2016-12-21 10:33 上传
SPC
调用指令 ta 0x10
寄存器 %g1
参考表 SPC系统调用表
7.png (40.24 KB, 下载次数: 60)
2016-12-21 10:33 上传
结
这里记录了无符号表时,系统调用函数的识别方法,可用于LINUX下逆向参考。
这种对照关系也可以在IDA脚本进行实现,以节省逆向时间,在分析MIRAI样本的工作中,大概能节约30%的分析时间。
参考资料
1、x86系统调用表:
https://github.com/rootkiter/Reverse-bins/blob/master/syscall_header/i586_unistd_32.h
2、ARM系统调用表
https://github.com/rootkiter/Reverse-bins/blob/master/syscall_header/armv5l_unistd.h
3、MIPS系统调用表
https://github.com/rootkiter/Reverse-bins/blob/master/syscall_header/mips_unistd.h
4、PPC系统调用表
https://github.com/rootkiter/Reverse-bins/blob/master/syscall_header/powerpc-440fp_unistd.h
5、SH4系统调用表
https://github.com/rootkiter/Reverse-bins/blob/master/syscall_header/sh4_unistd_32.h
6、SPC系统调用表
https://github.com/rootkiter/Reverse-bins/blob/master/syscall_header/sparc_unistd.h
LINUX 下的逆向 用 IDA 分析,样本逆向中系统调用的识别方法相关推荐
- linux下安装小米摄像头,在深度Deepin系统中安装米聊的方法(安装MiTalk deb及AppImage包)...
本文介绍在深度Deepin操作系统中安装米聊(MiTalk)的方法,可以下载deb软件包或者AppImage软件包安装,当前的版本是4.0.39. 在深度Deepin系统中安装米聊的方法 1.安装米聊 ...
- Linux下gcov和lcov代码覆盖率分析(C/C++覆盖率在NGINX测试中的应用)
Linux下gcov和lcov代码覆盖率分析方法 gcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具 使用方法:在gcc或者g++后面添加参数 -fprofile-arcs -ftes ...
- linux 下的动态库制作 以及在python 中如何调用 c 函数库
linux 下的动态库制作 以及在python 中如何调用 c 函数库 动态库: 动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序 ...
- linux下cp复制目录时排除某些目录的方法分享,Linux 下复制(cp)目录时排除一个或者多个目录的方法...
cp 貌似没有排除目录的功能,可以使用 rsync 命令来实现了,如: [案例] /home/52php目录里面有data目录,data目录里面有 a.b.c.d.e 五个目录,现在要把data目录里 ...
- linux查看远程服务器端口,linux下查看本机和远程服务器的端口是否连通的方法...
linux下查看本机和远程服务器的端口是否连通的方法 如下所示: 1.ssh -v -p [端口号] [用户名]@[IP地址] 2.curl [IP地址]:[端口号] 以上这篇linux下查看本机和远 ...
- linux下阻塞的系统调用,Linux下socket设置为非阻塞方式和fcntl系统调用.pdf
Linux 下 socket 设置为非阻塞方式和 fcntl 系统调用 [ 日期: 2011-04-16] 来源: Linux 社区 作者: Linux 用以下方法将 socket 设置为非阻塞方式 ...
- linux如何进入su超级用户,Linux下普通用户用sudo su给自己加root权限的方法
首先: sudo这个命令就是给后面的命令加上root权限(sudo=superuser do),su这个命令是switch user,切换用户,你sudo su这个命令的意思是用root的权限来切换到 ...
- 【驱动】linux下I2C驱动架构全面分析
I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...
- linux下查看cpu负载及分析
linux下查看cpu负载有两个命令可以看:uptime 和 top. 其中load average的三个值分别表示1分钟.5分钟.15分钟的CPU负载情况,是运维需要经常关注的 那么怎么确定这些值展 ...
最新文章
- Oracle数据类型简介【转贴】
- 让PHP程序永远在后台运行
- 数据库原理与应用(SQL Server)笔记 第三章 连接查询
- 2015-03-19 Opportunity order by implementation detail
- java实验报告合肥工业大学_合肥工业大学数据结构上机实验代码与实验报告(全)github地址...
- 2018年网络规划设计师下午真题
- spring事务的传播属性
- CentOS 6.8内核版本升级(升级至3.10)(转)
- 使用Attribute简单地扩展WebForm
- ik6yjtkyt不规范价格
- 计算机网络复习题(全套)
- java实现MongoDB中unwind与match用法
- 频繁默认网关不可用_Win10经常断网提示默认网关不可用的解决方法
- 任务栏右键工具栏里的语言栏没有的修复.reg
- win10 纯净版系统如何添加字体的方法
- 请将磁盘插入“U盘(F)“
- ArcGIS制图之阴影效果的表达与运用
- #八、古老的查表计算器--图表
- CHI Exclusive操作
- IDEA通过插件安装Gitee并clone项目
热门文章
- uni app input添加获取验证码按钮_FILEX | 如何在UniSwap挖到UNI?
- python网络爬虫学习笔记(八):XPath的使用
- 买表(【CCF】NOI Online能力测试3 入门组)
- MQTT 控制报文类型、功能及格式(报文结构) - 第2章
- 运算符重载——算术运算符重载
- Android——Fragment的使用(上)
- intellij idea主题
- 1.linux系统基础笔记(互斥量、信号量)
- 算法不会,尚能饭否之排序——折半插入排序(Binary Insert Sort)
- 【人生】比未知更可怕的是预知---献给那些毕业季的童鞋