ADworld-RE100

分析

进入IDA查看后能看到input key的位置,以为又是一道很清晰的逆向题,跟进后发现后面只有一个check CheckStringIsNumber。也就是说只要是数字就可以通过这个验证,以及有几个反调试函数detectDebuggingcheckDebuggerProcessRunning。以为在动态调试的时候修改返回值即可,但是几次之后发现了不对劲。仔细看之后发现了fork函数
在这里插入图片描述
关于fork函数的解释 https://www.cnblogs.com/dongguolei/p/8086346.html
也就是说,程序在执行到fork之后,会同时开启两个进程。v3=0与v3=pid。在动态调试时,fork函数的返回值为0,即我们调试的为子进程。子进程与父进程公用一个pip函数创建的管道来共享数据。所以这里分析到下面
在这里插入图片描述
这里的confuseKey函数也很简单,if逻辑也很简单。直接看confuseKey,将程序分为4段,打乱顺序为3412所以这里可以从最后的strcmp得到flag 为 {53fc275d81053ed5be8cdaf29f59034938ae4efd} 提交的时候去掉花括号。但是这里深思一下,如果下面的逻辑没有这么简单呢,如果一定要动态调试到下面呢。想了一下,只要修改程序EIP,直接跳转到验证数据的地方,将验证函数的参数修改为我们想要输入的值即可动态跟踪。
在这里插入图片描述

总结

这里主要考察的还是静态分析,虽然不难,但是动态分析上很有意思。一开始以为只是简简单单的反调试,后来新认识了fork函数,还是很有收获的。

明日计划

  • 下一题攻防世界
  • 复习
    前段时间课程结课实验和一些简单的学校比赛没怎么刷题,最近继续复习考试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值