BUUCTF [HDCTF2019]Maze

文件加壳了 先给它去壳

upx -d 文件地址

把文件拖入ida 发现没办法F5查看伪c代码

这里发现了jnz 这是无用字节 也就是花指令

那什么是花指令呢?

花指令是企图隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法,在真实代码中插入一些垃圾代码的同时还保证原有程序的正确执行,而程序无法很好地反编译, 难以理解程序内容,达到混淆视听的效果。

具体可以看这位师傅的博客                 
https://blog.csdn.net/m0_51246873/article/details/127167749

那我们现在需要把花指令消除掉,这里需要nop指令

NOP指令:号称最安全的指令,全名为no Operation,一条nop指令占用一个字节,什么也不做。有时编译器会使用该指令将代码对齐到偶数地址边界(类似于内存对齐)。IA-32处理器从偶数双字地址处加载代码和数据时会更快

将jnz指令右键nop掉

call    near ptr 0EC85D78Bh这个指令不能nop掉 因为字符串可能存在有效信息

先把字符串转换为字节数据 按d转换

接下来尝试先把最高位数据nop掉,之后尝试建立主函数

从main开始选中关键代码 建立主函数

按p键建立主函数 然后F5查看主函数源码

看到adsw 猜测是迷宫题 继续跟进 找到迷宫的主要内容

是一个10*7的迷宫

def main():
    maze = "*******+********* ******    ****   ******* **F******    **************"
    # 假设每列宽为10个字符(这个值可能需要根据迷宫的实际布局进行调整)
    column_width = 10
    # 将迷宫字符串分割为多行
    rows = [maze[i:i + column_width] for i in range(0, len(maze), column_width)]
    # 打印每行
    for row in rows:
        print(row)


if __name__ == "__main__":
    main()
*******+**
******* **
****    **
**   *****
** **F****
**    ****
**********

这个出迷宫是从+进F出 而w上s下a左d右 一共14步

得到flag{ssaaasaassdddw}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值