应一位朋友之邀,对“吾爱论坛‘ELF64手脱upx壳实战’一文”进行了再重现,考虑到朋友他对原文过程理解不深,特抽空行文,着重对每个步骤、每个知识点进行了分解,现共享出来以回馈社会;同时此文对IDA远程调试、编写idc脚本有指导作用。

原文:https://www.52pojie.cn/thread-1048649-1-1.html,是一篇打了精华标签的帖子,我希望你不要看作者写的,因为你如果按文中所写步骤,可能会有些地方跳不过去,带来困惑;为避免带此景,建议看此文为好,不是夸我比作者水平高,毕竟我是站在他肩膀上的。

一、作者提供的样本:

链接:

https://pan.baidu.com/s/1v_uL26C6FooLhHHSbPUhmQ

提取码: ubmc、解压密码:52pojie.cn

样本名:upx_linux;

二、分解过程

①在虚拟机里上传upx_linux样本,放于root目录下;虚拟机IP为192.168.152.138,下图示:

确认样本upx_linux是32位还是64位的程序?

readelf -a upx_linux,下图可以看到为64位程序;

上图为ELF文件头,前四个字节为标识:7f 45 4c 46,意思就是:ELF,下图:

第5个字节标识:为1,则32位;为2,则为64位;

这里建议用010editor这个编辑器,它提供了很多脚本可以自动地识别出文件格式,能对当前字段进行说明。

②上传IDA服务端程序到虚拟机linux,因为我们要用IDA进行远程调试,如图:

因为这里的文件是64位的,所以将linux_server64上传到root目录下;同理,如果是32位,就上传linux_server,并将两文件赋运行权限,因为要运行程序;

chmod +x linux_server64

chmod +x upx_linux

将linux_server64运行起来,

运行起来了,后端监听23946端口;

下面开始ida远程连接,如图操作、配置:

如上图这样配好,OK完成;

③启动代码调试:

程序定位在了上图入口处:44F058H,同下图文件头中的入口地址一致:

一直单步调试下去,来到这里:

F7进入这个call;一直往下单步:

来到图中位置,发现有三个向上的循环,直接在红色位置下断F2,按F9跳出三个循环,来到下断处;

如上图,这里有个call,不用进去,F8过去;来到jmp的跳转[r15],看看是什么:

[r15]指向40000CH处,执行过去,

跳转到40000CH处,注意看上图,这不是ELF文件头嘛(方框处),并在文件头位置临时放置代码(椭圆处),很不正常啊!看来是跳转语句,应该要到正常入口了,胜利在望!继续执行,

来到了这里,看着代码,觉得舒服多了,这里应该就是程序的正常入口OEP了,upx壳脱掉了。

下面就要将这些内存代码dump出来,用作者提供的脚本;

执行完毕了,上图为脚本输出回显窗口。已dump到文件中;将此dump文件上传到linux中,运行正常,OK了。

三、IDC脚本的理解

作者的代码写得很清楚,红笔框出来的代码是重点,尤其是当你对RLF64文件头格式不清楚时就觉得不太好理解;我这里画了张图,结合idc代码帮助理解。

关于ELF64位的文件头,可以参看:

https://github.com/torvalds/linux/blob/master/include/uapi/linux/elf.h#L220

也可以简单点,看这个图:

最好,还是要结合010editor载入的ELF文件,以及在动态调试中的ida的实际值来结合查看,这样才能精准地理解ELF格式;如下图,可以仔细品味品味。

分析到这里就要结束了,内容很多,希望你能静下心来慢慢消化,终将会有很大的收获,也就不枉我的辛苦了(两个中午没休息)!

linux软件逆向分析,详解对ELF64之手动脱壳的逆向分析相关推荐

  1. 软件的安装目录 linux,linux 软件安装目录详解

    git简介及安装配置 Git是一种分布式版本控制系统.它和集中式版本控制系统的区别有如下几点: 1).分布式版本控制没有中央服务器,每个人的电脑上都有完整的版本库: 2).分布式管理系统的安全性要高, ...

  2. Linux的软件包封装格式有,linux软件安装包详解---全

    详细介绍了常见的四种Linux应用软件安装包及其安装方法. 一.解析Linux应用软件安装包,通常Linux应用软件的安装包有四种: 1) tar包,如software-1.2.3-1.tar.gz. ...

  3. linux软件安装之详解apt、yum、dnf 和 pkg包安装

    介绍 包管理系统除了安装软件外,它还提供了工具来更新已经安装的包.包存储库有助于确保你的系统中使用的代码是经过审查的,并且软件的安装版本已经得到了开发人员和包维护人员的认可. 在配置服务器或开发环境时 ...

  4. Linux系统守护进程详解

    文中有不对或者有不清楚的地方,请大家告诉我,谢谢!   Linux系统守护进程详解 不要关闭下面这几个服务: acpid, haldaemon, messagebus, klogd, network, ...

  5. linux的strace命令(详解)

    linux的strace命令(详解) 本文详细讲述linux下的strace命令的用法. strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用. strace 显示这些调用的 ...

  6. linux中top工具,Linux命令工具 top详解

    Linux命令工具 top详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不 ...

  7. 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动

    本节书摘来自异步社区<Linux 设备驱动开发详解(第2版)>一书中的第1章,第1.1节,作者:宋宝华著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.4 L ...

  8. Sniff网络基础原理和软件实现技巧详解

    Sniff网络基础原理和软件实现技巧详解 前言 SNIFF真是一个古老的话题,关于在网络上采用SNIFF来获取敏感信息已经不是什么新鲜事,也不乏很多成功的案例,那么,SNIFF究竟是什么呢? SNIF ...

  9. 【正点原子Linux连载】第三十五章 Linux内核顶层Makefile详解 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

最新文章

  1. ctags,cscope,nerdtree,tmux 笔记
  2. hide subscribers is a good approach if you have a very limited subscribers
  3. IOS内存的一篇文章
  4. phpUnit 安装,实例和简单部署
  5. jzoj6067-[NOI2019模拟2019.3.18]More?More!【dp】
  6. success.ftlh与error.ftlh
  7. JavaWeb EL表达式, JSTL标签及过滤器综合学习
  8. 寻求生态保护与矿产开发平衡点 青海给出“绿色方案”
  9. 使用UE去除复制文本中的空格、换行符和TAB
  10. SystemFile
  11. 111端口rpcbind漏洞
  12. B站百万粉丝是如何做起来的?解密UP主成长之路
  13. 论文笔记 Question Answering over Freebase via Attentive RNN with Similarity Matrix based CNN
  14. 黑苹果11.0big sur驱动因特尔英特尔intel82599万兆网卡教程
  15. 【知识点总结】【CSP考前复习】图论大杂烩【未完】
  16. 画仓鼠大赛 结果公布
  17. add_months()函数介绍
  18. 非科班出身程序员,如何超越科班程序员?
  19. Nett源码剖析(1)NioEventloopGroup的创建2021SC@SDUSC
  20. 编译OpenArkCompiler出现进程被kil

热门文章

  1. 计算机更新后打印机无法使用,升级Win10系统之后惠普打印机无法使用的解决方法...
  2. C# Trim函数所有用法快速掌握
  3. PS证件照换背景颜色
  4. 多屏互动——H5中级进阶 - 修复动态图片版本
  5. 网络管理中TRUNK的作用和使用
  6. 武侠争霸·英雄帖在此,少侠留步
  7. 药物警戒SOP指导建议(试行本)发布,建药物警戒体系_太美医疗科技技术支持
  8. godaddy最新优惠码
  9. 陋室快报-对比学习热文-20211115
  10. android系统密码设置功能,手机怎样设置密码锁屏【详细介绍】