ctrncpy
ctrncpy属于c语言标准库里的一个函数 ,定义在string.h头文件中,作用就是将一个字符串的一部分拷贝到另一个字符串里
memset
memset也是属于c语言标准库里的一个函数,定义在string.h的头文件中,作用是将一块内存中所有字节都设定为特定的值
int main() { char arr1[20]="abcdefghigk"; char arr2[10]; memset(arr2, '\0', sizeof(arr2)); strncpy(arr2,arr1,9); //因为这里arr2出去\0外所包含的内存空间为9 所以交换字符不可超过9位 printf("%s\n",arr2);
strcat 是一个 C 语言标准库函数,用于将两个字符串连接起来。它的原型定义在 <string.h>
头文件中,其作用是将 s2
字符串追加到 s1
字符串的末尾,并返回 s1
的指针。
char *strcat(char *s1, const char *s2);
-
s1
是目标字符串的指针。 -
s2
是要追加的字符串的指针。
使用 strcat
时需要注意以下几点:
-
s1
必须指向足够大的内存区域,以容纳连接后的字符串。 -
s1
和s2
不能重叠,否则可能导致未定义的行为。 -
s2
必须是一个以空字符('\0'
)结尾的字符串。小端序存储(Little Endian)是一种计算机数据存储方式,它将多字节数据的最低有效字节(即最小的字节)存储在内存的最低地址处,而最高有效字节(即最大的字节)存储在内存的最高地址处。
大端序存储
先将下载好的附件进行解压 然后得到luck_guy这个文件 进行查壳 用64位的IDA进行静态分析
我们开始看这道题的主函数
这里我们可以看到 他让我们给v4赋值然后把v4作为patch_me这个函数的自变量
我们跟进一下patch_me这个函数
(v4就是a1)如果能被2整除则跳转到get_flag这个函数中 继续跟进一下
这里不难发现他用了一个随机数
在case1中 这里用memset这个函数将s里面的变量都变成0
然后把f1赋值给s 再把f2也赋值给s
case4中 把s的值赋给了f2
case5中 对f2进行了一次减法运算
可以根据case5中的原理写出脚本
![87e3f31b3cc3cb9ba4cc240ffcf1d0b7](C:\Users\22069\Documents\Tencent Files\2206945154\nt_qq\nt_data\Pic\2024-10\Ori\87e3f31b3cc3cb9ba4cc240ffcf1d0b7.png
然后就得到了flag 进行提交就好了
标签:字节,s2,s1,第十一,char,arr2,字符串,guy,luck From: https://blog.csdn.net/2403_87533599/article/details/142966754