zoukankan      html  css  js  c++  java
  • 花指令行为大赏

    好家伙,今天本来想开一个 CTF 做做,结果这个题目不知道为啥,把源代码都丢上来了。艹······

    不过给了就好好学学吧,可以看到这个代码里面是带了一堆花指令的。刚好我一直弄不明白花指令是个什么东西,现在刚好有现成的源代码学习,这下终于给整明白了。

    那么,这个文章就用来记录一下我遇到的一些花指令吧,先从这个题目中的花指令开始

    花指令 1 鉴赏

    _asm {
    	call sub2
    	_emit 0xEB
    	jmp label2
    sub2:
    	add dword ptr[esp],1 ; esp 处指定的数字 + 1,返回的时候 eip 会跳过 _emit 0xE8
    	retn
    label2:
    }
    

    我们先来看看这段代码是如何运行的,这段代码中可能 _emit 这个伪代码有点陌生,这个东西主要是用来在汇编中插入数据用的,相当于在 call sub2jmp label2 这个指令中间插入了 0xEB 这个数据

    然后我们来看看这个代码是如何执行的,首先这个代码执行 call sub2 ,执行这个代码的时候首先会将 eip 指向 _emit 0xEB 这个数据,然后会将 eip 的值 push 入系统栈。然后转到 sub2 这个地方继续执行。

    然后在 sub2 这个地方,代码将 esp 指向的数据 +1,而这个数据其实就是刚刚 push 入栈的先前 eip 数据,将 eip 数据 + 1 了以后,之后在执行 retn 的时候 pop eip,就会跳过 _emit 0xEB,执行 jmp label2

    所以可以看到这个地方 _emit 0xEB 插入了一个寂寞,但是做反逆向的人可不是乱加的,这可是有备而来。

    因为 0xEB 对应的汇编指令是 jmp 指令,就算是 IDA 采用了什么牛逼哄哄的递归下降反汇编算法,毕竟不是真的执行代码,所以他还是会在分析 call sub2 这个指令之后,一边分析 sub2 的子过程代码,还会直接分析 call sub2 后的代码,于是 _emit 0xEB 插入的数据还是会被当成 jmp 指令来分析,然后导致 IDA 的分析出错。

  • 相关阅读:
    百度富文本编辑器的上传图片的路径问题
    laravel初次学习总结及一些细节
    macOS apache配置及开启虚拟服务器的开启,apache开启重写模式
    类似于qq空间类型的评论和回复
    向php提交数据及json
    mac 初次配置apache,及mac下安装mysql
    C#连接mysql数据库插入数据后获取自增长主键ID值
    PHP 真正多线程的使用
    C# 连接mysql数据库
    MySql状态查看方法 MySql如何查看连接数和状态?
  • 原文地址:https://www.cnblogs.com/Node-Sans-Blog/p/15315502.html
Copyright © 2011-2022 走看看