linux软件逆向分析,详解对ELF64之手动脱壳的逆向分析
应一位朋友之邀,对“吾爱论坛‘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之手动脱壳的逆向分析相关推荐
- 软件的安装目录 linux,linux 软件安装目录详解
git简介及安装配置 Git是一种分布式版本控制系统.它和集中式版本控制系统的区别有如下几点: 1).分布式版本控制没有中央服务器,每个人的电脑上都有完整的版本库: 2).分布式管理系统的安全性要高, ...
- Linux的软件包封装格式有,linux软件安装包详解---全
详细介绍了常见的四种Linux应用软件安装包及其安装方法. 一.解析Linux应用软件安装包,通常Linux应用软件的安装包有四种: 1) tar包,如software-1.2.3-1.tar.gz. ...
- linux软件安装之详解apt、yum、dnf 和 pkg包安装
介绍 包管理系统除了安装软件外,它还提供了工具来更新已经安装的包.包存储库有助于确保你的系统中使用的代码是经过审查的,并且软件的安装版本已经得到了开发人员和包维护人员的认可. 在配置服务器或开发环境时 ...
- Linux系统守护进程详解
文中有不对或者有不清楚的地方,请大家告诉我,谢谢! Linux系统守护进程详解 不要关闭下面这几个服务: acpid, haldaemon, messagebus, klogd, network, ...
- linux的strace命令(详解)
linux的strace命令(详解) 本文详细讲述linux下的strace命令的用法. strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用. strace 显示这些调用的 ...
- linux中top工具,Linux命令工具 top详解
Linux命令工具 top详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不 ...
- 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动
本节书摘来自异步社区<Linux 设备驱动开发详解(第2版)>一书中的第1章,第1.1节,作者:宋宝华著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.4 L ...
- Sniff网络基础原理和软件实现技巧详解
Sniff网络基础原理和软件实现技巧详解 前言 SNIFF真是一个古老的话题,关于在网络上采用SNIFF来获取敏感信息已经不是什么新鲜事,也不乏很多成功的案例,那么,SNIFF究竟是什么呢? SNIF ...
- 【正点原子Linux连载】第三十五章 Linux内核顶层Makefile详解 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
最新文章
- ctags,cscope,nerdtree,tmux 笔记
- hide subscribers is a good approach if you have a very limited subscribers
- IOS内存的一篇文章
- phpUnit 安装,实例和简单部署
- jzoj6067-[NOI2019模拟2019.3.18]More?More!【dp】
- success.ftlh与error.ftlh
- JavaWeb EL表达式, JSTL标签及过滤器综合学习
- 寻求生态保护与矿产开发平衡点 青海给出“绿色方案”
- 使用UE去除复制文本中的空格、换行符和TAB
- SystemFile
- 111端口rpcbind漏洞
- B站百万粉丝是如何做起来的?解密UP主成长之路
- 论文笔记 Question Answering over Freebase via Attentive RNN with Similarity Matrix based CNN
- 黑苹果11.0big sur驱动因特尔英特尔intel82599万兆网卡教程
- 【知识点总结】【CSP考前复习】图论大杂烩【未完】
- 画仓鼠大赛 结果公布
- add_months()函数介绍
- 非科班出身程序员,如何超越科班程序员?
- Nett源码剖析(1)NioEventloopGroup的创建2021SC@SDUSC
- 编译OpenArkCompiler出现进程被kil