汇编始终是永远的痛
2019-09-17 本文已影响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 相同) |