buuctf reverse1

老样子,查信息

无壳,64位

在ida(x64)中打开

没有找到线索,继续跟进函数

从下往上分析

1.从第1位到第v5位比对Str1和Str2的值,若相等则执行函数,反之执行其他函数

2.v5 = j_srelen(Str2)

3.for()内:v10 = j

j > j_strlen(Str2) ,跳出循环。反之,则判断Str2[j]是否等于111,若相等,则让这个元素等于48,反之,继续执行

4.for()语句:让v3等于一串数字,然后每循环依次v3加4

5.v3指向v7的地址


其中:如果出现从20到128的数字或一串不明意义的数字,可能是字母的ascii码,我们按R键转换成字母

那个sub_1400111D1函数使用格式神似c语言的printf函数

sub_14001128F与c语言的scanf对应,其实这两个函数就是printf和scanf,我们右键,选择rename改名

我们跟进j_strlen函数

发现就是strlen函数

还有第一个for()语句中不明意义的加法和v3指向v7,之前写这篇文章有过一段印象就是在执行主程序前预留一点加载时间,虽然不知道有什么用处。

strncmp函数


大致流程就是:将Str2中的字符串中的字母o转化为数字0,然后读取输入的字符串进行比对,若相等则成功反之失败,所以flag就是转换后的Str2

跟进Str2

所以把o换为0就是flag

flag{hell0_w0rld}

笔记:

*(_DWORD *) 强制类型转换并提领指针(懵逼)

今晚挑战写5个wp,哈哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值