1:xor
or是或的意思,那题目的名字xor应该就是异或,看来题主一开始就提醒我们了
下载文件后,我们查一下文件的壳
结果是无壳且是64位 直接用ida64打开
通过快捷键找到字符串页面,再查看伪代码页面
我们可以发现该伪代码有一段当前位数与前一位数异或的处理,同时这个global应该就是包含flag的关键,应该也含有不超过33个字符长度
双击这个global,使用快捷键shift+e查看该变量所包含的具体数值
找到数值后,我们需要编写脚本来实现异或效果找到flag
打开pycharm,编写了如下脚本
脚本代码中使用了range函数 格式如下range(始,末,步长)
同时我们也做到了当前位数与上一位异或的效果,运行代码得到了flag
2:helloworld
下载题目文件后,我们会发现是安卓的apk文件
初略的查一下壳
起码是无壳的
直接用ida64打开,选择apk打开
进去后直接用快捷键转到字符串页面,用ctrl+f查询flag
找到flag
3:解析pe文件头以及读取pe文件的函数
pe文件是指可以直接在Windows环境下打开的文件 比如exe后缀文件以及dll后缀文件
dos头开始为5A4D 这里是一直到112的24结束 其余用空补全对齐
从014c开始一直到742e这个第一段节表开始的地方就是nt头 nt头中又包含标准pe头以及可选pe头
NT 重要字段:
Machine(2个字节):程序允许的CPU型号,如果为0表示可以在任何CPU上执行。若为0x014C,表示能在386及后续的CPU上运行(应该就是开始的014c吧)
NumberOfSections(2个字节):文件中存在的区段的数量
TimeDateStamp(4个字节):时间戳
SizeOfOptionalHeader(2个字节):可选PE头的大小,32位PE文件默认E0,64位默认F0
Characteristics(2个字节):文件属性,每个位有不同的含义
可选重要字段:
Magic(2个字节):表示是32位PE文件还是64位PE文件。0x010B表示32位,0x020B表示64位
SizeOfCode(4个字节):所有代码的总大小 按照FileAlignment对齐后的大小
SizeOfInitializedData(4个字节):已初始化的数据大小 按照FileAlignment对齐
SizeOfUninitializedData(4个字节):未初始化的数据大小 按照FileAlignment对齐
AddressOfEntryPoint(4个字节):程序入口 OEP(偏移地址)包含在可选pe头中
BaseOfCode(4个字节):代码开始地址
BaseOfData(4个字节):数据开始地址
ImageBase(4个字节):内存镜像地址(程序被加载到内存后的起始地址(绝对地址))
SectionAlignment(4个字节):内存对齐大小
FileAlignment(4个字节):文件对齐大小
SizeOfImage(4个字节):文件在内存中的大小,按SectionAlignment对齐后的大小
SizeOfHeaders(4个字节):DOS头+NT头+标准PE头+可选PE头+区段头(xx2e)