攻防世界-Mysterious

查壳

在这里插入图片描述

IDA

进入关键函数:

可以直接看到flag字符串的生成过程,就是不断给text添加后缀。其中只有source没有给出。而source经过了itoa和atoi以及判断等变化,应该是解题关键。

在这里插入图片描述

atoi&itoa

atoi()函数

atoi()原型:  int atoi(const char *str );
函数功能:把字符串转换成整型数。
参数str:要进行转换的字符串
返回值:每个函数返回 int 值,此值由将输入字符作为数字解析而生成。 如果该输入无法转换为该类型的值,则atoi的返回值为 0

itoa()函数

itoa()原型:  char *itoa( int value, char *string,int radix);
原型说明:
输入参数:
value:要转换的数据。
string:目标字符串的地址。
radix:转换后的进制数,可以是10进制、16进制等,范围必须在 2-36

解题

way1:

本题的关键点在source值,而source是value值整型转字符串,value=v4+1。
根据题目中的v4判断可知v4为122,则flag直出。


way2:

在判断输入的地方给了 v4 string[3] string[5] string[4]的值,其中v4是atoi string转的整型,按照经验照顺序拼起来输入“122xyz” 即可弹出flag

flag

flag{123_Buff3r_0v3rf|0w}

关于way2输入的字符串,122xyz是按照做题经验猜出来的,但实际看伪代码,可以发现v4是atoi string得到的整型,但string输入的是122xyz,转换成字符串应该是122xyz全部转换,实际只有122从字符型转成整型。

在atoi下断点调试后发现,输入纯字母字符串全部不识别,返回0;输入纯数字能够正常识别,返回整型数字;输入字母+数字,返回0;输入数字+字母,返回整型数字部分。

下图为输入122xyz后,atoi返回的整型值:

在这里插入图片描述

填坑:这里是atoi函数性质使然。其特性和上述动调表现一致,附测试代码:

#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
	char arr1[]="122";
	char arr2[]="xyz";
	char arr3[]="122xyz";
	int arr11=atoi(arr1);
	int arr22=atoi(arr2);
	int arr33=atoi(arr3);
	cout<<arr11<<endl;
	cout<<arr22<<endl;
	cout<<arr33<<endl;
	cout<<atoi(arr3)<<endl;
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值