UPX脱壳逐一跟踪分析

UPX脱壳逐一跟踪分析

  • 写在前面
  • OD跟踪命令
  • 先结合PE知识分析
  • 分析“新年快乐.exe”

写在前面

之前看到的UPX脱壳文章都只是教了方法,对UPX的原理少有提及。看了《逆核》的UPX脱壳一章后,俺尝试把UPX脱壳与PE文件结构的知识结合起来整理了一些(也可联系压缩器Paker的知识)。
分析样本来自BUUCTF:Reverse题目“新年快乐”(本文将寻找样本的OEP)

OD跟踪命令

可能会用到的几个跟踪命令:

命令快捷键作用
Animate IntoCtrl+F7反复执行Step Into命令(画面显示)
Animate OverCtrl+F8反复执行Step Over命令(画面显示)
Trace IntoCtrl+F11反复执行Step Into命令(画面不显示)
Trace OverCtrl+F12反复执行Step Over命令(画面不显示)
停止跟踪F7

Animate:执行时画面会跟着光标移动一直显示;
Trace:会在事先设置好的跟踪条件处停下,并生成日志文件。
跟踪命令适合用在大型代码,一好处是容易发现短循环。
我分析时只是使用了F8/F7/F4。

先结合PE知识分析

一般情况下,分析压缩后的UPX壳,可以看到第一个节区的名称为UPX0,SizeOfRawData=0,而VirtualSize=1000h(大于0),第二个节区UPX1,它的PointerToRawData和第一个节区的相同。也就是说,第一个节区在文件中是不占用空间的,只有运行时才分配大小。
其实,第二个节区含有解压代码和将被解压的代码(压缩前的代码),在加载过程中,第二个节区的解压代码运行,将被解压代码解压到第一个节区。最后到达EP执行代码。

分析“新年快乐.exe”

  1. 打开:
    打开程序后

  2. 根据上文,下面会先执行解压代码,这个代码在UPX1节区,在此节区设置内存访问断点。
    Memory map

  3. F9几次,就能在UPX1看到经典pushad了。
    解压代码 4. F8一会可以在下面不远处发现一个循环
    循环1
    大致作用:从ESI(指向UPX1)中读取一个字节写入EDI(指向UPX0)
    需要F4跳出循环的话记得先删除刚刚下的内存断点,继续F8

  4. 提示:后面遇到的这个循环得跳出去
    循环

  5. 走出上面循环就会到这,这里的循环比较重要。它有一个像重定位表的作用,会把机器码为E8和E9(CALL/JMP指令)后跟的地址修改。重要循环

0040E3C2    5E              pop esi                                  ; 新年快乐.<ModuleEntryPoint>
0040E3C3    89F7            mov edi,esi     			//EDI=ESI                         ; 新年快乐.00401000
0040E3C5    B9 4A000000     mov ecx,0x4A	
0040E3CA    8A07            mov al,byte ptr ds:[edi]		//0101540A 取EDI的值进行对比
0040E3CC    47              inc edi                                  ; 新年快乐.00401006
0040E3CD    2C E8           sub al,0xE8
0040E3CF    3C 01           cmp al,0x1
0040E3D1  ^ 77 F7           ja short 新年快乐.0040E3CA		//判断取出来的值是否是E8/E9
0040E3D3    803F 00         cmp byte ptr ds:[edi],0x0
0040E3D6  ^ 75 F2           jnz short 新年快乐.0040E3CA
0040E3D8    8B07            mov eax,dword ptr ds:[edi]		//需要修改的地址
0040E3DA    8A5F 04         mov bl,byte ptr ds:[edi+0x4]
0040E3DD    66:C1E8 08      shr ax,0x8
0040E3E1    C1C0 10         rol eax,0x10
0040E3E4    86C4            xchg ah,al
0040E3E6    29F8            sub eax,edi                              ; 新年快乐.00401006
0040E3E8    80EB E8         sub bl,0xE8
0040E3EB    01F0            add eax,esi                              ; 新年快乐.00401000
0040E3ED    8907            mov dword ptr ds:[edi],eax		//处理后的新地址放入EDI
0040E3EF    83C7 05         add edi,0x5
0040E3F2    88D8            mov al,bl
0040E3F4  ^ E2 D9           loopd short 新年快乐.0040E3CF
  1. 走出循环后,下面来到这,设置IAT表
    IAT
    40E3F6处执行后ESI = 401000(第一个节区),EDI = 40D000(第二个节区)
    API名字
    在这里插入图片描述
    GetProcAddress可以根据函数名称获取地址:GetProcAddress
    按照书中的说法,此段程序会根据API名称,用GetProcAddress()函数获取API函数的地址,然后把地址输入到EBX指向的原IAT区域。
  2. 设置完IAT表,差不多会到程序入口点。我的想法是要到程序入口点所在的第一节区,需要有一个大的往上跳转,如是分析,然后有:
    最后
    401280就是程序的OEP

本人是菜鸡,调试能力有限,如有错误的地方麻烦指出。

这篇文章非工具脱UPX壳,也涉及PE知识:
https://my.oschina.net/u/1171187/blog/1143063
(侵权则删)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/352863.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

逆向:UPX脱壳

2020/05/18 - 引言 本身对加壳这种东西只是知道&#xff0c;只知道可以使用软件进行自动化脱壳&#xff0c;没有具体了解过原理。然后&#xff0c;最近部署的蜜罐经常下载UPX加壳的样本。这次就来分析一下。 学习到的东西 利用vim修改十六进制内容upx脱壳 样本 首先&#xff0c…

对于UPX脱壳的解决

&#xff08;upx学习ing,不定期更新一些自己遇到的一些关于此的比较好的题目或者感悟&#xff09; 对于手动脱壳&#xff0c;我们有两种常用的安全工具&#xff0c;一个是od,另一个是ida。两个方法略有不同。对于脱一般的程序壳的时候&#xff0c;我主要用的是ida来脱壳&#…

Linux4.9 Tomcat部署及优化

文章目录 计算机系统5G云计算第六章 LINUX Tomcat部署及优化一、Tomcat概述1.Tomcat核心组件2.什么是 servlet3.什么是 JSP4.Tomcat 功能组件结构5.Container 结构分析6.Tomcat 请求过程7. 配置文件 二、Tomcat 服务部署1.关闭防火墙&#xff0c;将安装 Tomcat 所需软件包传到/…

elf 变异upx 脱壳

题目 是某ctf题 首先使用IDA打开&#xff1a; 函数极少&#xff0c;有壳。 查看函数 这个跳转比较可疑 下面进行IDA动态调试 进入loc_52D516 再进入 直到找到jmp r13 运行到这里&#xff0c;F8跳转 直接retn下断点F9&#xff0c;直接retn下断点F9重复&#xff0c; 直到…

upx手动脱壳

工具 upx&#xff1a;upx是一个开源的压缩壳工具&#xff0c;可以到github下载upxStudy_PE工具&#xff0c;可以到看雪论坛下载 upx简单的用法 upx src.exe命令将src.exe加壳 upx src.exe -o dst.exe命令将src.exe加壳并另存为dst.exe upx手动脱壳 脱壳原理 平衡堆栈法(又…

upx脱壳教程(buuctf逆向题新年快乐)

upx脱壳 脱壳教程步骤&#xff1a;工具&#xff1a; 实际操作OEP导出内存文件&#xff08;dump&#xff09;修复 题目链接 脱壳教程 步骤&#xff1a; 1.找到OEP 2.导出内存文件&#xff08;dump&#xff09; 3.修复 工具&#xff1a; 吾爱破解OD x32dbg/x64dbg 实际操作 …

微信小程序开发之云函数本地调试

环境 微信开发者工具 Stable 1.06.2303220云开发控制台 v1.5.47 简介 微信云开发提供了云函数本地调试功能&#xff0c;在本地提供了一套与线上一致的 Node.js 云函数运行环境&#xff0c;让开发者可以在本地对云函数调试&#xff1a; 在本地调试时&#xff0c;可以设置断点…

全面的软件测试

1 全过程的软件测试图解 传统的软件测试&#xff0c;开发人员完成任务之后&#xff0c;最后交付给测试人员&#xff0c;这种模式下&#xff0c;测试人员不能及早发现需求阶段的缺陷&#xff0c;同时测试工作的开展也滞后了&#xff0c;产品质量得不到有效的过程控制和分析&…

List of USB ID's

为什么80%的码农都做不了架构师&#xff1f;>>> # # List of USB IDs # # Maintained by Stephen J. Gowdy <linux.usb.idsgmail.com> # If you have any new entries, please submit them via # http://www.linux-usb.org/usb-ids.html # or send entries a…

FastAPi上传文件报错,There was an error parsing the body

问题描述 通过postman调用fastapi编写的文件接口报错&#xff0c;如下图&#xff1a; {"detail": "There was an error parsing the body" } 问题的解决过程 postman本身的问题 postman有个work directory的概念&#xff0c;所以再使用postman上传的文…

Arm NN 成功适配 openEuler Embedded,提供高性能神经网络推理能力

近期&#xff0c;RISC-V SIG 完成了 Arm NN 在 openEuler Embedded 系统的适配&#xff0c;于 2023 年 1 月合入系统构建工程代码库&#xff0c;经测试验证可用&#xff0c;实现了神经网络加速库在 openEuler Embedded 嵌入式系统上的加速和优化。 系统构建工程下载地址&#x…

【数据结构】--单链表力扣面试题⑥链表的回文结构

题述&#xff1a;对于一个链表&#xff0c;请设计一个时间复杂度为o(n),额外空间复杂度为o(1)的算法&#xff0c;判断其是否为回文结构。给定一个链表的头指针A&#xff0c;请返回一个bool值&#xff0c;代表其是否为回文结构。保证链表长度<900 测试样例&#xff1a; 输入…

中医养生APP小程序开发 了解传统文化传承医学经典

中国文化博大精深&#xff0c;中国传统文化更是历史久远&#xff0c;一直到几千年后的今天很多传统文化依然对我们现在的生活有着重大的影响&#xff0c;比如中医。随着人们对健康关注度的提高&#xff0c;很多人把目光投向了追本溯源的中医上&#xff0c;企图通过中医养生达到…

还原SQL Server 2008备份到另一台设备上

打开”SQL Server Management Studio“菜单&#xff0c;右击数据库&#xff0c;选择“还原数据库”&#xff1a; 设置目标目标数据库的名称和选择数据库备份文件的位置&#xff1a; 在"选项"页中&#xff0c;更改数据文件的还原路径为新的位置 &#xff0c;这里…

墨天轮专访TDengine陶建辉:坚持做难而正确的事,三次创业成就不悔人生

导读&#xff1a; 时序数据库&#xff08;Time Series Database&#xff09;在最近几年被越来越多的用户接受并使用&#xff0c;并有广泛的应用场景。云原生时序数据库 TDengine 一直稳居墨天轮时序数据库榜首&#xff0c;其近期的海外发展也初见成效。本期&#xff0c;墨天轮技…

清除 挖矿脚本 攻击

清除 挖矿脚本 攻击 1.查看系统进程,是否有异常: top 发现CPU占用率200%&#xff0c;判定服务器已经被植入木马 2.查看异常进程是哪一个程序造成的 ls -al /proc/14618 发现恶意程序&#xff08;绿色的是可执行文件&#xff09;/etc/lafy 3.删除恶意程序 cd /etc rm -rf …

记一次挖矿病毒应急处置全过程挖矿处置基本操作

记一次挖矿病毒应急处置全过程&挖矿处置基本操作 一、处置过程1.查看第一位的pid号&#xff1a;325352.进入/tmp/.X11-unix目录&#xff0c;其中11文件中写的是32535,01文件中写的是守护进程pid号10092&#xff08;目录里的文件不一定相同&#xff09;。将整个目录删除3.cr…

操作系统复习2.3.2-临界区的软件硬件实现方法

软件实现方法 思想 在进入区设置并检查一些标志来得知是否有进程已经在临界区&#xff0c;有则循环检查等待&#xff0c;无则直接进入&#xff0c;进程进入/离开临界区时修改标志 单标志法 通过标记进程号来实现控制只有一个进程能够进行临界区&#xff0c;但会出现P0进程进…

挖矿木马分析之肉鸡竟是我自己

之前服务器总是有一些异地登陆的告警信息&#xff0c;用代理就会这样&#xff0c;自己也没太在意。今天偶然间打开一看&#xff0c;发现如下提示&#xff01; 接下来处理一下&#xff01; 收集信息 finalshell登陆发现CPU占用率为100%ps auxw|head -1;ps auxw|sort -rn -k3|h…

电脑是否中挖矿病毒

『壹』 怎么检查自己电脑有没有被人用来挖矿&#xff0c;比特币 挖矿都是烧的显卡&#xff0c;以下方法可以鉴定自己显卡是不是矿卡 1&#xff1a;通过肉眼来识别这个硬件究竟是不是矿卡 &#xff0c;其实通过其他方式也可以测出&#xff0c;就比如说你到电脑里面去测矿卡的超…