一、进制与0,1

  • 计算机上都是以0,1来存储的
  • 一位十六进制数用四位二进制数表示,8位二进制表示一个字节,字节是计算机管理的最小单元,所以2位十六进制数表示一个字节,我们平时用工具打开二进制文件,都是用十六进制显示,2位就是一个字节
  • 计算机存储一个数据可以有不同的数据宽度
    • 数据宽度:一般常用有Byte(字),Word(字)、Dword(双字)、DDword(四字)。分别为8位、16位,32位,64位
  • 八进制的2-3等于多少,详见day02.3-逻辑运算

二、PE文件结构

  • PE文件结构只限于windows操作系统,windows上运行的任何一个可执行的程序都应该遵循的结构。所以PE结构适用于windows上任何可执行程序

  • 如果想分析知道别人写的程序,至少应该知道三件事:1.程序从哪里开始执行;2.数据藏在哪里;3.程序藏在哪里

  • 如何分析一个PE文件:

    • 一堆密密麻麻的十六进制数,从哪位开始的多少长度表示的数值是文件的某些信息,下面举一个例子初步分析一下

    • 文件的起始位置:在PE文件的0x3c处开始往后的4字节。注意:windows系统中数据存储方式是低位在前、高位在后,比如一个文件用二进制的方式打开,如果找到表示文件起始位置的数显示为e8 00 00 00,这个显示的格式是按照windows存储方式,但是现实中我们写、读书是从高位到低位,所以这里应该读作00 00 00 e8,即文件的起始位置在0xe8。(由于计算机存储最小单位是1个字节,即2位十六进制,所以每两位十六进制当做一个整体读,即00、e8当做整体,不能写成00 00 00 8e)

    • 找到0x3c在哪里的方法:如下有两种方法。进而我们可以找到文件的起始位置

    • 注意文件的起点不等于程序运行的起点,只是文件的数据信息存储的起点

  • 分析PE文件结构的工具:打开工具帮我们分析会大大减少我们的工作量,但是一定要知道PE中的一些关键信息:比如程序的入口点,代码入口点,数据入口点,输入表,输出表,资源表。

  • 所以如果PE学好,你给我一个exe文件,我差不多就可以大体的知道它的结构和功能等,接着就可以在特定位置给PE文件注入病毒等操作,或者修改其中的一些信息,所以外挂和注入病毒就是这么来的

  • 但是如果给PE文件加壳,可以打乱PE文件的结构和数字,让别人无法直接下手;或者反调试,别人用一些调试工具打开,程序立马退出等

  • 注意一点内容:你用工具分析出来的文件的某结构的地址是多少,只是文件还没执行时的相对于文件初识地址的地址,但是如果一旦将程序运行,由于文件将要加载到内存中,所以所有工具显示的地址都会发生变化,实际上的地址应该是文件整体加载到内存中的基地址+文件某结构的基地址。比如工具显示PE文件的代码基址为0x00001000,镜像基址为0x00400000,所以此时代码基址在实际在内存的地址应该为代码基址+镜像基址

三、硬编码

  • 比如用PE查看器–>找到了代码段起始地址–>找到了第一个函数,由很多的二进制,工具显示的是十六进制数构成,那么每一个数字代表什么含义,我们如果把数字转化为我们更容易理解的汇编语言:比如如果显示55,根据硬编码可以知道55如果用汇编语言表示:则是push ebp;再比如8bec用汇编表示为mov ebp,esp。如果学过汇编语言则就知道这段函数是干什么用的

四、逆向的过程

  • 二进制–>汇编–>C语言
  • 从一堆看不懂的二进制数,转换成可以看懂的汇编语言,再还原成高级代码

五、初级阶段需要完成的项目

  1. 反汇编引擎(任何逆向分析工具必备模块)

  2. PE分析器(外挂、反外挂、破解、病毒、反病毒基础)

  3. 游戏案例逆向分析或者加密壳

  4. 商业软件开发模板(登录界面,进程注入,网络验证,隐藏模块,代码加密)

滴水三期:day01.1-初识逆向相关推荐

  1. 滴水三期逆向基础系列(一)-读取文件到内存再读取回文件

    跟着滴水三期学了很长时间了,本着,每一点都要吃透的精神,跟"读文件到内存(拉伸),再读回文件(压缩回来)"杠了一天.先看看按着老师的架构写的代码吧(老师的代码有很多问题(可能是我太 ...

  2. 滴水三期:day41.2-PE阶段所有代码汇总(PE文件分析器基本C代码)

    一.代码汇总 1.功能如下 打印PE头字段 打印节表 将文件读入到FileBuffer,FileBuffer到ImageBuffer到newBuffer,最后存盘 RVA转FOA.FOA转RVA 向代 ...

  3. 【滴水三期】--公开课

    课程思想:用逆向的思维学习正向,而不是用正向的思维学习逆向 滴水逆向课程体系: 第一章  进制.寄存器与汇编指令 第二章  C语言 第三章  硬编码 第四章  C++与MFC 第五章  Win32 A ...

  4. Android逆向基础笔记—初识逆向

    (本笔记来源于吾爱以及吾爱坛友,加上本人自己的整理) 一.初识 APK.Dalvik字节码以及Smali 1. apk是什么? apk实质上是一个zip压缩包,将apk后缀修改为zip,解压之后可以看 ...

  5. 滴水三期:day44.2-虚函数表

    一.直接调用.间接调用 面向对象的三大特性:封装.继承.多态 多态是最重要的,如果把虚函数掌握好了,多态就容易理解了 看反汇编的硬编码:E8 ...:直接调用:FF15 ...:间接调用 注入shel ...

  6. 滴水三期:day16.2-结构体数组赋值

    一.用下标手动给字符数组赋值 先给字符数组赋值,并且手动添加结束标志0x0或者'\0'都表示一字节十六进制数0x0:最后使用%s打印 #include "stdafx.h" str ...

  7. 滴水三期:day04.3-标志寄存器

    一.标志寄存器总览 EFLAGS寄存器,主要用于反映处理器的状态和ALU运算结果的某些特征及控制指令的执行.通俗来说:标志寄存器与CPU中的其他寄存器不一样:它是按位起作用的,也就是说,它的每一位都有 ...

  8. 人工智障工程师养成日记Day01初识Python

    Hey,what's up! Day01:初识Python 一.检查电脑Python版本  win+R 弹出对话框-->输入cmd,点击运行.输入python,如图:(对于未安装的同学,可参考: ...

  9. 二进制逆向工程师_怎么样成为一名逆向工程师?

    首先应该判断目标,是为了打CTF比赛还是为了软件逆向,逆向又有不同平台的区别,比如需求是手机端还是电脑端.每一种类都有不同的学习要求,然后为了你的目标作出规划. 比如我是暂时为了CTF比赛主打PC端, ...

最新文章

  1. 投了3遍都被毙的论文,终于中了
  2. iOS培训教程——创建第一级控制器
  3. Inversion of Control Containers and the Dependency Injection pattern--Martin Fowler
  4. 06- 本地方法接口
  5. 动手学深度学习(PyTorch实现)(六)--卷积神经网络基础
  6. java操作sql数据库_java-JDBC连接数据库并进行SQL操作
  7. ylbtech-Bill(发票管理)-数据库设计
  8. c3p0 服务启动获取连接超时_一次c3p0连接池连接异常错误的排查
  9. 一个小兔子的大数据见解1
  10. Oracle nlssort()中文排序
  11. 如何使用promise.all
  12. dpbs和pbs的区别_PBS与TBS区别
  13. ipa java_Java 解析 IPA 文件,读取 Info.plist 信息
  14. 启动电容与运行电容-电容-嵌入式开发-物联网开发
  15. 软件众包网站有哪些?
  16. A load persistent id instruction was encountered, but no persistent_load function was specified.
  17. css制作聊天气泡android,css实现聊天气泡效果
  18. Unity改变应用游戏的分辨率 resoution
  19. 2023年全国最新会计专业技术资格精选真题及答案36
  20. 【一笔画问题 42 搜索 】

热门文章

  1. 用python解释exif数据的GPS信息
  2. 2017.07.29(4) 夜里十点半(选择结构)
  3. Docker ~ 从入门到实践
  4. gcc自带sanitizer工具使用
  5. 关于STM32应用触摸屏校准原理的总结
  6. 双因素认证的解决方案
  7. java中单精度_java单精度和双精度的区别
  8. window+cmd+.cpp(window系统命令行运行.cpp文件) + LINK : fatal error LNK1104: cannot open file ‘LIBCMT.lib‘
  9. [附源码]Java计算机毕业设计SSM花田音乐网站
  10. Axure中继器的总结