滴水三期:day01.1-初识逆向
一、进制与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语言
- 从一堆看不懂的二进制数,转换成可以看懂的汇编语言,再还原成高级代码
五、初级阶段需要完成的项目
反汇编引擎(任何逆向分析工具必备模块)
PE分析器(外挂、反外挂、破解、病毒、反病毒基础)
游戏案例逆向分析或者加密壳
商业软件开发模板(登录界面,进程注入,网络验证,隐藏模块,代码加密)
滴水三期:day01.1-初识逆向相关推荐
- 滴水三期逆向基础系列(一)-读取文件到内存再读取回文件
跟着滴水三期学了很长时间了,本着,每一点都要吃透的精神,跟"读文件到内存(拉伸),再读回文件(压缩回来)"杠了一天.先看看按着老师的架构写的代码吧(老师的代码有很多问题(可能是我太 ...
- 滴水三期:day41.2-PE阶段所有代码汇总(PE文件分析器基本C代码)
一.代码汇总 1.功能如下 打印PE头字段 打印节表 将文件读入到FileBuffer,FileBuffer到ImageBuffer到newBuffer,最后存盘 RVA转FOA.FOA转RVA 向代 ...
- 【滴水三期】--公开课
课程思想:用逆向的思维学习正向,而不是用正向的思维学习逆向 滴水逆向课程体系: 第一章 进制.寄存器与汇编指令 第二章 C语言 第三章 硬编码 第四章 C++与MFC 第五章 Win32 A ...
- Android逆向基础笔记—初识逆向
(本笔记来源于吾爱以及吾爱坛友,加上本人自己的整理) 一.初识 APK.Dalvik字节码以及Smali 1. apk是什么? apk实质上是一个zip压缩包,将apk后缀修改为zip,解压之后可以看 ...
- 滴水三期:day44.2-虚函数表
一.直接调用.间接调用 面向对象的三大特性:封装.继承.多态 多态是最重要的,如果把虚函数掌握好了,多态就容易理解了 看反汇编的硬编码:E8 ...:直接调用:FF15 ...:间接调用 注入shel ...
- 滴水三期:day16.2-结构体数组赋值
一.用下标手动给字符数组赋值 先给字符数组赋值,并且手动添加结束标志0x0或者'\0'都表示一字节十六进制数0x0:最后使用%s打印 #include "stdafx.h" str ...
- 滴水三期:day04.3-标志寄存器
一.标志寄存器总览 EFLAGS寄存器,主要用于反映处理器的状态和ALU运算结果的某些特征及控制指令的执行.通俗来说:标志寄存器与CPU中的其他寄存器不一样:它是按位起作用的,也就是说,它的每一位都有 ...
- 人工智障工程师养成日记Day01初识Python
Hey,what's up! Day01:初识Python 一.检查电脑Python版本 win+R 弹出对话框-->输入cmd,点击运行.输入python,如图:(对于未安装的同学,可参考: ...
- 二进制逆向工程师_怎么样成为一名逆向工程师?
首先应该判断目标,是为了打CTF比赛还是为了软件逆向,逆向又有不同平台的区别,比如需求是手机端还是电脑端.每一种类都有不同的学习要求,然后为了你的目标作出规划. 比如我是暂时为了CTF比赛主打PC端, ...
最新文章
- 投了3遍都被毙的论文,终于中了
- iOS培训教程——创建第一级控制器
- Inversion of Control Containers and the Dependency Injection pattern--Martin Fowler
- 06- 本地方法接口
- 动手学深度学习(PyTorch实现)(六)--卷积神经网络基础
- java操作sql数据库_java-JDBC连接数据库并进行SQL操作
- ylbtech-Bill(发票管理)-数据库设计
- c3p0 服务启动获取连接超时_一次c3p0连接池连接异常错误的排查
- 一个小兔子的大数据见解1
- Oracle nlssort()中文排序
- 如何使用promise.all
- dpbs和pbs的区别_PBS与TBS区别
- ipa java_Java 解析 IPA 文件,读取 Info.plist 信息
- 启动电容与运行电容-电容-嵌入式开发-物联网开发
- 软件众包网站有哪些?
- A load persistent id instruction was encountered, but no persistent_load function was specified.
- css制作聊天气泡android,css实现聊天气泡效果
- Unity改变应用游戏的分辨率 resoution
- 2023年全国最新会计专业技术资格精选真题及答案36
- 【一笔画问题 42 搜索 】
热门文章
- 用python解释exif数据的GPS信息
- 2017.07.29(4) 夜里十点半(选择结构)
- Docker ~ 从入门到实践
- gcc自带sanitizer工具使用
- 关于STM32应用触摸屏校准原理的总结
- 双因素认证的解决方案
- java中单精度_java单精度和双精度的区别
- window+cmd+.cpp(window系统命令行运行.cpp文件) + LINK : fatal error LNK1104: cannot open file ‘LIBCMT.lib‘
- [附源码]Java计算机毕业设计SSM花田音乐网站
- Axure中继器的总结