deathsharp | g trouver ca sur google si ca peut t'aider (condition que tu connaissent c++ )
Code :
- #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);
- }
|
g pas tester, g pas lu, g rien fait ---------------
What butter and whiskey won't cure, there is no cure for.
|