欢迎来到天天文库
浏览记录
ID:42575790
大小:4.07 MB
页数:11页
时间:2019-09-18
《linux的学习心得》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、4.1程序破解首先编写一段程序,使得程序完成输入正确的用户名显示WELCONE,输入错误的用户名显示BYE,上图为程序展示的过程。通过objdump–d20132201的指令对执行文件进行反汇编,并且找到主函数中的相应的进行校验的位置,因为这个程序中需要进行字符串的比较,所以在比较字符串之后的跳转指令就是相应的该破解的位置,也就是说750e这条跳转指令就是对于输入字符串判定之后的响应,因此只要将这个跳转进行修改,就可以看到无论输入什么字符串均显示WELCOME;通过vi20132201直接打开应用程序进行修改,打开之后会看到许多乱码
2、,输入指令%!xxd将乱码变为16进制形式的显示。在16进制的显示中,找到之前的跳转指令750e,进行破解。图为打开之后的16进制显示:通过/750e指令,找到其在文件中的位置:为了使得输入错误的用户名仍然不会跳转到BYE,因此可以将oe改成00,即无论输入什么,都会跳转到下一行继续进行,就像输入正确不发生跳转一样,修改完后,输入:%!xxd–r,会到了乱码页面,然后输入:wq!,会进行保存退出,修改后图如下:此时输入什么用户名都会显示welcome:4.2ELF文件格式分析:可重定位目标文件结构:ELF头部.text.rodata
3、.data.bss.sym.rel.txt.rel.data.line.debug.strtab节头部表在终端中键入hexdump-xlpj.o,会看到很多16进制编码。数据均为16进制数据(因为使用了-x选项),并且第一列为偏移地址。使用下面命令来显示elf.o中各个段相关信息:objdump–xlpj.o输出结果如下:也可以用下面的命令来查看各个段信息:readelf-alpj.o输出结果为:文件头分析:首先是Elf文件头,其定义为(在/usr/include/elf.h中)#defineEI_NIDENT(16)typedef
4、struct{unsignedchare_ident[EI_NIDENT];/*Magicnumberandotherinfo*/Elf32_Halfe_type;/*Objectfiletype*/Elf32_Halfe_machine;/*Architecture*/Elf32_Worde_version;/*Objectfileversion*/Elf32_Addre_entry;/*Entrypointvirtualaddress*/Elf32_Offe_phoff;/*Programheadertablefileoffse
5、t*/Elf32_Offe_shoff;/*Sectionheadertablefileoffset*/Elf32_Worde_flags;/*Processor-specificflags*/Elf32_Halfe_ehsize;/*ELFheadersizeinbytes*/Elf32_Halfe_phentsize;/*Programheadertableentrysize*/Elf32_Halfe_phnum;/*Programheadertableentrycount*/Elf32_Halfe_shentsize;/*Se
6、ctionheadertableentrysize*/Elf32_Halfe_shnum;/*Sectionheadertableentrycount*/Elf32_Halfe_shstrndx;/*Sectionheaderstringtableindex*/}Elf32_Ehdr;大小为52个字节(16进制表示为0x34),因此elf.o前52个字节内容为ELF文件头,其二进制表示为:第一行分析:其前16个字节(第一行,对应e_ident[EI_NIDENT])实际表示内容为7f454c460101010000000000000
7、00000,前四个字节7f454c46(0x45,0x4c,0x46是'e','l','f'对应的ascii编码)是一个魔数(magicnumber),表示这是一个ELF对象。接下来的一个字节01表示是一个32位对象,接下来的一个字节01表示是小端法表示,再接下来的一个字节01表示文件头版本。剩下的默认都设置为0。第二行分析:接下来(第二行)e_type(两个字节)值为0x0001,表示是一个重定位文件。e_machine(两个字节)值为0x0003,表示是intel80386处理器体系结构。e_version(四个字节)值为0x0
8、0000001,表示是当前版本。e_entry(四个字节)值为0x00000000,表示没有入口点。e_phoff(四个字节)值为0x00000000,表示没有程序头表。第三行分析:接下来(第三行)e_shoff(四个字节)值为0x0
此文档下载收益归作者所有