攻防世界逆向高手题之Reversing-x64Elf-100

99 篇文章 32 订阅

攻防世界逆向高手题之Reversing-x64Elf-100

继续开启全栈梦想之逆向之旅~
这题是攻防世界逆向高手题的Reversing-x64Elf-100
在这里插入图片描述

照例扔入exeinpefo中查看信息,然后扔入对应IDA中查看伪代码:
在这里插入图片描述

64位ELF文件,无壳,扔入64位IDA中,有主函数从主函数开始:(PS:这里犯下第一个错误,我一开始以为没有主函数,跳到start函数中去分析了,结果有个栈指针错误,但是我还不会调,迷惘了,后来一看才发现原来有主函数)

在这里插入图片描述

跟踪进入判断函数并分析代码:

__int64 __fastcall sub_4006FD(__int64 a1)
{
  int i; // [rsp+14h] [rbp-24h]
  __int64 v3[4]; // [rsp+18h] [rbp-20h]

  v3[0] = (__int64)"Dufhbmf";		//这里犯下第二个错误,我以为是普通字符串,在内存中应该小端顺序反序才对,结果是数组,数组的话从首地址开始的确是正序的了,吸取经验,以后要是不确定是不是反序就直接双击跟踪看内存即可。
  v3[1] = (__int64)"pG`imos";
  v3[2] = (__int64)"ewUglpt";
  for ( i = 0; i <= 11; ++i )
  {
    if ( *(char *)(v3[i % 3] + 2 * (i / 3)) - *(char *)(i + a1) != 1 )	//这里犯下第三个错误,一开始没看见最左边的取地址符*的范围是一整个(char *)(v3[i % 3] + 2 * (i / 3)),搞到脚本编写出来障碍,这里应该这样理解,(char *)(v3[i % 3]取这v3[0]、v3[1]、v3[2]、中的第几个完整数组,+ 2 * (i / 3)是为了在确定的v3[0]、v3[1]、v3[2]中继续深入取对应数组的字符进行操作,这里的逆向逻辑也简单,就是*(char *)(v3[i % 3] + 2 * (i / 3)) - 1 = *(char *)(i + a1) 
      return 1LL;
  }
  return 0LL;
}

分析完毕,脚本:

key1="Dufhbmf"
key2="pG`imos"
key3="ewUglpt"
flag=""
key4=[key1,key2,key3]
for i in range(12):
	flag+=chr(ord(key4[i%3][(2*int(i/3))]) -1)
print(flag)

在这里插入图片描述

补充一下,这道题一开始以为是与用户输入无关的存储型flag,本来想断点调试直接输出flag的,结果IDA远程和linux的GDB都不行,想起前面的栈指针错误,应该和调试不了有关吧~ 不过后来想了想,是不能通过动态调试获取的,因为return是嵌入在循环中的:
在这里插入图片描述

也就是有一个不对就跳出循环,就没办法读出完整的flag了,所以这应该是与用户输入有关的生成型flag。

总结:

1:
这里犯下第一个错误,我一开始以为没有主函数,跳到start函数中去分析了,结果有个栈指针错误,但是我还不会调,迷惘了,后来一看才发现原来有主函数

2:
这里犯下第二个错误,我以为是普通字符串,在内存中应该小端顺序反序才对,结果是数组,数组的话从首地址开始的确是正序的了,吸取经验,以后要是不确定是不是反序就直接双击跟踪看内存即可。

3:
这里犯下第三个错误,一开始没看见最左边的取地址符*的范围是一整个(char *)(v3[i % 3] + 2 * (i / 3)),搞到脚本编写出来障碍,这里应该这样理解,(char )(v3[i % 3]取这v3[0]、v3[1]、v3[2]、中的第几个完整数组,+ 2 * (i /3)是为了在确定的v3[0]、v3[1]、v3[2]中继续深入取对应数组的字符进行操作,这里的逆向逻辑也简单,就是(char *)(v3[i % 3] + 2 * (i / 3)) - 1 = *(char *)(i + a1)

解毕!敬礼!

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐一 · 林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值