[MRCTF2020]Xor 题解

简介: [MRCTF2020]Xor 题解

32位,无壳

main函数按下F5反汇编,编译失败,直接看汇编

观察并动调验证了一下,byte_2D12C0中存储的就是输入字符串,上述代码就是关键部分

将输入的字符串与cl异或,然后与已经存储好的字符串byte_2CEA08进行比较,如果都相同就是正确的字符串

获取存储好的数据byte_2CEA08

0x4d,0x53,0x41,0x57,0x42,0x7e,0x46,0x58,0x5a,0x3a,0x4a,0x3a,0x60,0x74,0x51,0x4a,0x22,0x4e,0x40,0x20,0x62,0x70,0x64,0x64,0x7d,0x38,0x67

与输入的flag进行异或的是eax寄存器的低八位,观察看出

xor     eax, eax

将eax清空了然后开始循环,每次循环

inc     eax

eax自增1

可以知道每次与flag异或的数据是0,1,2,3,4......(个数为flag长度)

编写WP

data=[0x4d,0x53,0x41,0x57,0x42,0x7e,0x46,0x58,0x5a,0x3a,0x4a,0x3a,0x60,0x74,0x51,0x4a,0x22,0x4e,0x40,0x20,0x62,0x70,0x64,0x64,0x7d,0x38,0x67]
flag=""
for i in range(0,len(data)):
    flag+=chr(data[i]^i)
print(flag)
相关文章
|
3月前
|
JavaScript 前端开发 PHP
leetcode——两数相加【二】
leetcode——两数相加【二】
34 0
|
5月前
LeetCode###445. 两数相加 II
LeetCode###445. 两数相加 II
29 2
|
6月前
|
存储 算法 Go
LeetCode第二题: 两数相加
 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
LeetCode第二题: 两数相加
|
6月前
|
存储
leetcode-2:两数相加
leetcode-2:两数相加
43 0
|
6月前
|
存储 算法
Leetcode算法系列| 2. 两数相加
Leetcode算法系列| 2. 两数相加
|
算法 C++
剑指offer(C++)-JZ56:数组中只出现一次的两个数字(算法-位运算)
剑指offer(C++)-JZ56:数组中只出现一次的两个数字(算法-位运算)
剑指offer(C++)-JZ56:数组中只出现一次的两个数字(算法-位运算)
|
机器学习/深度学习 算法 C++
剑指offer(C++)-JZ64:求1+2+3+...+n(算法-位运算)
剑指offer(C++)-JZ64:求1+2+3+...+n(算法-位运算)
|
算法 C++
剑指offer(C++)-JZ65:不用加减乘除做加法(算法-位运算)
剑指offer(C++)-JZ65:不用加减乘除做加法(算法-位运算)
|
算法 C++
剑指offer(C++)-JZ15:二进制中1的个数(算法-位运算)
剑指offer(C++)-JZ15:二进制中1的个数(算法-位运算)
LeetCode-2043 两数相加题解
LeetCode-2043 两数相加题解