码农的世界开发经验随笔程序员

汇编始终是永远的痛

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 相同)
上一篇下一篇

猜你喜欢

热点阅读