【CTF】逆向基础知识1

虽然逆向涉及的知识比较多,但是如果把应用限定在CTF题目之类的话,我们这里对经常用到的一些基础知识做一个总结。

思路来源:Blue-lotus&信协集训&c++安全编码&0day安全&Google

  • stack frame 的基本概念

ebp 的作用是?

ebp和esp是栈的顶端、底端的标志

ebp 和 esp 是怎么相互配合的?

相互配合是指在函数调用时,ebp入栈,被赋新值,然后esp抬高,从而在函数调用时开辟新的栈帧并保持栈帧平衡。

calling convention 是什么?x86 和 x64 的参数传递顺序是什么?

calling convention(函数调用约定)就是函数调用入栈顺序、复原等调用细节的约定,大概常用的有__cdecl __fastcall __stdcall等,具体细节可以百度之(或者追溯到半年前的软件安全课)

x86的参数传递顺序应该是从右向左入栈(不同的调用会有不同),x64架构统一了调用规则,调用的前四个参数总是放在寄存器中传递,剩余的参数则压入堆栈。(这4个用于存放参数的寄存器分别是:存放整数参数的RCX,RDX,R8,R9;存放浮点数参数的XMM0,XMM1,XMM2,XMM3。具体参数类型不同时,使用寄存器的规则见http://yukei.blog.163.com/blog/static/1125877032009113
134353876/)

  • shellcode 是什么?

shellcode从字面上理解是执行shell的代码,在实际中,利用漏洞的代码相当于子弹头,shellcode则相当于弹药。当然,现在总是把他们放在一起叫shellcode。如果要拿shell的话,shellcode要准备两段(我才不会告诉你们用Metasploit去做)

buffer overflow 的原理?

  • 覆盖了什么造成程序崩溃?

返回地址,破坏堆栈平衡

  • stack cookie 是什么?

以前没有听过这种说法,它指的应该是函数执行完毕之后没有清空的栈帧,虽然不能通过ebp来读取其中内容,但是仍然存在泄露的可能。

  • 利用 buffer overflow 直接执行 shellcode 的条件是什么?

入口地址的确定。

时间: 2025-01-01 21:21:20

【CTF】逆向基础知识1的相关文章

02-从零开始用IDA做逆向-进制的基础知识、搜索功能的使用

02-从零开始用IDA做逆向 0x01.进制的概念 计算机中的进制概念是初学者必须知道的基础知识,学习逆向或者构造漏洞利用的时候会接触到这层面知识.二进制,十进制和十六进制的基本概念如下: BINARY(二进制数):由两个数字0和1组成. DECIMAL(十进制数):数字由10位数字(从0到9)组成 HEXADECIMAL(十六进制数字):所有数字都用0到F(从0到9,再加上A,B,C,D,E和F )的字符组成,总共有16个字符.其中:A = 10,B = 11,C = 12,D = 13,E

PHP基础入门(四)---PHP数组实用基础知识

PHP数组 数组是特殊的变量,它可以同时保存一个以上的值. ***关键词:数组基础.数组遍历.超全局数组.数组功能.数组函数. 下面来和大家分享一下有关PHP的数组基础知识,希望对你PHP的学习有所帮助~ 一.PHP数组基础部分 一PHP数组的分类 按照下标的不同,PHP数组分为关联数组和索引数组:索引数组:下标从0开始,依次增长关联数组:下标为字符串格式,每个下标字符串与数组的值一一关联对应(类似对象的键值对) 代码演示: 1 $arr1 = array(1,2,3,4,5,6,7);//索引

linux基础知识---用户

用户和组 一.用户和组的概念 随着计算机对多用户需求越来越多,才引入了用户和组的概念.所谓的用户就是操作系统用来标识登陆系统的.就是用户和组是实现计算机资源分配的核心要素.组:是具有相同计算机资源(主要指权限)用户的一个集合. 在计算机内核中,用户和组都是一个数字,我们称之为UID和GID.UID和GID在系统中具有唯一性.实现这个过程进行名称解析才能完成,在Linux系统中使用glib库中的系统调用来完成. 二.用户识别 识别用户通过3A(Authentication,Authorizatio

JavaSe基础知识总结

Java基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用.demo 4,该技术什么时候用?test. -------------------------------------------------------------------------

PHP数组基础知识总结以及排序

最近刚刚实习,经常用到php的数组,所以总结一下,以后不用随时去乱搜. 一:基础知识 PHP支持数字索引数组和关联数组,关联数组允许使用更有意义的数据(如字符串)作为索引.以及允许间隔性地使用数组和字符串作为数组的索引. 1.数组定义: $arr = [1,2,3,4];//数字索引数组 php5.4以上提供的新方式 $arr = ['a'=>1,'b'=>2];//关联索引数组 $arr = array(1,2,3,4); $arr = array('a'=>1,'b'=>2);

php基础知识(5)正则表达式

一.匹配次数 (1) *     匹配前面的子表达式零次或多次 (2) +     匹配前面的子表达式一次或多次,+ 等价于 {1,} (3) ?     匹配前面的子表达式零次或一次,? 等价于 {0,1} (4){n}    n 是一个非负整数,匹配确定的n 次 (5){n,}   n 是一个非负整数,至少匹配n 次 (6){n,m}  m 和 n 均为非负整数,最少匹配 n 次且最多匹配 m 次.在逗号和两个数之间不能有空格 二.匹配值 (1) x|y    匹配 x 或 y (2)[xy

加解密入门基础知识

很多人都想学习解密,这东西刚入门时会让人沉迷进去,可以饭不吃.觉不睡.出现这种现像,也许是解密满足了人们的猎奇心里吧.但掌握这方面技术,对自身的 提高确实有好处.可以通过跟踪软件,提高自己的调试技能,并且能了解他人程序思路,使自己写出更好的程序.研究解密技术有助于掌握一些系统底层知识,系统 底层知识绝对是构造起大型软件的坚实基础.许多程序发展,都经历了这一锻炼过程的. 而大多数人可能认为解密是一门高深的学问.造成这种原因是以前这方面 的技术资料缺乏,从而将“解密”这一技能“神”化了.初学者一般不

转帖--计算机网络基础知识大总汇 https://www.jianshu.com/p/674fb7ec1e2c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

计算机网络基础知识大总汇 龙猫小爷 关注 2016.09.14 23:01* 字数 12761 阅读 30639评论 35喜欢 720 一.什么是TCP/IP 网络和协议 1.     TCP/IP是一类协议系统,它是一套支持网络通信的协议集合.网络是计算机或类似计算机的设备之间通过常用的传输介质进行通信的集合. 2.     网络协议就是一套通用规则,用来帮助定义复杂数据传输的过程.数据传输从一台计算机上的应用程序开始,通过计算机网络硬件,经过传输介质到正确目的地,然后上传到目的地计算机网络硬

毕向东—Java基础知识总结(超级经典)

Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用.demo 4,该技术什么时候用?test. ------------------------------------------------------ 一:java概述: 19