漫谈逆向工程
漫谈逆向工程
逆向工程,原名Reverse Engineering,简称RE。关于其书面介绍我就不复制粘贴百度百科了,简而言之就是从发布的产品中反向分析其程序逻辑和算法——基于各种目的。
引言
准确地说,逆向工程包括软件逆向工程——即本文所讨论的,也包括硬件逆向工程。那么硬件逆向是怎么做的呢?据我所知,我国的芯片设计水平普遍比国外落后10年。当国外厂商已经成功流片量产X纳米的芯片时候,我们还在XX纳米的研发和难点攻关中挣扎。挣扎的过程之一就是芯片逆向。
一般从代理买到量产芯片后,第一步就是溶解外部封层,使用电子显微镜对电路进行拍摄,俗称拍片;第二步是使用特定工具软件(也是国外的)对照片进行切分,通过人力对自动生成的连线进行修复;第三步是将修复的连线还原成数字电路,再由IC逻辑工程师进行进一步修复;最后组合不同模块的门级电路,还原成硬件描述语言VHDL或者Verilog。之后就和正常的流程一样,开发、测试、模拟、仿真、流片……
![]()
扯远了,还是回到主题上来。硬件逆向的成本动辄成百上千万,没有纳税人的支持是玩不起的。但是软件逆向不同,只要一个智力正常的人,研究一两个月,也能上XX破解论坛上分享他们的破解成果了。
这也引出了一个问题,当我们在谈论逆向的时候,我们在谈论的是什么?
软件逆向
二进制逆向就是IDA-Pro + F5一把梭吗?Java逆向就是JADX一把梭吗?很多接触过逆向的新手都知道不是,他们会跳出来反驳,夹杂着一些X86/ARM/MIPS Assembly、Smali、XYZ IR等等让人不明觉厉的词汇。虽然听不懂,但我们也知道他们想表达什么:逆向是一门牵涉甚广的领域。
的确,如果HTML、CSS这些领域是“单关节运动”,那么逆向就是“多关节运动”。前段时间有些使用node写前后端的开发者喜欢自称“全栈工程师”,要按照我的说法,逆向工程师才是当之无愧的全栈。为什么?来看看一个逆向工程师所应该具备的部分技能:
- 一定的软件开发能力,熟悉数据结构、算法
- 了解各种编程语言,熟悉编译原理
- 熟悉计算机基本原理、操作系统、编译器、链接器
- 熟悉对应平台或者虚拟机的汇编语言(机器码)、中间语言(字节码)
- …
一个好的逆向工程师,通常也是个不错的开发者。即便现在有各种收费或免费的反编译器,也需要逆向工程师对代码进行梳理、分析、审计。这就意味着逆向者需要站在比开发者更高的角度去审视,甚至比开发者更加理解他们的代码。……
关于初衷
搞逆向这么麻烦,要懂这个,要懂那个,直接劝退了很大一波人。但其实这些只是“术”而已,实际工作中只需要用到一部分子集,甚至只要学会使用商业工具也能干活儿了。在我看来,逆向工程师的核心还是——强烈的好奇心。
或者说,这是大部分网络安全人员(黑客)所具备的特质。因为好奇某个商业软件的功能,或者好奇某个病毒蠕虫的行为,才走向了这条逆向之路。
逆向的过程是枯燥的。与其说逆向是技术活,在我看来更多是体力活。尤其是在分析大型软件的时候,每天改变量名,改函数名,分析树状的调用路径,……很容易让人感到厌烦。
但是对于抱有好奇心的人而言,逆向应该是快乐的。每分析出一个软件或者函数的行为,就仿佛侦探找到关键线索或证据一样兴奋。隐藏的路径越深,知道的人就越少,那么被藏起来的东西也就越有价值。
关于快乐
逆向应该是快乐的,但很多人不想让你快乐。于是有了各种符号加壳、混淆、加密、解释执行(虚拟机)等应用增强方案,来提高逆向工程的难度。这通常是企业中端安全工程师的杰作,或者是使用了安全公司的通用安全加固方案。
所谓的逆向混淆,只有在别人不知道你的方法时才有价值。对于通用的加固,所面临的挑战者甚多,其内部实现很可能已经被扒了个底朝天;而对于企业自研的方案,又通常因为太low而被简单绕过。所以,想让逆向工程师不快乐的人有时候成功了,但是大部分时候还是在逆向工程师手下败下阵来。用一朋友的话来说就是:“程序在我的设备、我的环境里运行,难道它还能上天?”
关于现状
应用程序是不能上天,但是逆向工程师也很难上天。记得柯南里有一句话让我印象深刻——“如果怪盗是富有创造力的艺术家,那么侦探充其量只是吹毛求疵的评论家”。逆向工程做的大部分都是破坏性的工作,而不像开发者那样带来正面价值。
目前社区中做逆向的大多是出于解谜(CTF)、软件破解、游戏外挂等,即便是专门讨论逆向的安全论坛中,对技术细节的探讨也寥寥无几,更多是炫耀和分享自己的“成果”。天下熙熙,皆为利来,天下攘攘,皆为利往,除了闷声发大财地以搞逆向赚钱的工作室外,公开分享的也就只能是为名了。
那么职业做逆向的情况又如何呢?专门做逆向的正经岗位应该是恶意软件分析了,衍生出的团队在商业环境中突出PR宣传安全产品或者情报能力。其他小公司里招聘做逆向的人,要么是分析竞争对手,要么围绕高流量软件的去进行分析、破解、换皮、刷粉养号等等,是在违法犯罪的边缘来回试探。
专门做逆向的情况不多,但是将其作为一门技能去掌握的人也不少。我自己本身也不是专门做逆向的,因为工作需要才去对其进行了解。除了开源软件,也有越来越多闭源软件的漏洞被暴露出来,你不去挖别人自然会去挖。就拿安卓每个月的安全通告来说,带星号的漏洞简直不要太多。
学习资源
如果你是也准备转行学习网络安全(黑客)或者正在学习,这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你
**读者福利 |**CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享**(安全链接,放心点击)**
知识库由360智榜样学习中心独家打造出品,旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力,熟练掌握基础攻防到深度对抗。
1、知识库价值
深度: 本知识库超越常规工具手册,深入剖析攻击技术的底层原理与高级防御策略,并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等,提供了独到的技术视角和实战验证过的对抗方案。
广度: 面向企业安全建设的核心场景(渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营),本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点,是应对复杂攻防挑战的实用指南。
实战性: 知识库内容源于真实攻防对抗和大型演练实践,通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。
2、 部分核心内容展示
360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。
360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。
内容组织紧密结合攻防场景,辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合,是你学习过程中好帮手。
1、网络安全意识
2、Linux操作系统
3、WEB架构基础与HTTP协议
4、Web渗透测试
5、渗透测试案例分享
6、渗透测试实战技巧
7、攻防对战实战
8、CTF之MISC实战讲解
3、适合学习的人群
一、基础适配人群
- 零基础转型者:适合计算机零基础但愿意系统学习的人群,资料覆盖从网络协议、操作系统到渗透测试的完整知识链;
- 开发/运维人员:具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能,实现职业方向拓展或者转行就业;
- 应届毕业生:计算机相关专业学生可通过资料构建完整的网络安全知识体系,缩短企业用人适应期;
二、能力提升适配
1、技术爱好者:适合对攻防技术有强烈兴趣,希望掌握漏洞挖掘、渗透测试等实战技能的学习者;
2、安全从业者:帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力;
3、合规需求者:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员;
因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】
力;
3、合规需求者:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员;
因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】
