
逆向&pwn基础
文章平均质量分 79
根据re和pwn的汇编及C语言基础
Akura@lan
咸鱼………
展开
-
C++逆向总结
C在定义一个结构体的时候,就是定义一个新的数据类型而C++在定义一个结构体,会有一个this指针,指向本结构体的地址,传的this指针的值一般给到了ecx。主要应用如下typedef struct{ int x = 1; int y = 2; void function(int x, int y) { this->x = x; this->y = y; }}str;int main(){ str p;原创 2021-12-03 21:23:36 · 2811 阅读 · 0 评论 -
heap attack总结
文章目录一、off-by-one字符串操作if循环造成函数多读入了一个/x00二、overlap与chunk的扩展1.对fastbin进行扩展2.对smallbin进行扩展总结一、off-by-one字符串操作if循环造成读入的字符长度错误,覆盖到了下一个chunk函数多读入了一个/x00二、overlap与chunk的扩展1.对fastbin进行扩展对已经分配的chunk来说如果更改了size位,free的时候按照这个被修改的size进行修改,也就是overlapping chunk2.原创 2021-05-10 22:43:41 · 601 阅读 · 0 评论 -
堆相关数据结构学习
文章目录前言一、崩溃原因二、堆的使用三、 反汇编前言#include "stdafx.h"#include<stdlib.h>int main(int argc, char* argv[]){ int arr[1000*1000]; return 0;}写如上代码,定义一个arr[1000*1000]的数组发现编译器没有报错,但是程序直接崩溃,包括写递归,不停止,也会崩溃一、崩溃原因栈内存的空间不够,一直申请栈内存而不释放,就会崩溃所以栈:容量小,主要原创 2021-03-25 16:54:27 · 271 阅读 · 0 评论 -
【滴水逆向笔记】C语言指针
文章目录一、pandas是什么?二、使用步骤1.引入库2.读入数据总结一、pandas是什么?int* x; //把int*看成一种新的数据类型下面赋值的时候一定要写全x = (int*)10;可以加入多个*int*** x;x = (int***) = 10;带‘*’的类型反汇编都是4个字节带*号的可以直接加减char* x; short* y;int* z;x = (char*)100;y = (short*)100;z = (int*)100;x++;y+原创 2021-03-14 23:31:18 · 1448 阅读 · 2 评论 -
【滴水逆向笔记】switch语句反汇编
文章目录一、switch语句二、使用步骤1.引入库2.读入数据总结一、switch语句switch(){ case 表达式1: 语句; break; case 表达式2: 语句; break; case 表达式3: 语句; default: 语句; break;}switch语句是if的缩写第一点,case后面必须是常量,就是case 1;第二原创 2021-03-06 00:33:15 · 499 阅读 · 0 评论 -
【滴水逆向笔记】C语言结构体
文章目录一、总结一、有一个问题,比如在游戏里这些东西放到数组里肯定是不行的,因为数组要求数据类型是一样的但是结构体,想存多少存多少,想存多少字节存多少个struct AA{ int 生命; int 魔法; int 技能; . . . int 移动速度; char name[0x20];//十个中文}int AA char double是等级的,int用在哪AA就可以在哪,AA只是我定义新的一个东西,上述的代码也是定义原创 2021-03-03 19:32:30 · 429 阅读 · 0 评论 -
【滴水逆向笔记】C语言多维数组
文章目录一、数组二、二维数组反汇编的角度理解总结一、数组输入如下程序#include "stdafx.h"void Function(){ int x = 10; int y = 20; int z = 30; int v = 40;}int main(int argc, char* argv[]){ Function(); return 0;}查看汇编如图而如果用数组,就会方便很多,数组的本质就是存一些相同类型的变量,之前说过long和short和int在计算原创 2021-03-02 00:36:08 · 370 阅读 · 0 评论 -
【滴水逆向笔记】C语言返回值、参数、数组反汇编
系列文章目录文章目录系列文章目录一、返回值二、参数三、数组反汇编一、返回值把值返回给mov跳转到call下面一条指令,把值放到main的局部变量里eax有变化,就说明函数返回值变化如果是1字节,放到al,如果两个字节返回,放到ax,4个字节放回到eax二、参数如图传入三个char但是这里push参数的时候,是按照四个字节传递,因为esp执行这三个push时是依次减少4如图这里,3是第一个入栈,但这里虽然从内存传到al,但是push仍然传的是eax所以这里对参数定义成sh原创 2021-02-04 13:22:10 · 560 阅读 · 0 评论 -
【滴水逆向笔记】第十三章 C语言正向基础
系列文章目录文章目录系列文章目录前言一、变量的申明二、类型转换总结前言一、变量的申明告诉计算机,我要用一块内存int a,b,c //全局变量的声明void Fun(){ a = 10; //局部变量的声明 b = 20;}总结:声明就是告诉计算机,我要用一块内存,宽度和存储格式有数据类型决定计算机给一块内存,取决于变量作用范围,全局变量在编译完就已经分配了内存空间,局部变量所在程序被调用才会分配空间全局变量不定义值默认是0,但局部变量使用前一定赋初值二、类型原创 2021-02-04 01:00:02 · 611 阅读 · 0 评论 -
【滴水逆向笔记】C语言参数、变量及if逆向
文章目录一、全局变量与局部变量局部变量全局变量二、类型转换1.引入库2.读入数据三.一堆数组的使用四.分支语句五.循环语句一、全局变量与局部变量局部变量#include “stdafx.h”void Plus(){ int x =10; printf("%d",x);}void Plus2(){ printf("%d",x);}int main(int argc, char*argv[]){ plus();}这个x就是只能大括号里面可原创 2021-02-02 02:21:18 · 728 阅读 · 0 评论 -
【滴水逆向笔记】第十一章 C语言数据类型及堆栈
文章目录前言一、C是如何变成汇编的?裸函数二、使用步骤1.引入库2.读入数据总结前言C语言结构复习一下。。。返回值得类型 函数名(参数类型 参数名,参数类型 参数名){ //如果前面是void,不用return //如果有: return 11;}一、C是如何变成汇编的?裸函数void __declspec(naked) Function(){}上述结构叫做裸函数键入上行代码,F7,F5之后,直接F11,一直按F11,发现直接没了因为这个裸函数原创 2021-01-26 01:07:01 · 623 阅读 · 0 评论 -
【逆向】第十章 C语言函数格式及反汇编
文章目录前言一、HELLO WORLD新建文件下断点打开寄存器窗口内存窗口二、C语言函数格式1.无参数,无返回值2.有参数,有返回值前言基于VC6来实现C语言学习,这里能装在WIN10上是下载了VC6绿色版一、HELLO WORLD新建文件文件 新建 输入名称 win32应用 建立helloworld程序点开fileview 找到source file图中//后面是注释,而int main开始可以看成函数的入口这个时候按下F7(build建立),发现根目录下有一个hello.exe原创 2021-01-22 21:39:39 · 622 阅读 · 0 评论 -
【逆向】第九章 堆栈图
案例打开OD,点option,debuging options,选中winmain,打开找指令选中一条,鼠标左键点一下,ctrl+G,把地址输入进去,点OK然后就可以定位了,这时候不能按F8,因为CPU还没有跑到这一行用鼠标左键点一下,F2下断点,CPU还在程序打开OD那,点播放键到这个断点位画堆栈这个时候画堆栈图要关注ESP和EBP画出初始的堆栈图,如下图所示,黄色代表的是初始堆栈,而ESP和EBP之间还有很多内存地址,这里用一块来表示按下F8栈底没有变化,但是栈顶变化了,如图为原创 2021-01-19 23:16:12 · 1321 阅读 · 0 评论 -
【逆向】第八章 JCC
文章目录一、指令1.JMP指令2.call指令3.RETN指令4.CMP指令5.test指令二、JCC1.JE,JZ2.JNE,JNZ3.JS4.JNS5.JP6.JNP7.JO8.JNO9.JB JANE10.JNB11.JBE12.JA13.JL14.JNE15.JLEJNLE2.读入数据总结一、指令EIP:是指CPU下一条准备读取的指令的地址一般不可以写mov eip1.JMP指令JMP + 地址直接可以跳转到该地址指令,此时EIP的值变化,可以理解为MOV EIP,地址2.call指原创 2021-01-18 21:35:25 · 478 阅读 · 2 评论 -
【逆向】第七章 标志寄存器
案列:crackme1.打开OD,为什么一进来停到某个位置?,PE结构的知识可以解决2.登录系统,弹窗后输入错误判断完了吗?判断完了,在弹窗的时候让程序停下来顺着这条线往上找,这是下断点的知识3.小窗口是什么?messagebox,也就是说找到messagebox时就下断点,输入bp message4.再次运行程序,堆栈图画过堆栈图,画个堆栈,栈顶存储的是函数调用时的返回地址...原创 2021-01-16 22:52:52 · 852 阅读 · 0 评论 -
【逆向】第六章 栈堆
文章目录堆栈的性质模拟堆栈压入数据读数据删除数据栈堆指令写入指令读出数值弹出数据堆栈的性质假如有以下需求1.主要存储一些数据,如果数量少就放入寄存器2.能够记录有多少个数据3.能够非常快速找到数据如图windows利用这种结构存储的时候,会往小地址方向移动对于2需求,只需要用base减去top即可用base加上一个便宜就是地址,如图,B地址就是base - 5,也可以表示成top+1可以存很多数据,我们也知道存了多少的数据,也方便读写数据掌握两种读数据方法,可能有的RE会从to原创 2021-01-14 00:43:38 · 252 阅读 · 0 评论 -
【逆向】第五章 内存地址
文章目录前言一、内存地址及数据存数据二、公式1.寻址公式2.读入数据总结一、pandas是什么?# 系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结二、使用步骤1.引入库2.读入数据总结前言在命令行输入db 0x19FF98得到发现数据不一样,顺序不一样,高位在后,低位在前在反汇编窗口,和寄存器窗口是高到低,还有右下角堆栈窗口也是从高到低,就是我们平时写的顺序在数据窗口,是从低到高,但是注意,内存最小单位是字节,是字节相反 上图数据窗口倒过来就不是00 A3 0D原创 2021-01-13 22:29:03 · 317 阅读 · 0 评论 -
【逆向】第四章 内存
文章目录前言一、计算机内存二、内存的读写1.内存写入2.读入数据2.读内存总结前言寄存器与内存的区别1.寄存器位于CPU内部,执行速度快2.内存速度相对慢,但是成本低,所以可以做得很大3.寄存器和内存没有本质区别,都是存储数据的容器,都是定宽的4.寄存器常用的八个:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI5.计算机中的几个常用计量单位:BYTE,WORD,DWORD6.内存数量特别庞大,无法每一个内存单元都起一个名字,所以用编号代替,我们称计算机CPU是32位或者6原创 2021-01-13 12:15:50 · 261 阅读 · 0 评论 -
【逆向】第三章 寄存器及汇编基础
文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言“把字母和编号记住,主要用途可以不计,杯子推荐用来装水并不意味着不能装酒”一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as s原创 2021-01-12 12:24:04 · 1114 阅读 · 0 评论 -
【滴水逆向笔记】第二章 数据宽度与逻辑运算
目录前言一、数据宽度1.设计算机只能存储4位2进制数2.设计算机只能存储8位2进制数3.设计算机只能存储16位2进制数4.设计算机只能存储16位2进制数二、逻辑运算本质1.或运算2.与运算3.异或运算4.非运算三、逻辑运算应用1.如何利用CPU进行2+3的运算?2.获取某个值的第N位3.加密算法前言需要进制转换的基础Byte 字节 8bitWord 字 16Bit 2字节DWord 双字 32Bit 4字节一、数据宽度计算机中由于受到硬件条件的制约,数据长度有限制,超过最多宽度的数据会原创 2021-01-10 17:49:29 · 605 阅读 · 0 评论 -
【滴水逆向笔记】第一章 进制
目录前言一、进制的定义前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结二、使用步骤1.引入库2.读入数据总结前言第一个初级专题就是进制一、进制的定义n进制就是由n个符号随意组成,逢n进一16进制转二进制把一个十六进制的个位等转成四个数字表示的二进制数# 系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、原创 2021-01-10 11:17:07 · 551 阅读 · 0 评论 -
【滴水逆向笔记】总览一
目录逆向学习笔记概述进制数据表示PE文件结构逆向学习笔记概述根据滴水逆向海哥的视频进行大致总结的一个笔记进制二进制:计算机中通常以二进制进行表示(高低电平)十六进制:二进制过于麻烦,以十六进制进行表示数据表示如图,虽然是16进制,但是实际上在计算机中还是以2进制来表示为什么是以两个十六进制数为一组?这涉及到存储单元的问题8 bit = 1 Byte2 Byte = 1 Word2 Word = 1 DWord一个二进制数是1bit。也就是说,两个十六进制数即为1Byte。 因此原创 2021-01-09 22:43:22 · 2165 阅读 · 0 评论