攻防世界新手RE 6.getit
菜鸡发现这个程序偷偷摸摸在自己的机器上搞事情,它决定一探究竟
下载得到未加壳的64位ELF文件
进入ida64
/*这里复习一下文件函数的用法
1.定义文件类型指针变量
FILE *指针变量名
2.fopen(文件名,文件使用方式);
"w".为写而打开文本文件.(若不存在则新建,反之,则从文件起始位置写,原内容将被覆盖).
3.fseek函数
fseek函数用来移动文件位置指针到指定的位置上,接着的读或写操作将从此位置开始.函数的调用形式如下:
fseek(pf,offset,origin)
pf:文件指针
offset:以字节为单位的位移量,为长整形.
origin:是起始点,用来指定位移量是以哪个位置为基准的.
4.fputc(将一指定字符写入文件流中)
相关函数 fopen,fwrite,fscanf,putc
表头文件 #include<stdio.h>
定义函数 int fputc(int c,FILE * stream);
函数说明 fputc 会将参数c转为unsigned char后写入参数stream指定的文件中。
返回值 fputc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。
5.fprintf函数
fprintf函数按格式将内存中的数据转换成对应的字符,并以ASCII代码形式输出到文本文件中.Fprintf函数和printf函数相似,只是将输出的内容按格式存放到磁盘的文本文件中.调用形式如下:
fprintf(文件指针,格式控制字符串,输出项表)
如:fprintf(fp,"%d %d",x,y);
以下语句 fprintf(stdout,"%d %d",x,y)
6.fclose函数
关闭文件
当文件的读写操作完成之后,使用fclose函数关闭文件.格式如下:
fclose(文件指针)
如:fclose(fp);
7.remove
remove()是C语言中的函数,一般作用是删除文件。函数原型是intremove(char*filename)。
*/
从文件操作中看出
26行fseek 函数定位文件指针位置
27行fputc 函数根据 26 指定的位置放入指定字符 t[p[i]]
28行fseek 函数把文件指针置于文件首
29行fprintf 函数从文件首部开始覆盖整个文档内容
因此先前获取的内容在28 29行被盖去了,即便删除remove也得不到正确答案的文件
这里我尝试直接输出0x6010E0行的t值,结果得到
于是换个方法开始写脚本
最终目的是导出t的值
运行得到答案