[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)
相关文章
|
22天前
【LeetCode 14】454.四数相加 II
【LeetCode 14】454.四数相加 II
25 1
|
6月前
|
人工智能 Java C++
leetcode-454:四数相加 II
leetcode-454:四数相加 II
40 1
|
6月前
|
存储 算法 Java
LeetCode算法题---两数相加(二)
LeetCode算法题---两数相加(二)
38 0
|
6月前
leetcode-258:各位相加
leetcode-258:各位相加
32 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的个数(算法-位运算)
|
算法 C++
剑指offer(C++)-JZ10:斐波那契数列(时间复杂度O(logn)解法)
剑指offer(C++)-JZ10:斐波那契数列(时间复杂度O(logn)解法)