avatar

我可是会飞的啊

找对象ing

  • 首页
  • ctfs
  • 关于
  • 文件库
  • 留言板
  • 标签
  • 归档
  • 【网课推荐】(红队&二进制)
首页 《xchg rax,rax》片段分析0x0f--CBC异或加解密

《xchg rax,rax》片段分析0x0f--CBC异或加解密

Posted 2022年 01月 16日 Updated 2023年 03月 1日
By selph
3~5 min read

前言

本次是该系列的的第0x0f篇,依然是两种等价运算


实验环境:

  • Windows10 + VS2022 + masm

0x0f

代码片段链接:xorpd | xchg rax,rax 0x0f

.loop:
    xor      byte [rsi],al
    lodsb
    loop     .loop

代码分析

lodsb指令:按字节载入rsi(esi)寄存器到al,然后根据方向标志位移动si指针一位

这里进行的操作是一个循环,循环里不断进行异或操作,数据存在rsi里,测试之前需要获取一下数据长度到rcx里,作为loop的循环计数使用,这里的加密操作如下:

rsi[0] ^= al
rsi[1] ^= rsi[0]
rsi[2] ^= rsi[1]
rsi[3] ^= rsi[2]
...

除了第一个字节之外,接下来每一个字节都与前一个字节进行异或操作,属于一种简单的CBC加密

因为异或操作可逆,所以这个加密可解,只需要把原来的加密流程给倒转过来

...
rsi[3] ^= rsi[2]
rsi[2] ^= rsi[1]
rsi[1] ^= rsi[0]
rsi[0] ^= al

具体加解密操作见如下代码

测试代码:

.data
testStr db "abcde123",0

.code
main proc

    ;获取字符串长度
    lea rsi, qword ptr [testStr]
    xor rcx, rcx
Calcstrlen:
    cmp byte ptr [rsi], 0
    je start
    inc rcx
    inc rsi
    jmp Calcstrlen

start:
    ;==========加密操作==========
    lea rsi, qword ptr [testStr]
    lea rax, [020h]

    ;对数据进行逐字节异或加密操作
loop1:
    xor      byte ptr [rsi],al  ;使用al异或一个字节(第一次的时候使用初始的al)
    lodsb                       ;将刚刚异或过的那个字节存到al,然后rsi指向下一个字节
    loop     loop1              ;循环


    ;==========解密操作==========
    ;修改eflags标志位DF方向标志
    pushfq
    or qword ptr [rsp], 010000000000b
    popfq
    ;从最后一个字节开始向前解密操作
    dec rsi
    ;数据处理长度
    mov rcx, 7
loop2:
    mov      al, byte ptr [rsi-1]
    xor      byte ptr [rsi], al
    lodsb
    loop     loop2
    
    lea rax, [020h]
    xor byte ptr [rsi], al

	ret
main ENDP
END
编程开发, 读书笔记
《xchg rax,rax》
This post is licensed under CC BY 4.0 by the author.
Share

Further Reading

Apr 12, 2022

《xchg rax,rax》片段分析0x23--模3运算

《xchg rax,rax》片段分析0x23--模3运算

Apr 11, 2022

C++ Iterator 迭代器

迭代器(Iterator)是一种抽象设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器。

Apr 10, 2022

C++折叠表达式

C++17折叠表达式的用法

OLDER

《xchg rax,rax》片段分析0x0e--两种等价取反

NEWER

《xchg rax,rax》片段分析0x10--两数交换

Recently Updated

  • 【置顶】本博客的使用指南&更新计划(2023.3更新)
  • [技能兴鲁2023 决赛 职工组]re-ezalgorithm
  • [Pico CTF 2022]pwn-basic-file-exploit
  • [Pico CTF 2021]pwn-Unsubscriptions Are Free
  • [Pico CTF 2021]pwn-Here's a Libc

Trending Tags

pwn 符号执行 HEVD学习 .NET逆向 病毒分析 CTF 软件安全 《Windows内核编程》 dll注入 树莓派

Contents

©2023 我可是会飞的啊. Some rights reserved.

Using the Halo theme Chirpy