南邮wp
1.Hello,RE!
用IDA打开,f5反编译,可见变量都是一些数字
选中数字,按R键,转换为字符串,可发现v5是flag的倒序,把剩下的变量用r键转换为字母,得到flag{Welcome_To_RE_World!}
2.ReadAsm2
打开func,读
注意点:
1.4004e6: 55 push rbp
4004e7: 48 89 e5 mov rbp,rsp
两句话是用来保存栈环境,方便在当前调用的函数返回后返回之前的函数
2.X86_64环境中,默认rdi,esi存储第一、二个参数,第三、四句把寄存器里的参数存到内存里,存到当前栈空间
3.(1)PTR 指针(pointer)
没有寄存器名时, X ptr 指明内存单元的长度,X 在汇编指令中可以为word 或 byte 。
(2)movsxd 指令
将32位的寄存器和内存操作数符号扩展到64位的寄存器
(3)逻辑异或运算指令XOR
XOR OPRD1,OPRD2 实现两个操作数按位‘异或’(异为真,相同为假)运算,结果送至目的操作数中.
OPRD1 <-- OPRD1 XOR OPRD2
(4)JLE 小于等于时转移
func函数部分进行的操作是
遍历数组,将一个值和该值索引号异或
3.py交易
在线pyc文件逆向
注:x = ord(i) ^32 #将输入的字符串中每个字符ascii码都与32进行异或运算
所以将correct解码后,减16,ascii码与32位异或运算得出flag
flag是nctf{d3c0mpil1n9_PyC}