网站建设中怎么写,中国地图36个省的地图,苏州调查公司电话,wordpress文章显示字数第一步 查壳#xff0c;该题是32位#xff0c;无壳。 第二步 跟进main#xff0c;发现反汇编不了 通过下图我们可以发现一串类似字符串的东西 第三步 我们看一下汇编
我们可以得到这些信息#xff1a;flag的长度为27#xff08;下面是对本条指令cmp edx 27指令的应用…第一步 查壳该题是32位无壳。 第二步 跟进main发现反汇编不了 通过下图我们可以发现一串类似字符串的东西 第三步 我们看一下汇编
我们可以得到这些信息flag的长度为27下面是对本条指令cmp edx 27指令的应用介绍这条指令通常用在条件分支处理中比如决定程序的下一步执行路径。根据 cmp 指令后的条件跳转指令如 je, jne, jl, jg 等程序可以根据比较结果跳转到不同的代码段。
例如
cmp edx, 27
je equal_label ; 如果 EDX 等于 27跳转到 equal_label
jg greater_label ; 如果 EDX 大于 27跳转到 greater_label
这样cmp edx, 27 在程序中起到了决定程序流程的关键作用根据 EDX 寄存器的值与 27 的比较结果来控制程序的执行路径。
字符串的长度等于27则为right不是则为wrong。
接下来我们看到异或操作xor clal 结合汇编代码和以上信息我们得出这就是一个简单的异或将我们之前的字符串进行异或。 第四步 编写脚本 分析脚本
初始化变量
初始化字符串 codecodeMSAWB~FXZ:J:tQJN bpdd}8g
这里定义了一个字符串 code它包含了加密或编码后的数据。
初始化字符串 flagflag
这里初始化了一个空字符串 flag用来存储解码后的结果。
解码过程
遍历字符串并解码for i in range(0,len(code)): flagchr((i^ord(code[i]))) for i in range(0,len(code)): 这个循环遍历 code 字符串中的每个字符i 是字符的索引。ord(code[i]): 获取 code 中第 i 个字符的 ASCII 值。i^ord(code[i]): 将字符的 ASCII 值与其索引进行异或操作。异或是一种基本的位操作它对位值相同的对返回 0对位值不同的对返回 1。chr(...): 将异或操作的结果转换回对应的字符。flag...: 将转换后的字符追加到字符串 flag 的末尾。
flag{_R31ly_E2_R3verse!}