汇编始终是永远的痛

作者: 山东大葱哥 | 来源:发表于2019-09-17 13:03 被阅读0次

    汇编始终是永远的痛

    一直没能好好掌握汇编知识,始终是心中的一块痛,这不每次都需要临时抱佛脚。
    之前注册了KCTF,但一直没顾上看,昨天发现已经接近尾声了,一声长叹!
    虽然尾声,但还是可以参与一下的,重在参与嘛,于是就看看了它的签到题。

    签到题

    第一个签到题,就是关于序列号破解的,一个exe文件,要求获取指定用户名的序列号。
    地址:https://ctf.pediy.com/game-season_fight-112.htm

    很明显需要对exe进行反编译了,这种反编译一般都需要有汇编语言的知识才可以的,否则对着一堆机器码只能望洋兴叹。


    image.png

    汇编语言摘要

    参考网站:http://c.biancheng.net/view/3566.html

    基于零标志位、进位标志位、溢出标志位、奇偶标志位和符号标志位的跳转

    助记符 说明 标志位/寄存器 助记符 说明 标志位/寄存器
    JZ 为零跳转 ZF=1 JNO 无溢出跳转 F=0
    JNZ 非零跳转 ZF=0 JS 有符号跳转 SF=1
    JC 进位跳转 CF=1 JNS 无符号跳转 SF=0
    JNC 无进位跳转 CF=0 JP 偶校验跳转 PF=1
    JO 溢出跳转 OF=1 JNP 奇校验跳转 PF=0

    基于相等性评估的跳转指令。

    有些情况下,进行比较的是两个操作数;其他情况下,则是基于 CX、ECX 或 RCX 的值进行跳转。表中符号 leftOp 和 rightOp 分别指的是 CMP 指令中的左(目的)操作数和右(源)操 作数:

    助记符 说明
    JE 相等跳转 (leftOp=rightOp)
    JNE 不相等跳转 (leftOp M rightOp)
    JCXZ CX=0 跳转
    JECXZ ECX=0 跳转
    JRCXZ RCX=0 跳转(64 位模式)
    CMP leftOp,rightOp
    

    无符号数比较

    基于无符号数比较的跳转如下表所示。操作数的名称反映了表达式中操作数的顺序(比如 leftOp < rightOp)。下表中的跳转仅在比较无符号数值时才有意义。有符号操作数使用不同的跳转指令。

    助记符 说明 助记符 说明
    JA 大于跳转(若 leftOp > rightOp) JB 小于跳转(若 leftOp < rightOp)
    JNBE 不小于或等于跳转(与 JA 相同) JNAE 不大于或等于跳转(与 JB 相同)
    JAE 大于或等于跳转(若 leftOp ≥ rightOp) JBE 小于或等于跳转(若 leftOp ≤ rightOp)
    JNB 不小于跳转(与 JAE 相同) JNA 不大于跳转(与 JBE 相同)

    有符号数比较

    下表列岀了基于有符号数比较的跳转。下面的指令序列展示了两个有符号数值的比较:

    助记符 说明 助记符 说明
    JG 大于跳转(若 leftOp > rightOp) JL 小于跳转(若 leftOp < rightOp)
    JNLE 不小于或等于跳转(与 JG 相同) JNGE 不大于或等于跳转(与 JL 相同)
    JGE 大于或等于跳转(若 leftOp ≥ rightOp) JLE 小于或等于跳转(若 leftOp ≤ rightOp)
    JNL 不小于跳转(与 JGE 相同) JNG 不大于跳转(与 JLE 相同)

    相关文章

      网友评论

        本文标题:汇编始终是永远的痛

        本文链接:https://www.haomeiwen.com/subject/uiwquctx.html