作者: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 分析,样本逆向中系统调用的识别方法相关推荐

  1. linux下安装小米摄像头,在深度Deepin系统中安装米聊的方法(安装MiTalk deb及AppImage包)...

    本文介绍在深度Deepin操作系统中安装米聊(MiTalk)的方法,可以下载deb软件包或者AppImage软件包安装,当前的版本是4.0.39. 在深度Deepin系统中安装米聊的方法 1.安装米聊 ...

  2. Linux下gcov和lcov代码覆盖率分析(C/C++覆盖率在NGINX测试中的应用)

    Linux下gcov和lcov代码覆盖率分析方法 gcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具 使用方法:在gcc或者g++后面添加参数 -fprofile-arcs -ftes ...

  3. linux 下的动态库制作 以及在python 中如何调用 c 函数库

    linux 下的动态库制作 以及在python 中如何调用 c 函数库 动态库: 动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序 ...

  4. linux下cp复制目录时排除某些目录的方法分享,Linux 下复制(cp)目录时排除一个或者多个目录的方法...

    cp 貌似没有排除目录的功能,可以使用 rsync 命令来实现了,如: [案例] /home/52php目录里面有data目录,data目录里面有 a.b.c.d.e 五个目录,现在要把data目录里 ...

  5. linux查看远程服务器端口,linux下查看本机和远程服务器的端口是否连通的方法...

    linux下查看本机和远程服务器的端口是否连通的方法 如下所示: 1.ssh -v -p [端口号] [用户名]@[IP地址] 2.curl [IP地址]:[端口号] 以上这篇linux下查看本机和远 ...

  6. linux下阻塞的系统调用,Linux下socket设置为非阻塞方式和fcntl系统调用.pdf

    Linux 下 socket 设置为非阻塞方式和 fcntl 系统调用 [ 日期: 2011-04-16] 来源: Linux 社区 作者: Linux 用以下方法将 socket 设置为非阻塞方式 ...

  7. linux如何进入su超级用户,Linux下普通用户用sudo su给自己加root权限的方法

    首先: sudo这个命令就是给后面的命令加上root权限(sudo=superuser do),su这个命令是switch user,切换用户,你sudo su这个命令的意思是用root的权限来切换到 ...

  8. 【驱动】linux下I2C驱动架构全面分析

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  9. linux下查看cpu负载及分析

    linux下查看cpu负载有两个命令可以看:uptime 和 top. 其中load average的三个值分别表示1分钟.5分钟.15分钟的CPU负载情况,是运维需要经常关注的 那么怎么确定这些值展 ...

最新文章

  1. Oracle数据类型简介【转贴】
  2. 让PHP程序永远在后台运行
  3. 数据库原理与应用(SQL Server)笔记 第三章 连接查询
  4. 2015-03-19 Opportunity order by implementation detail
  5. java实验报告合肥工业大学_合肥工业大学数据结构上机实验代码与实验报告(全)github地址...
  6. 2018年网络规划设计师下午真题
  7. spring事务的传播属性
  8. CentOS 6.8内核版本升级(升级至3.10)(转)
  9. 使用Attribute简单地扩展WebForm
  10. ik6yjtkyt不规范价格
  11. 计算机网络复习题(全套)
  12. java实现MongoDB中unwind与match用法
  13. 频繁默认网关不可用_Win10经常断网提示默认网关不可用的解决方法
  14. 任务栏右键工具栏里的语言栏没有的修复.reg
  15. win10 纯净版系统如何添加字体的方法
  16. 请将磁盘插入“U盘(F)“
  17. ArcGIS制图之阴影效果的表达与运用
  18. #八、古老的查表计算器--图表
  19. CHI Exclusive操作
  20. IDEA通过插件安装Gitee并clone项目

热门文章

  1. uni app input添加获取验证码按钮_FILEX | 如何在UniSwap挖到UNI?
  2. python网络爬虫学习笔记(八):XPath的使用
  3. 买表(【CCF】NOI Online能力测试3 入门组)
  4. MQTT 控制报文类型、功能及格式(报文结构) - 第2章
  5. 运算符重载——算术运算符重载
  6. Android——Fragment的使用(上)
  7. intellij idea主题
  8. 1.linux系统基础笔记(互斥量、信号量)
  9. 算法不会,尚能饭否之排序——折半插入排序(Binary Insert Sort)
  10. 【人生】比未知更可怕的是预知---献给那些毕业季的童鞋