专栏首页玄魂工作室CTF实战24 二进制软件逆向分析基础

CTF实战24 二进制软件逆向分析基础

小姐姐优先~

然后来拜一下祖师爷吧~

重要声明

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

逆向工程定义

逆向工程(reverse engineering),又称反向工程,是一种技术过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品

逆向工程源于商业及军事领域中的硬件分析

其主要目的是,在无法轻易获得必要的生产信息下,直接从成品的分析,推导产品的设计原理

逆向工程可能会被误认为是对知识产权的严重侵害,但是在实际应用上,反而可能会保护知识产权所有者。例如在集成电路领域,如果怀疑某公司侵犯知识产权,可以用逆向工程技术来寻找证据

为什么要逆向呢?

  • 分析恶意代码
  • 了解软件的技术细节
  • 破解要收费软件(嘿嘿)
  • 加固软件安全(和渗透测试差不多一个类型)
  • 漏洞分析

等等

逆向工程必备技能

1. 肯定就是熟练掌握各基础汇编指令,能看懂普通的汇编代码

首先说一下第一点

这应该不需要怎么解释吧,逆向不懂汇编怎么逆向啊哈哈哈

比如要知道基本的计算机中栈空间是存取数据的,内存空间是存取数据的

什么EAX,EBX,ECX,EDX,ESI等等是干嘛的这样

但是这里还是有个小问题

那有同学问,怎样才算熟练掌握各基础汇编指令呢?

我这里贴一段小小的汇编代码

如果你能不看下面的我的解释

明白这段代码的大概要做的操作

那么恭喜你,你已经熟练掌握基础的汇编指令了

mov ecx, dword ptr [eax+8Ch] add eax, 88h mov edx, dword ptr [eax] mov dword ptr [ecx], edx

第三行呢把eax所指向的那个地址上的数据取出来

赋给了edx,最后把edx的值赋到了ecx指向的那个地址上

可能不是经常做恶意代码分析的人一看这个代码就懵了

2. 要会C语言编程,熟练掌握各种结构体的剖析

ok,现在我们说说第二点,为什么要熟练使用C语言?

上面刚刚那段汇编代码,这样看肯定很难看是不,我们可以把他转换成C语言

这样就好分析多了

尤其是在代码量极大的时候

把汇编转换成等价的C语言代码,是会节省我们很多的分析时间的(不要跟我说有插件)

如果你能独立完成汇编到C语言代码的转换,那么说明第二点你也是合格的了~

比如刚刚那段代码,我们转换一下看看(我喜欢用Linux的C风格)

这里我就不定义各个变量了

# include <stdio.h> int main(int argc, char *argv[]) { // Here is some operational before our code ... // 8Ch = 140d ecx = *(eax + 140); // 88h = 136d eax = eax + 136; edx = *eax; *ecx = edx; // Not list return 0; }

可能这样写出来有些同学还是一脸懵逼,这和看汇编差不多啊

但是有些逆向分析的时候,出现的结构体什么的,用汇编分析那就是一连串的地址变地址

如果写成C语言的形式

那就是看上去清爽多了

3. 要了解基本的Win32编程和Linux编程

比如恶意代码调用了哪个库,不需要记住每个Windows的API,但是你要知道哪里去查

比如Windows呢就是MSDN

如果是Linux呢,就是man

当然,对于逆向来说,最重要的还是长期坚持不懈的努力和知识的积累

在逆向的世界里,不管你是Java很6,或者是Python很6

只要你是第一次接触逆向的话,都是一样的起点

除非你C语言很6

啊哈哈哈

本文分享自微信公众号 - 玄魂工作室(xuanhun521)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kali Linux Web渗透测试手册(第二版) - 9.4 - 绕过web服务器的CORS限制

    跨源资源共享(Cross-OriginResource Sharing, CORS)是在服务器端配置的一组策略,它告诉浏览器服务器是否允许在外部站点(跨源请求)...

    用户1631416
  • Kali Linux Web渗透测试手册(第二版) - 2.5 - 识别HTTPS加密参数

    thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt,

    用户1631416
  • Python黑帽编程2.9 面向对象编程

    Python黑帽编程2.9 面向对象编程 我个人认为,计算机语言的发展,有两个方向,一个是从低到高的发展过程,在这个过程中,语言的思考和解决问题的方式是面向硬件...

    用户1631416
  • 函数响应式编程及ReactiveObjC学习笔记 (三)

    今天先不去分析它的核心代码, 我们先看看ReactiveObjC库里面一些特别的东西, 如果大家点开ReactiveObjC目录应该会看到很多category...

    周希
  • 源码 : 设计模式之单例模式的5种实现

    七七分享
  • kubernetes各个版本支持时间是多长?

    Kubernetes发行版通常支持9个月,在此期间,如果发现严重的bug或安全问题,会在对应的分支发布补丁版本。 比如,当前版本为v1.10.1,当社区修复一些...

    党志强
  • 创建一个变更管理流程-部分1

    让我来猜想一下,你的收件箱一定已经塞满了用户要求你更改Salesforce功能的请求。你的桌子上也可能同样布满了相同内容的便签。更有可能的是,你的笔记本里也同样...

    臭豆腐
  • 低比特量化之DoreFa-Net理论与实践

    这篇文章首先详细介绍了DoreFaNet任意比特量化网络的原理,然后提供了DoreFaNet的Pytorch代码实现解析,并给出将DoreFa-Net应用到YO...

    BBuf
  • MMORPG游戏开发实战(一)

    雷潮
  • 从 10 Gb 到 40 Gb,从百万级到千万级转发,打造高性能 TGW

    TGW 是一套实现多网接入的负载均衡系统,为腾讯业务提供着外网接入服务。随着 TGW 影响力的提升,越来越多的业务接入 TGW,对于 TGW 的整体负载能力要求...

    腾讯架构师

扫码关注云+社区

领取腾讯云代金券