通过手动给upx去壳简单了解逆向

前言

这几天我想学习一点逆向的知识,但苦于入门较难,教学视频废话太多,也不想看,就去刷ctf题,不会的就看wp,不得不说ctf真的是居家旅行,杀人灭口必备良药啊。这不,在做逆向题的时候就发现有个软件用ida打开没啥函数,查看wp才知道被加壳了,照着wp用PEID查壳,发现是upx的,人家用od演示了怎么手动去壳,但我看的云里雾里的,各种名词她也没有解释,例如oep,popad啥的,我就只能去查,而且我的od还跟他的不一样,最后我通过x64dbg去掉壳,去壳的过程使我对x64dbg的使用更加熟练,也了解了壳的原理等。于是想记录下来。

脱壳的常见概念

壳:是一种对应用程序加密压缩处理的技术

一般对可执行文件加壳的目的有三:
① 软件加壳,保护数据、防止破解
② 外挂加壳,保护数据、防止破解
③ 病毒加壳,防止被查杀。
常见的壳分为压缩壳和加密壳两种,upx属于压缩壳

脱壳: 表示通过反汇编将壳去掉的过程。

OEP: 程序最开始执行的地方。

原始OEP: 程序加了壳后,壳是先运行的,所以OEP是壳程序的入口点,而原始OEP就是程序原来的入口点。

dump内存: 将内存中的数据或代码转储(dump)到本地。

IAT:
导入地址表,windows下可执行文件中文件格式中的一个字段,描述的是导入信息函数地址,在文件中是一个RVA数组,在内存中是一个函数地址数组。

修复IAT:
在脱壳后,不管是加密壳还是压缩壳,都有一个从内存dump到本地存储并保存为文件,而IAT在文件中是一个RVA数组,在内存中是一个函数地址数组,我们就需要将从内存dump出来的IAT从函数地址数组转换成RVA数组,这样程序才能修复。

脱壳的环境
:这个单独出来说,主要原因就是不同的系统脱壳时遇到的问题可能是不一样的,因为脱壳时要修改IAT,而不同系统中同一个模块的API导出的顺序是不一样的,所以修复时一般都会出现点问题。因此,我建议脱壳的环境应该是在32位系统的虚拟机中,以下的所有操作应该在32位系统的虚拟机中操作,64位系统下可能会出现意想不到的问题。

pushad : 将所有的32位通用寄存器压入堆栈 ESP-32 。

popad : 将所有的32位通用寄存器出栈 ESP+32。

脱壳的方法

单步调试法

一步一步分析每一条汇编指令,吃透每一行汇编背后所代表的意思,将壳代码读懂,从而找到原始OEP然后脱壳。这种方法是最锻炼人的,也是最难的。
说白了就是一点点的调试,需要深厚的汇编功底和耐心。

平衡堆栈(又称ESP定律,技巧法)

一般加壳的程序,都是先运行壳,然后再内存中还原程序,然后跳转到原始OEP,开始执行原程序代码。既然先运行壳,那就必然进入壳程序然后再退出壳程序,期间要遵守堆栈平衡(进入前和退出后的栈指针是相同的),也就是说壳退出后,必然会操作堆栈指针为进入之前的堆栈指针。在进入壳程序时,就可以在堆栈设置访问断点,让程序跑起来,当程序暂停的时候,就是壳程序即将执行完的时候,然后再其附近单步跟踪就可以找到原始OEP了。
这种方法比较适用于upx这种只对代码和数据压缩了的壳,如果还对代码加密了,那么就不是太好找了。加密的话就需要结合单步跟踪法。

脱壳三步法

不管是哪种脱壳方法,都需要遵循脱壳三步法,脱壳三步法分为以下三步:
① 寻找原始OEP
这一步骤的主要作用就是要确定原始程序代码到底在哪里,能找到原始程序的代码,说明壳代码执行完了,我们只有找到原始OEP才能进行下一步的动作。
② dump内存到文件
当我们找到原始OEP,调试运行到原始OEP时,只要代码被还原,我们就可以在这个地方进行dump内存,将内存中被还原的代码和数据抓取下来,重新保存成一个文件,这样脱完壳时,我们就可以用静态分析工具分析程序了。

③ 修复文件
这一步主要就是修复IAT,对从内存中转储到本地的文件进行修复。

UPX壳

①经过UPX压缩的win32/pe文件,包含三个区段:UPX0, UPX1, .rsrc或UPX0, UPX1, UPX2(原文件本身无资源时)。
UPX0:在文件中没有内容,它的"Virtual size"加上UPX1的构成了原文件全部区段需要的内存空间,相当于区段合并。
②UPX1:起始位置为需解压缩的源数据,目标地址为UPX0基址。紧接着源数据块是"UPX stub",即壳代码。一个典型的 pushad/popad
结构,所以人们常用"ESP定律"来脱UPX。
③.rsrc/UPX2:在原文件有资源时,含有原资源段的完整头部和极少部分资源数据(类型为ICON、GROUP_ICON、VERSION和MANIFEST),以保证explorer.exe能正常显示图标、版本信息。还有就是UPX自己的Imports内容,导出表的库名和函数名(如果有的话)。

就是因为UPX是一个典型的 pushad/popad
结构,又要遵守堆栈平衡,即pushad之前的ESP需要跟popad之后的ESP相同,所以当我们看到UPX壳进入pushad后,对堆栈添加访问断点,当壳即将及执行结束即执行到popad要去还原堆栈时,必然会触发断点暂停下来,然后单步调试往下走,原始OEP就在附近了。

使用x64dbg进行脱壳

首先用PEID工具进行查壳,发现为upx壳,这里我使用了一个CTF题给的程序。

打开x64dbg,拖入程序。发现EIP指在这个位置,往下看看并没有发现pushad,不知道为啥人家用od打开就能看到pushad。这种情况我们就按
F8 单步调试,不知按了多少次后终于遇到了pushad,我们可以看一下在没有执行pushad时的ESP为 0060FF74, 如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tklGXJZh-1693021558436)(https://image.3001.net/images/20220426/1650971512_6267d378728ba95c7901a.png!small)]
然后在按一次F8,使其执行pushad,将此时的ESP记录一下,0060FF54,正好相差32。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7bV058E9-1693021558437)(https://image.3001.net/images/20220426/1650971382_6267d2f6523e876619116.png!small)]此时我们在堆栈打上断点,右键ESP,点击
在内存窗口中转到

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gb63i4M1-1693021558438)(https://image.3001.net/images/20220426/1650971388_6267d2fc232a6e40e61d8.png!small)]

然后在内存窗口中,右键 断点-- >硬件访问–>4字节。

打上断点后,直接按F9运行到断点处,观察ESP值为0060FF74,跟pushad前一样,遵循堆栈平衡。且上面就是popad,此时原始OEP就不远了,我们要理解壳程序执行完后,必然有个大的跳转
跳转到原始OEP去执行源程序,我们能看到下面有一个jmp 且跳转到401280,跳转范围很大,这应该就是我们要找的原始OEP.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d0SC9fjE-1693021558440)(https://image.3001.net/images/20220426/1650971559_6267d3a70ea08e9048fd5.png!small)]双击jmp跳转到401280,使用插件sclla,修改OEP为401280,点击dump,dump到本地文件。保存即可。

1650971565_6267d3ad83c0cb630d244.png!small[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nFV1hWiW-1693021558442)(https://image.3001.net/images/20220426/1650971571_6267d3b315a85856e6d70.png!small)]但此时的文件无法正常运行,因为没有修复IAT,但是通过IDA可查看原始代码了,如果有运行程序的需求可以修复IAT。

修复IAT

依然使用Scylla,使用IAT自动扫描,

1650971578_6267d3ba2a31c89eba599.png!small

成功后点击 GET Imports 获取导入表

1650971584_6267d3c015fb22f1ef87b.png!small

然后再点击,fix Dump 修复上一节的dump文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xkCBlSoD-1693021558445)(https://image.3001.net/images/20220426/1650971590_6267d3c63e34fc1c5e159.png!small)]

即可。

总结

对于像我这种想入门逆向的,这种方式真的可以培养兴趣,也从中学到了很多知识,我也不会仅仅止步于脱upx的。

[外链图片转存中…(img-xkCBlSoD-1693021558445)]

即可。

总结

对于像我这种想入门逆向的,这种方式真的可以培养兴趣,也从中学到了很多知识,我也不会仅仅止步于脱upx的。

题外话

初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:

2023届全国高校毕业生预计达到1158万人,就业形势严峻;

国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。

一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。

6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。

2022届大学毕业生月收入较高的前10个专业

本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。

具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wcUCAGpb-1693021558447)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230809162658551.png)]

“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。

网络安全行业特点

1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!

img

2、人才缺口大,就业机会多

2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。
img

行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-knODOqGL-1693021558448)(C:\Users\Administrator\Desktop\网安思维导图\享学首创年薪40W+网络安全工程师 青铜到王者技术成长路线V4.0.png)]

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BcIvy4H2-1693021558449)(C:\Users\Administrator\Desktop\网安资料截图\视频课件.jpeg)]

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

![挖掘文档 (1)](C:\Users\Administrator\Desktop\网安资料截图\挖掘文档 (1).png)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值