首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

矛与盾 | 二进制漏洞攻防思想对抗

备注:这里我们顺带就能理解为什么说局部变量的生存周期随着函数调用结束而结束。 函数调用过程中栈的空间分布如下: ?...这一技术可以在编译器选项的设置为启用GS选项,而保存的这个数据称之为“Security Cookie”。IDA可以清楚的看到启用GS选项之后的反汇编代码,函数开始执行时: ?...攻方B:…… 攻方大神:这个有点麻烦啊,容我三思! …… 守方:我得意的笑。 很长一段时间后…… 攻方A:既然堆栈都不能执行了,我们就从程序自身的代码去拼凑shellcode。...依我看,ROP技术的前提是代码片段的地址固定,这样才能知道往函数返回值或者SEH链中填写哪个地址。这次再放一个大招,地址空间布局随机化(ASLR),我就不信了。...守方:无力吐槽了,不怕神一样的对手,就怕猪一样的队友,Adobe,你看着办! Adobe:我补,我再补,我继续补,我接着补,我…… 攻方:整形溢出、类型混淆、双重释放、UAF,万箭齐发!

1.5K61

Rust编译过程讲解与环境准备

-emit-llvm hello.c -S -o hello.ll # 导出文本类型的LLVM IR第二部:编译将预处理完的文件进行一些列的词法分析、语法分析、语义分析和优化后生成的汇编指令代码。...\n"第三步:汇编把汇编代码转变成机器可以执行的指令,过程相对编译阶段简单,没有复杂的语法,也不需要优化,只需要对照汇编指令和机器指令对照表一一翻译即可。...Rust使用了它们提供的**连接器**,其实还有第三种选择就是LLVM,我认为Rust最终会在各个平台使用LLVM的**连接器**来取代目前的GNU和MSVC的地位,因为rust编译器在汇编阶段使用的就是...LLVM,为了统一起来极有可能会采用LLVM的连接器,但目前这项工作还没有完成。...参考和拓展* 《程序员的自我修养》2.1小节* rust语言自举,为什么还需要GNU 和 MSVC?* 为什么go仅仅160M的安装包就可以编译程序?

65210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++反汇编第六讲,认识C++中的Try catch语法,以及在反汇编中还原

    C++反汇编第六讲,认识C++中的Try catch语法,以及在反汇编中还原 我们以前讲SEH异常处理的时候已经说过了,C++中的Try catch语法只不过是对SEH做了一个封装....第一种,不用懂任何原理,(反汇编要懂,最起码的汇编代码知道是什么,不然这个专题讲了你也看不懂) 先看下高级代码: int main(int argc, char* argv[]) { try...此时则找到了我们的cath处理块了. ? 二丶理解原理进行实战. 上面说的,不懂原理你也可以做.比如以后工作了,原理不懂,起码做代码还原的时候还可以混口饭吃 ^_^ 下面讲解原理....这两种是完全不一样的,如果我们还原就看上版本的表.如果我们要找那个catch捕获异常,则看下部分的表,(下面讲解.) 实战演练....实战演练的时候,我们就要知道函数信息表在哪,其实我们已经找到了,只不过大家不知道,按照小白思路为什么一路跟就可以找到catch块表.只是我们没讲. 1.找到注册异常回调的地方,进入回调函数内部. 2.看到反汇编

    2.2K100

    Sebug 大牛支招之我是如何在Sebug中杀入前10的?

    ) 0x2 Sebug是知道创宇的一个项目,通过提交漏洞分析和poc来获得积分,我在sebug中目前排名11(之前一直在前10,去海南玩了两个多星期掉下来了),这里几乎所有的大牛所做的工作都是web代码审计和编写...,那么就可能被远程执行代码,弹个shell啊,开个端口阿,添加个用户阿,无所不能。...其实这就好比一句英文,每个单词拆开了我都明白是怎么翻译,连起来我就不知道了,其实整个汇编代码是个整体,我写一个c程序,printf(" "),其实就是一个push 和call printf的过程,了解了漏洞触发的关键位置之后我们就需要把这个位置的汇编代码还原成...c语言就行了,功力深厚的小伙伴,可以直接通过阅读汇编代码知道这一段汇编代码代表的是什么意思,而功力尚浅的小伙伴,可以通过ida的f5插件来将这段代码还原成类似于c的伪代码,而最牛逼得是,这段代码放到编译器里面还能编译...seh异常处理,这时超长串会覆盖seh指针,导致seh无法正常处理而被我劫持,在调试这个漏洞时,我碰到了上述的问题,我的解决方法是如果我这边发送了,那么那边一定会调用recv函数来接收,那么我就在recv

    1.2K81

    Delphi异常机制与SEH

    注意:后面的代码都是以EXE程序来讨论的,DLL的原理是一样的 VCL的顶层异常捕获是在程序入口函数StartExe处做的: procedure _StartExe(InitTable...2 、消息处理时候的异常处理 大家可能有疑问了,那不是意味着程序里没有TRY EXCEPT END的话,出现异常就会直接退出?那么我在button的事件里抛出一个错误为什么没有退出呢?...try except end 的实现: PASSCAL代码(使用3个Sleep主要是用了观看汇编代码时比较方便隔开编译器生成的代码): try Sleep(1);...,其中的很大一个作用就是把异常翻译成DELPHI的EXCEPTION对象交给开发者处理,这就是为什么你只是声明了个E:Exception没有构造就直接可以使用,而且也不用释放,其实是VCL帮你做了创建和释放工作...从代码可以看出,简单的try except end和try finally end背后,编译器可是做了大量的工作,这也是SEH结构化异常处理的优点,复杂的东西编译器都给你弄好了,开发者面对的东西相对简单

    1.2K10

    异常处理第一讲(SEH),筛选器异常,以及__asm的扩展,寄存器注入简介

    异常处理第一讲(SEH),筛选器异常,以及__asm的扩展 一丶__Asm的扩展知识 ①丶使用关键字,解决局部变量申请问题 昨天已经介绍了__asm的基本用法,现在对其做个扩展(上一篇是32为汇编第七讲...我们看到了,我们就定义了两个局部变量,为什么是申请了48个字节,原因是我这里是Debug版本,默认编译器会帮我们申请40h(也就是64个字节)的局部空间,那么加上我们的两个局部变量正好48H个字节 如果是发布版...(Release)那么则会根据你写的汇编代码的不同,申请不同的空间,为什么这样说....40H个字节了 注意,在裸函数中你定义的局部变量是不能初始化的 也就是说你可以写成我上面的那样子,但是不能初始化值,因为这个时候还没有抬栈,比如抬栈之后初始化, 而初始化就可能在__asm里面去写 当然更多的扩展的...注意,使用这个指令我们可以把OUT指令的二进制定义出来,还有操作码,那么汇编就是对应的OUT指令了 我们都知道,我们32位汇编下都是保护模式了,也就是说,IN OUT不管用了,(不代表不能用)我们一样可以用

    1.7K100

    arm-gcc各版本区别

    我这个心情本来还行,就是现在不是个滋味...事情是这样的.我今天早上和往常一样打开一本书在看.书很不错 ? 就是这本,讲的可以说是非常好了.我推荐 ?...同样的可能这个可执行文件在ARM下面可能是关机。不同系统的机器码含义是不一样的。所以你在linux系统下面写的代码要怎样才能在ARM系统上面跑呢。这就需要用到交叉编译。...主要我是像给树莓派写系统,所以我得有arm-gcc啊,一查.懵逼了 ?...嵌入式应用二进制接口指定了文件格式、数据类型、使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用 EABI 作为与兼容的生成的汇编语言的接口。...产生了这个 4.对编译后的文件hello.s进行汇编(第二步输出的汇编代码hello.s翻译成符合一定格式的机器代码) 使用命令:gcc -c -o hello.o hello.s ?

    3.4K20

    VC 在调用main函数之前的操作

    我觉得主要是VC6更能体现程序的原始行为,想一些更高版本的VS 它可能会做一些优化与检查,从而造成反汇编生成的代码过于复杂不利于学习,当逆向的功力更深之后肯定得去分析新版本VS 生成的代码,至于现在,我的水平不够只能看看...在VC6 的反汇编窗口中好像不太好找到mainCRTStartup函数的代码,因此在这里改用IDA pro来打开生成的exe,在IDA的 export窗口中双击 mainCRTStartup 函数,代码就会跳转到函数对应的位置...,为什么它这里的4行代码就可以设置线程的异常处理函数呢?...这得从SEH的结构说起。 每个线程都有自己的SEH链,当发生异常的时候会调用链中存储的处理函数,然后根据处理函数的返回来确定是继续运行原先的代码,还是停止程序还是继续将异常传递下去。...只是我们代码中不使用这些变量罢了。 到此,这篇博文简单的介绍了下在调用main函数之前执行的相关操作,这些汇编代码其实很容易理解,只是在注册异常的代码有点难懂。

    2.1K20

    写给自学者的入门指南

    决定上手写点高级的的东西一试身手,合上书。咦,为什么会报错?哦,原来少个分号。不禁陷入思考:为什么学了两个月还是只能在这个黑窗口算算秋水仙数?...网友还说要看官网文档、要读源码、要看英文原版,我一样都不能做到,我一定是能力不够,编程果然是天才做的事情…… 正经话 上面的故事是我编的,但其中的纠结却是自学者或多或少都经历过的。...这里我罗列了一些计算机专业的学生一般需要学习的课程,当然每个学校专业设计都不一样,甚至采用的教材名字也不一样,仅供参考。...,这看起来像赤手空拳。...在敏捷开发这种工程思想中我们正是这样做的,我们需要把业务需求进行拆分然后评估工作量,不仅可以直观的看到任务进展,手上的工作也不会看起来庞大得难以完成。

    98070

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

    engineering),又称反向工程,是一种技术过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品 逆向工程源于商业及军事领域中的硬件分析...例如在集成电路领域,如果怀疑某公司侵犯知识产权,可以用逆向工程技术来寻找证据 为什么要逆向呢?...我这里贴一段小小的汇编代码 如果你能不看下面的我的解释 明白这段代码的大概要做的操作 那么恭喜你,你已经熟练掌握基础的汇编指令了 mov ecx, dword ptr [eax+8Ch] add eax...上面刚刚那段汇编代码,这样看肯定很难看是不,我们可以把他转换成C语言 这样就好分析多了 尤其是在代码量极大的时候 把汇编转换成等价的C语言代码,是会节省我们很多的分析时间的(不要跟我说有插件) 如果你能独立完成汇编到...C语言代码的转换,那么说明第二点你也是合格的了~ 比如刚刚那段代码,我们转换一下看看(我喜欢用Linux的C风格) 这里我就不定义各个变量了 # include int main

    86520

    Cobalt Strike折腾踩坑填坑记录

    直到现在有需求了才开始研究,过程中体会也是蛮深,技术这东西真的不能只停留在知道和了解这个层面,就像学一门语言一样需要多动手去实践才能熟练运用的。...0x01基础原理 基础使用和原理网上有大把的文章和教程,我这里只阐述我个人理解的几个基本点,先说stage和stager,在传统的远程控制类软件我们都是直接生成一个完整功能的客户端(其中包含了各种远控所需功能代码...这部分我也是在研究dns上线时候才算分清楚,这里需要感谢B0y1n4o4师傅的帮助 0x02 关于破戒 目前网上公布版本大多为官方试用版破戒而来且最高版为3.14(5月4号)版,我托朋找了一份3.14官方原版的来...profile没有配置制定stager的行为,所以无法正常回源到teamserver下载,这里只需要在profile文件中配置http-stager模块,像http-get一样指定好Host即可从CDN...Proxy 反向代理原理这里借用垃圾桶师傅的图,我就不具体再阐述,垃圾桶师傅已经讲得很明白。 ?

    1.5K20

    【详解】使用Metasploit实现基于SEH的缓冲区溢出攻击

    使用Metasploit实现基于SEH的缓冲区溢出攻击引言缓冲区溢出是一种常见的安全漏洞,攻击者可以通过这种漏洞执行任意代码。...确定漏洞点使用调试器(如Immunity Debugger或OllyDbg)对目标应用程序进行逆向工程,找到可能的缓冲区溢出点。...SEH溢出基本原理SEH溢出是一种利用程序中异常处理机制的漏洞来执行恶意代码的技术。Windows操作系统中的异常处理机制允许程序在遇到错误时恢复执行。...如果你需要进一步的帮助,比如如何设置测试环境或者如何编写安全测试计划,请告诉我,我很乐意提供帮助。...模块,将生成的payload发送给目标应用,触发缓冲区溢出,覆盖SEH记录,最终执行恶意代码。

    7800

    2017年前端工程师应该学习什么

    我并不是说不该这样做,而是我认为我们应该适当的慢一点,把注意力也放在一些不会改变世界那么大的事情上。这不仅会提高我们的工作效率、提升我们传递的价值,而且也会使我们学习那些新工具、新方法更快。...这篇文章结合了我的的经验和我的新年祝福,也非常希望能够得到读者的建议和反馈。 学习如何写可读性强的代码 我们大部分的工作并不在于写新的代码,而是在于维护已经存在的代码。...我们并不是在隔离的环境下工作,通常要和其他开发者、设计师、项目经理沟通,甚至有时候还需要和用户沟通,这显得非常困难。但是如果你想要知道你在做什么事情以及为什么做这件事情,沟通是非常重要的。...这也意味着,作为前端工程师也是时候学习这些经过了几十年发展演变的非前端知识了。同时,这也是我希望从你们那里得到一些建议的地方,你们觉得前端工程师,从以往的计算机科学中应该学习哪些知识呢?...这里列出我自己的一些建议资源: Coursera 上的 像一个计算机科学家一样思考问题。 DHH的 五本对我影响最大的编程书。

    81260

    【C++100问】CC++程序执行过程详解之预处理、编译、汇编、链接和执行,以及g++_gcc的安装使用

    学习路线 【资源】一个C/C++开发工程师的学习路线(已经无路可退,唯有逆风飞翔)【内附资源页】 【GitHub】Cpp-Prime5 + Cpp-Primer-Plus6 源代码和课后题 《C++ Primer...1、正文 C/C++的编译链接过程是怎么样的? 如果要把我们编写的一个程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行预处理、编译、汇编和链接。...g++ -o test.o -c test.s 将汇编输出文件 test.s 编译成 test.o 文件 4、✏ 链接 链接器:比如说 test.o 里调用了标准库里函数 printf ,连接器的工作就是找到...",往下滑,找到最新版的 "x86_64-posix-seh"。...右键【我的电脑】,点击【属性】,然后【高级系统设置】,然后【环境变量】,然后【编辑】用户环境变量,然后【编辑】,然后一顿【确认】。

    1.3K30

    红队免杀必会:R3下常用HOOK技术

    函数并运行程序后,程序会隐式地将API函数所在的DLL文件加载入内存中,这样,程序就会像调用自己的函数一样调用API。...拖到Xdbg中,定位到CreateProceessA这里,在调用CreateProcessA前有一段汇编代码: mov edi edi, push ebp mov ebp,esp 16进制:8B FF...同样是Hook地址,它不能像IAT Hook那样直接定义一个函数来替换目标函数,而必须把它定义为类的成员函数。我们知道面向对象的三要素:封装、继承、多态 。...,比如CreateProcess,当然或许是我代码写错了:) VEH异常(基于软件断点) Hook 简单介绍一下windows的异常机制: Intel在386开始的IA-32家族处理器中引入了异常和中断...而SEH的注册和使用依赖于函数调用的栈帧,在调用SEH回调函数时会涉及栈展开的问题,SEH由两次被调用的机会。

    2.3K10

    人工智能VS黑客,谁更厉害?

    如果要理解为什么会这样,首先,你必须要明白一名“优秀的黑客”是如何炼成的。 Jon Erickson在美国北加州工作,是一名密码破译专家和安全专家。...他认为,如果想要成为一名成功的黑客必须要拥有五个基本技能,分别是:编程能力、汇编语言能力、调试程序或排除程序故障的能力、反向工程能力、以及研究能力。...编程:编程说白了就是写代码,以便制定可执行的计算机程序。 汇编语言:汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。...反向工程:“基本上,反向工程可以搞清楚某个程序究竟做了什么,你只需看下机器指令,或是看下程序反复发送什么数据,”Erickson继续说道,“有时,只要看看路由器固件镜像或是封闭原始码软件,就足以让黑客找到后门或是代码中的漏洞...“但是,在我所认识的黑客圈子里,那些最出色的黑客其实都有一个强烈的信念,那就是他们绝对相信任何事情都是可能的。”

    1.2K30

    50 年前的登月程序和程序员有多硬核

    早在几年前,在Github上放出了当成Apollo飞船使用的源代码(当然是汇编的),但完全不明白为什么这几天会有一些中国的小朋友到这个github的issue里用灌水…… 人类历史上这么伟大的一件事,为什么不借这个机会学习一下呢...代码写好,两天后就直接上生产,然后就登月,还是导航代码,这代码写的的健壮性得有多强。 如果你仔细比较一下这两个目录中的文件,你会发现有些文件是一样的,不但文件名一样,而且内容也一样。...比如:21分51秒开始讲存储用的 Rope Memory 绕线内存,Hamilton 也出来讲了一下在这种内存上编程,画面切到一个人用个比较长的金属针在一个像主板一样的东西上,左右穿梭,就像刺绣一样,但是绣的不是图案...Hamilton 原话说—— 如果当时的程序不能识别错误并从错误中恢复,我怀疑阿波罗不能成功登月。...Hamilton 的牛逼之外还在于,她是第一个将“软件工程”提出来的人,在MIT,她想让软件开发就像其它工程一样,有相应的工程纪律,给于相关的尊重,于是她创造了Software Engineering这个词

    54620

    50年前的登月程序和程序员有多硬核

    早在几年前,在Github上放出了当成Apollo飞船使用的源代码(当然是汇编的),但完全不明白为什么这几天会有一些中国的小朋友到这个github的issue里用灌水……,人类历史上这么伟大的一件事,为什么不借这个机会学习一下呢...代码写好,两天后就直接上生产,然后就登月,还是导航代码,这代码写的的健壮性得有多强。 如果你仔细比较一下这两个目录中的文件,你会发现有些文件是一样的,不但文件名一样,而且内容也一样。...比如:21分51秒开始讲存储用的 Rope Memory 绕线内存,Hamilton 也出来讲了一下在这种内存上编程,画面切到一个人用个比较长的金属针在一个像主板一样的东西上,左右穿梭,就像刺绣一样,但是绣的不是图案...Hamilton 原话说—— 如果当时的程序不能识别错误并从错误中恢复,我怀疑阿波罗不能成功登月。...Hamilton 的牛逼之外还在于,她是第一个将“软件工程”提出来的人,在MIT,她想让软件开发就像其它工程一样,有相应的工程纪律,给于相关的尊重,于是她创造了Software Engineering这个词

    83320

    SEH学习

    因为最近分析的一个壳用到了SEH相关的代码,所以要学习一下 内容转述自《软件加密技术内幕》 一些问题和回答 异常是谁提出的 Intel 提出了中断和异常的概念,中断跟外部硬件设备有关,而异常跟内部事件有关...fun())这样的形式来侦错的话,代码不好维护。 而异常处理机制的使侦错代码和实际代码分离的作用很好的改善了这种情况,当然还有 其他原因吧,不一一列举 哪里用到了异常处理机制?...C++的语法支持异常处理,Windows也支持异常处理,尽管两个不是一样的东西,但是作用 甚至使用的接口名称都非常相似 异常处理工作流程 1 判断异常是何种类型,是否应该发给程序,如果应该发送则将结构_...你可以在OD菜单中的查看-SEH链中找对最前的一个SEH handler地址在反汇编中查看 你也可以在其第一句代码处下断点,然后SHIFT+F9运行程序,程序会断在SEH handler第一句处 线程...SEH 注册线程SEH的方法(汇编),进OD调试下就知道为什么了 assume fs:nothing push SehHandler push [fs:0]mov [fs:0],esp 线程SEH使用例子

    60820

    Linux内核学习(二)之head.S文件分析前期准备

    大家好,今天我们来分享linux内核的工程建立以及一些我在工作当中使用source insight 经常会用的一些快捷操作;然后会分享一些有用的汇编指令,主要是经常会遇到的汇编指令,汇编指令没必要去专门学...一、使用Sourc Insight 来建立一个linux工程: 1、为什么要使用SourceInsight: 对于一个真正的一个项目,往往有几十几百甚至上万个c文件、h文件,代码量非常大,代码之间关联非常复杂...而且在公司里面几乎都会使用 Source Insight 这个工具来管理大工程,主要原因是方便,即使这个工具不能去编译代码(怎样去编译这个代码,方法有很多,这里我就不讲了,后面实战遇到再和大家说,每个人用的方法不一样...在菜单栏Project->Syneronize Files,选中上面2个,然后确定,整个linux工程就建立好了: 3、常用快捷操作: 这里的话我讲一下在工作当中经常使用的快捷操作: a、在修改代码完之后...关于Source Insight的护眼模式可以上网查一下,很详细,今天我主要讲了一下我工作当中用到的一些快捷方式,希望对你使用Source Insight有用。

    90230
    领券