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

反向工程SEH:为什么我的IDENTICAL汇编代码不能像原版一样工作?

SEH是Structured Exception Handling的缩写,是一种在程序中处理异常的机制。在反向工程中,SEH可能会影响程序的汇编代码。

IDENTICAL汇编代码是指与原始程序相同的汇编代码,只是以不同的语言表示。如果您的汇编代码与原始程序不同,那么您可能需要更改SEH以使其与原始程序兼容。

如果您不能确定如何更改SEH以使其与原始程序兼容,那么您可以尝试使用调试器来查看原始程序的SEH,并查看它与您的汇编代码之间的差异。您还可以使用反汇编器来查看您的汇编代码和原始程序的汇编代码之间的差异。

如果您已经确认您的汇编代码与原始程序相同,那么您可能需要检查您的调试器或反汇编器是否正确配置。此外,您可能需要检查您的汇编代码是否包含任何错误或异常,这些错误或异常可能会影响SEH的处理。

总之,反向工程SEH可能会很复杂,需要深入理解程序的结构和运行方式。如果您遇到困难,可以考虑寻求专业帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

备注:这里我们顺带就能理解为什么说局部变量生存周期随着函数调用结束而结束。 函数调用过程中栈空间分布如下: ?...这一技术可以在编译器选项设置为启用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安装包就可以编译程序?

54810
  • 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.1K100

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

    ) 0x2 Sebug是知道创宇一个项目,通过提交漏洞分析和poc来获得积分,在sebug中目前排名11(之前一直在前10,去海南玩了两个多星期掉下来了),这里几乎所有的大牛所做工作都是web代码审计和编写...,那么就可能被远程执行代码,弹个shell啊,开个端口阿,添加个用户阿,无所不能。...其实这就好比一句英文,每个单词拆开了都明白是怎么翻译,连起来就不知道了,其实整个汇编代码是个整体,写一个c程序,printf(" "),其实就是一个push 和call printf过程,了解了漏洞触发关键位置之后我们就需要把这个位置汇编代码还原成...c语言就行了,功力深厚小伙伴,可以直接通过阅读汇编代码知道这一段汇编代码代表是什么意思,而功力尚浅小伙伴,可以通过idaf5插件来将这段代码还原成类似于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);...,其中很大一个作用就是把异常翻译成DELPHIEXCEPTION对象交给开发者处理,这就是为什么你只是声明了个E:Exception没有构造就直接可以使用,而且也不用释放,其实是VCL帮你做了创建和释放工作...从代码可以看出,简单try except end和try finally end背后,编译器可是做了大量工作,这也是SEH结构化异常处理优点,复杂东西编译器都给你弄好了,开发者面对东西相对简单

    1.1K10

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

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

    1.6K100

    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

    写给自学者入门指南

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

    97070

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

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

    81620

    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.4K20

    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.1K10

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

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

    1.1K30

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

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

    54420

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

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

    82220

    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使用例子

    59620

    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有用。

    80530

    26种对付反调试方法

    目前主要有3种分析软件方法: 1.数据交换分析,研究人员使用数据包嗅探工具来分析网络数据交换。 2.对软件二进制代码进行反汇编,然后以汇编语言列出。...本文针对是Windows操作系统中常用防破0解及防逆向工程保护技术,即反调试方法,各种防逆向工程技术主要目标是尽可能多使逆变工具尽可能失效。 本文对付反调试方法,总共涉及26种: 1....= __readgsqword(0x60); *((PBYTE)(dwpeb + 2)) = 0; TLS回调 其实,在主函数中检查调试器存在不是最好方法,因为TLS回调处于反汇编列表时反向工具第一个位置...处理程序代码,如果保护是基于SEH处理程序多次呼叫,则很难就行反调试了。...BlockInput; 6.NtSetDebugFilterState; 7.自修改代码; 最后想再次强调,即使是最好对付反调试方法也不能完全防止恶意软件攻击,对付反调试技术主要目标是尽可能使那些恶意软件攻击变得困难

    5.3K32
    领券