ctf逆向xor与hello world以及解析pe文件头

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

关于读取pe文件的函数:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值