|
|
1.1.1.2 ! root 1: /* $Id: unbaja.c,v 1.42 2009/03/20 08:51:08 rswindell Exp $ */ 1.1 root 2: 3: #include <stdio.h> 4: #include <string.h> 5: 6: #include <stdlib.h> 7: 8: #include "dirwrap.h" 9: 10: #include "crc32.h" 11: 12: #include "cmdshell.h" 13: #include "ars_defs.h" 14: 15: int indent=0; 16: int indenteol=0; 17: 18: /* table of variables for use by bsearch() */ 19: 20: struct var_table_t { 21: unsigned long crc; 22: char *var; 23: } var_table[] = { 24: { 0x00000000, "STR" }, { 0x01837ca9, "r2" }, { 0x023e4b48, "fattr" }, 25: { 0x02408dc5, "_SYS_TIMEZONE" }, { 0x038a840b, "k1" }, 26: { 0x0400f83f, "e2" }, { 0x04807a11, "_USERON.LOGONS" }, 27: { 0x057e4cd4, "_TIMELEFT" }, { 0x07954570, "_USERON.XEDIT" }, 28: { 0x08f65a2a, "_USERON.MODEM" }, { 0x094cc42c, "_USERON.ROWS" }, 29: { 0x098bdfcb, "_USERON.TLAST" }, { 0x0bf3b87a, "w3" }, 30: { 0x0c1a1011, "_USERON.FLAGS2" }, { 0x0c8dcf3b, "_USERON.FBACKS" }, 31: { 0x0e42002a, "_EXPIRED_EXEMPT" }, { 0x0ea515b1, "_USERON.LASTON" }, 32: { 0x10bfc6e9, "_EXPIRED_FLAGS2" }, { 0x11c83294, "_SYS_PSNUM" }, 33: { 0x12e7d6d2, "_USERON.EXEMPT" }, { 0x12e8893b, "v3" }, 34: { 0x15755030, "_COMSPEC" }, { 0x167ea426, "pos" }, 35: { 0x16e2585f, "_CLIENT_SOCKET" }, { 0x176b0dad, "a3" }, 36: { 0x18984de8, "s2" }, { 0x19982a4f, "log" }, { 0x1a91b54a, "j1" }, 37: { 0x1c4455ee, "_DTE_RATE" }, { 0x1d1bc97e, "d2" }, 38: { 0x1e5052a7, "_MAX_MINUTES" }, { 0x1ef214ef, "_USERON.FIRSTON" }, 39: { 0x2039a29f, "_USERON.POSTS" }, { 0x205ace36, "_AUTOTERM" }, 40: { 0x2060efc3, "s" }, { 0x20cb6325, "_NEW_REST" }, 41: { 0x20deebb9, "t3" }, { 0x2105d2b9, "_SOCKET_ERROR" }, 42: { 0x222d1c26, "ss" }, { 0x22f01d71, "_NEW_FLAGS3" }, 43: { 0x23edbcbc, "nodes_wfc" }, { 0x255d6f2f, "c3" }, 44: { 0x270d2bda, "w" }, { 0x274e4d59, "nm" }, { 0x27a9fc7c, "attempt" }, 45: { 0x28a7d7c8, "h1" }, { 0x2aa89801, "_NODE_SWAP" }, 46: { 0x2aae2f6a, "q2" }, { 0x2aaf9bd3, "_USERON.EXPIRE" }, 47: { 0x2b3c257f, "_CUR_CPS" }, { 0x2c0c389a, "dir" }, 48: { 0x2f2dabfc, "f2" }, { 0x30ffd1ff, "cmdline" }, 49: { 0x31178ba2, "_NEW_CDT" }, { 0x3178f9d6, "_USERON.COMMENT" }, 50: { 0x31bce689, "i1" }, { 0x328ed476, "_USERON.LEVEL" }, 51: { 0x32ebcea0, "attr" }, { 0x330c7795, "k" }, { 0x33b51e2b, "p2" }, 52: { 0x3461b38c, "o" }, { 0x357b23ee, "total" }, 53: { 0x3587ad08, "cursor" }, { 0x36369abd, "g2" }, 54: { 0x381d3c2a, "_SYS_STATUS" }, { 0x396b7167, "_NETMAIL_COST" }, 55: { 0x39c5daf8, "u3" }, { 0x3a37c26b, "_NODE_EXT" }, 56: { 0x3aba3bbe, "g" }, { 0x3c465e6e, "b3" }, { 0x3d39d372, "argc" }, 57: { 0x3dc166bb, "path" }, { 0x3dd7ffa7, "c" }, 58: { 0x41239e21, "_CONNECTION" }, { 0x4131aa2b, "g3" }, 59: { 0x430178ec, "_UQ" }, { 0x4366831a, "n" }, { 0x440b4703, "j" }, 60: { 0x44b22ebd, "p3" }, { 0x455cb929, "_FTP_MODE" }, 61: { 0x4569c62e, "_EXPIRED_REST" }, { 0x46cd817e, "bytes" }, 62: { 0x490873f1, "_USERON.ALIAS" }, { 0x4a16a4ea, "filepos" }, 63: { 0x4a9f3955, "_USERON.EMAILS" }, { 0x4ad0cf31, "b" }, 64: { 0x4b0aeb24, "_NEW_EXEMPT" }, { 0x4b416ef8, "b2" }, 65: { 0x4b8a0705, "connect" }, { 0x4ccb12cc, "l1" }, 66: { 0x4db200d2, "_LEECH_PCT" }, { 0x4dbd0b28, "f" }, 67: { 0x4ec2ea6e, "u2" }, { 0x4ee1ff3a, "_USERON.LOCATION" }, 68: { 0x4f02623a, "_NODE_MINBPS" }, { 0x500a1b4c, "v" }, 69: { 0x5053a71b, "z1" }, { 0x50e43799, "argv" }, { 0x525a5fb9, "c2" }, 70: { 0x52996eab, "_USERON.TTODAY" }, { 0x55d0238d, "m1" }, 71: { 0x55f72de7, "_NEW_FLAGS2" }, { 0x5767df55, "r" }, 72: { 0x57d9db2f, "t2" }, { 0x582a9b6a, "f3" }, { 0x5863165a, "fname" }, 73: { 0x590175f1, "time" }, { 0x59bc5767, "z" }, 74: { 0x5a22d4bd, "_NODEFILE" }, { 0x5aaccfc5, "_ERRNO" }, 75: { 0x5b0d0c54, "_USERON.NS_TIME" }, { 0x5be35885, "guest" }, 76: { 0x5c1c1500, "_TOS" }, { 0x5da91ffc, "q3" }, 77: { 0x5de44e8b, "_USERON.NAME" }, { 0x5e049062, "_QUESTION" }, 78: { 0x5e914a47, "nodes_inuse" }, { 0x5eeaff21, "_NETMAIL_MISC" }, 79: { 0x606c3d3b, "a2" }, { 0x613b690e, "_ROWS" }, 80: { 0x6178e75f, "handle" }, { 0x61be0d36, "_USERON.QWK" }, 81: { 0x6265c599, "x1" }, { 0x6392dc62, "_SYS_AUTODEL" }, 82: { 0x640f7f81, "addr" }, { 0x65efb9ad, "v2" }, 83: { 0x665ac227, "_USERON.CHAT" }, { 0x67b8f67f, "_EXPIRED_FLAGS3" }, 84: { 0x67e6410f, "o1" }, { 0x682d973f, "start" }, 85: { 0x68b693b2, "name" }, { 0x698d59b4, "_SYS_NODES" }, 86: { 0x69d4f019, "ftime" }, { 0x6a1cf9e8, "d3" }, 87: { 0x6a9fd069, "LIMIT_REPSIZE" }, { 0x6c8e350a, "_NEW_LEVEL" }, 88: { 0x6f9f7d7e, "s3" }, { 0x6fb1c46e, "_SYS_EXP_WARN" }, 89: { 0x709c07da, "_NODE_MISC" }, { 0x7166336e, "hubid" }, 90: { 0x717231d6, "MAX_REPSIZE" }, { 0x7307c8a9, "e3" }, 91: { 0x7342a625, "_NEW_EXPIRE" }, { 0x7345219f, "_NEW_MIN" }, 92: { 0x7504b078, "port" }, { 0x75dc4306, "_NEW_PROT" }, 93: { 0x761cc978, "rep" }, { 0x76844c3f, "r3" }, 94: { 0x78afeaf1, "_SYS_PWDAYS" }, { 0x79f47b28, "attempts" }, 95: { 0x7ade6ef8, "local_file" }, { 0x7b1d2087, "_USERON.FLAGS3" }, 96: { 0x7b7ef4d8, "y1" }, { 0x7c602a37, "_USERON.MISC" }, 97: { 0x7c72376d, "_USERON.TIMEON" }, { 0x7cf488ec, "w2" }, 98: { 0x7d0ed0d1, "_CONSOLE" }, { 0x7dd9aac0, "_USERON.LEECH" }, 99: { 0x7e29c819, "_SYS_MISC" }, { 0x7efd704e, "n1" }, 100: { 0x7fbf958e, "_LNCNTR" }, { 0x81911c52, "s1" }, 101: { 0x82d9484e, "_INETMAIL_COST" }, { 0x82f6983b, "int" }, 102: { 0x8398e4f0, "j2" }, { 0x83aa2a6a, "_LOGONTIME" }, 103: { 0x83dea272, "pasv_mode" }, { 0x841298c4, "d1" }, 104: { 0x86cbce1e, "qwk" }, { 0x89b69753, "_EXPIRED_FLAGS1" }, 105: { 0x89c91dc8, "_USERON.PWMOD" }, { 0x89e82023, "o3" }, 106: { 0x8b12ba9d, "_POSTS_READ" }, { 0x8bf8a29a, "status" }, 107: { 0x8c6ba4b5, "x3" }, { 0x8e395209, "_LOGON_FBACKS" }, 108: { 0x908ece53, "_USERON.NUMBER" }, { 0x90f31162, "n3" }, 109: { 0x90fc82b4, "_CID" }, { 0x9154f82b, "logfile" }, 110: { 0x92fb364f, "_USERON.CDT" }, { 0x94d59a7a, "_USERON.BIRTH" }, 111: { 0x951341ab, "_USERON.FLAGS1" }, { 0x957095f4, "y3" }, 112: { 0x965b713b, "end" }, { 0x979ef1de, "_USERON.HANDLE" }, 113: { 0x97f99eef, "_ONLINE" }, { 0x988a2d13, "r1" }, 114: { 0x9a13bf95, "_USERON.ETODAY" }, { 0x9a7d9cca, "_LEECH_SEC" }, 115: { 0x9a83d5b1, "k2" }, { 0x9aab7a61, "len" }, { 0x9c0bdace, "date" }, 116: { 0x9c5051c9, "_LOGON_POSTS" }, { 0x9d09a985, "e1" }, 117: { 0x9e70e855, "_USERON.SEX" }, { 0x9e7638c7, "logonlst" }, 118: { 0xa0023a2e, "_STARTUP_OPTIONS" }, { 0xa15faa1f, "mode" }, 119: { 0xa1f0fcb7, "_NODE_SCRNBLANK" }, { 0xa278584f, "_NEW_MISC" }, 120: { 0xa2c573e0, "l3" }, { 0xa3b36a04, "d" }, 121: { 0xa4a51044, "bbs_name" }, { 0xa842c43b, "_USERON.ADDRESS" }, 122: { 0xa8b5b733, "i2" }, { 0xaa05262f, "h" }, { 0xaabc4f91, "p1" }, 123: { 0xabb91f93, "_USERON.DLB" }, { 0xabc4317e, "_USERON.PROT" }, 124: { 0xac58736f, "_LOGON_ULS" }, { 0xac72c50b, "_USERON.TEXTRA" }, 125: { 0xad1a21f0, "hash_mode" }, { 0xad68e236, "l" }, 126: { 0xadae1681, "_NODE_IVT" }, { 0xae256560, "_CUR_RATE" }, 127: { 0xae92d249, "_LAST_NS_TIME" }, { 0xaeb16536, "repsize" }, 128: { 0xaf3fcb07, "g1" }, { 0xb17e7914, "_NODE_VALUSER" }, 129: { 0xb1ae8672, "h2" }, { 0xb1bcba28, "_LOGON_DLS" }, 130: { 0xb31b556d, "phone" }, { 0xb3a77ed0, "q1" }, 131: { 0xb3f64be4, "_NEW_SHELL" }, { 0xb50cb889, "_NS_TIME" }, 132: { 0xb624fa46, "f1" }, { 0xb65dd6d4, "_USERON.ULB" }, 133: { 0xb7b2364b, "x" }, { 0xb9603173, "sock" }, { 0xb969be79, "p" }, 134: { 0xba0adba4, "file" }, { 0xba483fc2, "tmp" }, 135: { 0xbb063bfd, "user" }, { 0xbbde42a1, "m3" }, 136: { 0xbc9488d2, "_NEW_FLAGS4" }, { 0xbd1cee5d, "_USERON.LTODAY" }, 137: { 0xbda3fa42, "ascii_mode" }, { 0xbe047a60, "t" }, 138: { 0xbe5dc637, "z3" }, { 0xbef3c427, "dest" }, 139: { 0xbf31a280, "_ANSWERTIME" }, { 0xc0b506dd, "y" }, 140: { 0xc1093f61, "_USERON.DLS" }, { 0xc1ea73f2, "bbs_name_length" }, 141: { 0xc6a9b6e4, "h3" }, { 0xc6e8539d, "_LOGON_ULB" }, 142: { 0xc70d2fc0, "waitforstr" }, { 0xc7e0e8ce, "_USERON.NETMAIL" }, 143: { 0xc82ba467, "_LOGON_EMAILS" }, { 0xc8cd5fb7, "_USERON.COMP" }, 144: { 0xc9034af6, "u" }, { 0xc9082cbd, "_USERON.PTODAY" }, 145: { 0xc95af6a1, "z2" }, { 0xcb530e03, "c1" }, 146: { 0xcc7aca99, "_USERON.NOTE" }, { 0xccd97237, "m2" }, 147: { 0xccfe7c5d, "_NEW_FLAGS1" }, { 0xcdb7e4a9, "_USERON.PASS" }, 148: { 0xce6e8eef, "q" }, { 0xced08a95, "t1" }, 149: { 0xcf9ce02c, "_CDT_MIN_VALUE" }, { 0xd0a99c72, "_USERON.MIN" }, 150: { 0xd2483f42, "b1" }, { 0xd28e9da9, "debug_mode" }, 151: { 0xd3606303, "_USERON.TMPEXT" }, { 0xd3d99e8b, "a" }, 152: { 0xd42ccd08, "buf" }, { 0xd4b45a92, "e" }, { 0xd5c24376, "l2" }, 153: { 0xd7ae3022, "_USERON.FREECDT" }, { 0xd7cbbbd4, "u1" }, 154: { 0xd8222145, "sm" }, { 0xd859385f, "_SYS_DELDAYS" }, 155: { 0xd92803bb, "waitforbuf" }, { 0xda6fd2a0, "m" }, 156: { 0xdb0c9ada, "_LOGON_DLB" }, { 0xdcedf626, "_USERON.ULS" }, 157: { 0xdd0216b9, "i" }, { 0xdd982780, "_SYS_AUTONODE" }, 158: { 0xdf391ca7, "_SYS_LASTNODE" }, { 0xdfb287a5, "i3" }, 159: { 0xe277a562, "y2" }, { 0xe3920695, "result" }, 160: { 0xe51c1956, "_LOGFILE" }, { 0xe558c608, "_INETMAIL_MISC" }, 161: { 0xe579b524, "_USERON.FLAGS4" }, { 0xe5fdd956, "w1" }, 162: { 0xe7a7fb07, "_NODE_NUM" }, { 0xe7f421f4, "n2" }, 163: { 0xeb6c9c73, "_ERRORLEVEL" }, { 0xec2b8fb8, "_USERON.PHONE" }, 164: { 0xed84e527, "k3" }, { 0xedc643f1, "_MAX_QWKMSGS" }, 165: { 0xedf6aa98, "_USERON.SHELL" }, { 0xf000aa78, "_USERON.ZIPCODE" }, 166: { 0xf16182e9, "files" }, { 0xf19cd046, "_WORDWRAP" }, 167: { 0xf3f1da99, "password" }, { 0xf49fd466, "j3" }, 168: { 0xf53db6c7, "_NODE_SCRNLEN" }, { 0xf6e36607, "src" }, 169: { 0xf8e53990, "pass" }, { 0xf9656c81, "a1" }, 170: { 0xf9dc63dc, "_EXPIRED_FLAGS4" }, { 0xfa387529, "filename" }, 171: { 0xfad17b8e, "flen" }, { 0xfb394e27, "_EXPIRED_LEVEL" }, 172: { 0xfb6c9423, "x2" }, { 0xfcb5b274, "_CDT_PER_DOLLAR" }, 173: { 0xfce6e817, "v1" }, { 0xfcf3542e, "_MIN_DSPACE" }, 174: { 0xfd4b63d7, "htmlfile" }, { 0xfed3115d, "_USERON.REST" }, 175: { 0xfeef10b5, "o2" }, 176: }; 177: 178: #define members(x) (sizeof(x)/sizeof(x[0])) 179: 180: const char *char_table="________________________________________________123456789!_______BCDEFGHIJKLMNOPQRSTUVWXYZ0____A________________________________________________________________________________________________________________________________________________________________"; 181: const char *first_char_table="_________________________________________________________________BCDEFGHIJKLMNOPQRSTUVWXYZ!____A________________________________________________________________________________________________________________________________________________________________"; 182: unsigned char *brute_buf=NULL; 1.1.1.2 ! root 183: uint32_t *brute_crc_buf=NULL; 1.1 root 184: size_t brute_len=0; 185: char **bruted=NULL; 186: size_t bruted_len=0; 187: char **badbruted=NULL; 188: size_t badbruted_len=0; 189: 190: void add_bruted(unsigned long name, char good, char *val, int save) 191: { 192: char **new_bruted; 193: char *p; 194: FILE *cache; 195: 196: bruted_len++; 197: p=(char *)malloc(strlen(val)+6); 198: if(p==NULL) 199: return; 200: new_bruted=realloc(bruted, sizeof(char *)*bruted_len); 201: if(new_bruted==NULL) { 202: free(p); 203: return; 204: } 1.1.1.2 ! root 205: *(int32_t *)p=name; 1.1 root 206: p[4]=good; 207: strcpy(p+5,val); 208: new_bruted[bruted_len-1]=p; 209: bruted=new_bruted; 210: if(*val && save) { 211: cache=fopen("unbaja.brute","a"); 212: if(cache!=NULL) { 213: fprintf(cache,"%08x,%hhd,%s\n",name,good,val); 214: fclose(cache); 215: } 216: } 217: } 218: 219: int check_bruted(long name,char *val) 220: { 221: int i; 222: 223: for(i=0; i<bruted_len; i++) { 1.1.1.2 ! root 224: if(*(int32_t *)bruted[i]==name) { 1.1 root 225: if(!strcmp(val,bruted[i]+5)) 226: return(*(bruted[i]+4)); 227: } 228: } 229: return(2); 230: } 231: 232: char *find_bruted(long name) 233: { 234: int i; 235: 236: for(i=0; i<bruted_len; i++) { 1.1.1.2 ! root 237: if(*(int32_t *)bruted[i]==name && *(bruted[i]+4)) 1.1 root 238: return(bruted[i]+5); 239: } 240: return(NULL); 241: } 242: 243: char* bruteforce(unsigned long name) 244: { 1.1.1.2 ! root 245: uint32_t this_crc=0; 1.1 root 246: char *ret; 247: int counter=0; 248: unsigned char *pos; 249: size_t l=0; 1.1.1.2 ! root 250: size_t i; 1.1 root 251: 252: if(!brute_len) 253: return(NULL); 254: if((ret=find_bruted(name))!=NULL) { 255: if(!(*ret)) 256: return(NULL); 257: return(ret); 258: } 259: memset(brute_buf,0,brute_len+1); 1.1.1.2 ! root 260: memset(brute_crc_buf,0,brute_len*sizeof(int32_t)); 1.1 root 261: printf("Brute forcing var_%08x\n",name); 1.1.1.2 ! root 262: this_crc=crc32((char *)brute_buf,0); 1.1 root 263: for(;;) { 264: pos=brute_buf+l; 265: if(pos>brute_buf) { 266: pos--; 267: while(pos>brute_buf) { 268: if(*pos!='9') { /* last char from more_chars */ 269: *pos=char_table[*pos]; 270: pos++; 271: i=(size_t)(pos-brute_buf); 272: memset(pos,'_',l-i); 273: /* Calculate all the following CRCs */ 274: for(i--;brute_buf[i];i++) 275: brute_crc_buf[i]=ucrc32(brute_buf[i],brute_crc_buf[i-1]); 276: goto LOOP_END; 277: } 278: else 279: pos--; 280: } 281: } 282: if(*pos=='Z' || *pos==0) { /* last char from first_chars */ 283: /* This the max? */ 284: if(l==brute_len) { 285: printf("\r%s Not found.\n",brute_buf); 286: add_bruted(name,1,"",0); 287: return(NULL); 288: } 289: /* Set string to '_' with one extra at end */ 290: memset(brute_buf,'_',++l); 291: brute_crc_buf[0]=ucrc32(brute_buf[0],~0UL); 292: for(i=1;brute_buf[i];i++) 293: brute_crc_buf[i]=ucrc32(brute_buf[i],brute_crc_buf[i-1]); 294: /* String is pre-filled with zeros so no need to terminate */ 295: goto LOOP_END; 296: } 297: *pos=first_char_table[*pos]; 298: memset(brute_buf+1,'_',l-1); 299: brute_crc_buf[0]=ucrc32(brute_buf[0],~0UL); 300: for(i=1;brute_buf[i];i++) 301: brute_crc_buf[i]=ucrc32(brute_buf[i],brute_crc_buf[i-1]); 302: 303: LOOP_END: 304: this_crc=~(brute_crc_buf[l-1]); 305: if(this_crc==name) { 306: switch(check_bruted(name,brute_buf)) { 307: case 0: 308: break; 309: case 2: 310: add_bruted(name,1,brute_buf,1); 311: case 1: 312: goto BRUTE_DONE; 313: } 314: if(check_bruted(name,brute_buf)) 315: break; 316: } 317: if(!((++counter)%10000)) 318: printf("\r%s ",brute_buf); 319: } 320: 321: BRUTE_DONE: 322: printf("\r%s Found!\n",brute_buf); 323: return(brute_buf); 324: } 325: 326: /* comparison function for var_table */ 327: static int vt_compare(const void *key, const void *table) { 1.1.1.2 ! root 328: if (*(uint32_t *)key == (*(struct var_table_t *)table).crc) return 0; ! 329: if (*(uint32_t *)key < (*(struct var_table_t *)table).crc) return -1; 1.1 root 330: return 1; 331: } 332: 333: char *getvar(long name) 334: { 335: static char varname[20]; 336: struct var_table_t *found; 337: char *brute; 338: 339: found = (struct var_table_t *)bsearch( &name, var_table, members( var_table ), 340: sizeof( struct var_table_t ), vt_compare ); 341: 342: if (found) { 343: strcpy( varname, (*found).var ); 344: } else { 345: brute=bruteforce(name); 346: if(brute) 347: strcpy(varname,brute); 348: else 349: sprintf(varname,"var_%08x",name); 350: } 351: 352: return(varname); 353: } 354: 355: void write_var(FILE *bin, char *src) 356: { 1.1.1.2 ! root 357: int32_t lng; 1.1 root 358: 359: fread(&lng, 1, 4, bin); 360: sprintf(strchr(src,0),"%s ",getvar(lng)); 361: } 362: 363: void write_cstr(FILE *bin, char *src) 364: { 365: uchar ch; 366: char* p; 367: 368: strcat(src,"\""); 369: while(fread(&ch,1,1,bin)==1) { 370: if(ch==0) 371: break; 372: if((p=c_escape_char(ch))!=NULL) 373: sprintf(strchr(src,0),"%s",p); 374: else if(ch<' ' || ch > 126) 375: sprintf(strchr(src,0), "\\%03d", ch); 376: else 377: sprintf(strchr(src,0), "%c", ch); 378: } 379: strcat(src,"\" "); 380: } 381: 382: void write_lng(FILE *bin, char *src) 383: { 1.1.1.2 ! root 384: int32_t lng; 1.1 root 385: 386: fread(&lng,4,1,bin); 387: sprintf(strchr(src,0),"%ld ",lng); 388: } 389: 390: void write_short(FILE *bin, char *src) 391: { 1.1.1.2 ! root 392: int16_t sht; 1.1 root 393: 394: fread(&sht,2,1,bin); 395: sprintf(strchr(src,0),"%d ",sht); 396: } 397: 398: void write_ushort(FILE *bin, char *src) 399: { 1.1.1.2 ! root 400: uint16_t sht; 1.1 root 401: 402: fread(&sht,2,1,bin); 403: sprintf(strchr(src,0),"%d ",sht); 404: } 405: 406: void write_ch(FILE *bin, char *src) 407: { 408: char ch; 409: 410: fread(&ch,1,1,bin); 411: sprintf(strchr(src,0),"%c ",ch); 412: } 413: 414: void write_uchar(FILE *bin, char *src) 415: { 416: uchar uch; 417: 418: fread(&uch,1,1,bin); 419: sprintf(strchr(src,0),"%u ",uch); 420: } 421: 422: void write_logic(FILE *bin, char *src) 423: { 424: char ch; 425: fread(&ch,1,1,bin); 426: if(ch==LOGIC_TRUE) 427: strcat(src,"TRUE "); 428: else 429: strcat(src,"FALSE "); 430: } 431: 432: int write_key(FILE *bin, char *src, int keyset) 433: { 434: uchar uch; 435: fread(&uch,1,1,bin); 436: if(uch==0 && keyset) 437: return(uch); 438: if(uch==CS_DIGIT) 439: strcat(src,"DIGIT"); 440: else if(uch==CS_EDIGIT) 441: strcat(src,"EDIGIT"); 442: else if(uch==CR) 443: strcat(src,"\\r"); 444: else if(uch==LF) 445: strcat(src,"\\n"); 446: else if(uch==TAB) 447: strcat(src,"\\t"); 448: else if(uch==BS) 449: strcat(src,"\\b"); 450: else if(uch==BEL) 451: strcat(src,"\\a"); 452: else if(uch==FF) 453: strcat(src,"\\f"); 454: else if(uch==11) 455: strcat(src,"\\v"); 456: else if(uch & 0x80) 457: sprintf(strchr(src,0),"/%c",uch&0x7f); 458: else if(uch < ' ') 459: sprintf(strchr(src,0),"^%c",uch+0x40); 460: else if(uch=='\\') 461: strcat(src,"'\\'"); 462: else if(uch=='^') 463: strcat(src,"'^'"); 464: else if(uch=='/') 465: strcat(src,"'/'"); 466: else if(uch=='\'') 467: strcat(src,"\\'"); 468: else 469: sprintf(strchr(src,0),"%c",uch); 470: if(!keyset) 471: strcat(src," "); 472: return(uch);; 473: } 474: 475: void write_keys(FILE *bin, char *src) 476: { 477: while(write_key(bin,src,TRUE)); 478: strcat(src," "); 479: } 480: 481: void eol(char *src) 482: { 483: char *p; 484: p=strchr(src,0); 485: p--; 486: *p='\n'; 487: indent+=indenteol; 488: indenteol=0; 489: } 490: 491: #define WRITE_NAME(name) if(indent<0) indent=0; \ 492: sprintf(strchr(src,0),"%.*s"name" ",indent,"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t") \ 493: /* printf("%s\n",name) */ 494: 495: 496: #define KEYS(name) WRITE_NAME(name); \ 497: write_keys(bin,src); \ 498: eol(src); \ 499: break 500: 501: #define KEY(name) WRITE_NAME(name); \ 502: write_key(bin,src,FALSE); \ 503: eol(src); \ 504: break 505: 506: #define LGC(name) WRITE_NAME(name); \ 507: write_logic(bin,src); \ 508: eol(src); \ 509: break 510: 511: #define NONE(name) WRITE_NAME(name); \ 512: eol(src); \ 513: break 514: 515: #define VAR(name) WRITE_NAME(name); \ 516: write_var(bin,src); \ 517: eol(src); \ 518: break 519: 520: #define CH(name) WRITE_NAME(name); \ 521: write_ch(bin,src); \ 522: eol(src); \ 523: break 524: 525: #define CHCH(name) WRITE_NAME(name); \ 526: write_ch(bin,src); \ 527: write_ch(bin,src); \ 528: eol(src); \ 529: break 530: 531: #define UCH(name) WRITE_NAME(name); \ 532: write_uchar(bin,src); \ 533: eol(src); \ 534: break 535: 536: #define UCHUCH(name) WRITE_NAME(name); \ 537: write_uchar(bin,src); \ 538: write_uchar(bin,src); \ 539: eol(src); \ 540: break 541: 542: #define SHT(name) WRITE_NAME(name); \ 543: write_short(bin,src); \ 544: eol(src); \ 545: break 546: 547: 548: #define LNG(name) WRITE_NAME(name); \ 549: write_lng(bin,src); \ 550: eol(src); \ 551: break 552: 553: #define STR(name) WRITE_NAME(name); \ 554: write_cstr(bin,src); \ 555: eol(src); \ 556: break 557: 558: #define VARVAR(name) WRITE_NAME(name); \ 559: write_var(bin,src); \ 560: write_var(bin,src); \ 561: eol(src); \ 562: break 563: 564: #define VARUCH(name) WRITE_NAME(name); \ 565: write_var(bin,src); \ 566: write_uchar(bin,src); \ 567: eol(src); \ 568: break 569: 570: #define VARVARVAR(name) WRITE_NAME(name); \ 571: write_var(bin,src); \ 572: write_var(bin,src); \ 573: write_var(bin,src); \ 574: eol(src); \ 575: break 576: 577: #define VARSTR(name) WRITE_NAME(name); \ 578: write_var(bin,src); \ 579: write_cstr(bin,src); \ 580: eol(src); \ 581: break 582: 583: #define VARLNG(name) WRITE_NAME(name); \ 584: write_var(bin,src); \ 585: write_lng(bin,src); \ 586: eol(src); \ 587: break 588: 589: #define MUCH(name) WRITE_NAME(name); \ 590: if(usevar) { \ 591: sprintf(strchr(src,0),"%s ",getvar(var)); \ 592: usevar=FALSE; \ 593: fread(buf,1,1,bin); \ 594: } else { \ 595: write_uchar(bin,src); \ 596: } \ 597: eol(src); \ 598: break 599: 600: #define MSHT(name) WRITE_NAME(name); \ 601: if(usevar) { \ 602: sprintf(strchr(src,0),"%s ",getvar(var)); \ 603: usevar=FALSE; \ 604: fread(buf,2,1,bin); \ 605: } else { \ 606: write_short(bin,src); \ 607: } \ 608: eol(src); \ 609: break 610: 611: #define MVARLNG(name) WRITE_NAME(name); \ 612: write_var(bin,src); \ 613: if(usevar) { \ 614: sprintf(strchr(src,0),"%s ",getvar(var)); \ 615: usevar=FALSE; \ 616: fread(buf,4,1,bin); \ 617: } else { \ 618: write_lng(bin,src); \ 619: } \ 620: eol(src); \ 621: break 622: 623: #define MVARSHTUCH(name) WRITE_NAME(name); \ 624: write_var(bin,src); \ 625: write_short(bin,src); \ 626: if(usevar) { \ 627: sprintf(strchr(src,0),"%s ",getvar(var)); \ 628: usevar=FALSE; \ 629: fread(buf,1,1,bin); \ 630: } else { \ 631: write_uchar(bin,src); \ 632: } \ 633: eol(src); \ 634: break 635: 636: #define MVARSHT(name) WRITE_NAME(name); \ 637: write_var(bin,src); \ 638: if(usevar) { \ 639: sprintf(strchr(src,0),"%s ",getvar(var)); \ 640: usevar=FALSE; \ 641: fread(buf,2,1,bin); \ 642: } else { \ 643: write_short(bin,src); \ 644: } \ 645: eol(src); \ 646: break 647: 648: #define MVARUCH(name) WRITE_NAME(name); \ 649: write_var(bin,src); \ 650: if(usevar) { \ 651: sprintf(strchr(src,0),"%s ",getvar(var)); \ 652: usevar=FALSE; \ 653: fread(buf,1,1,bin); \ 654: } else { \ 655: write_uchar(bin,src); \ 656: } \ 657: eol(src); \ 658: break 659: 660: #define MVARVARNZUST(name) WRITE_NAME(name); \ 661: write_var(bin,src); \ 662: write_var(bin,src); \ 663: if(usevar) { \ 664: sprintf(strchr(src,0),"%s ",getvar(var)); \ 665: usevar=FALSE; \ 666: fread(buf,2,1,bin); \ 667: } else { \ 668: fread(&ush, 2, 1, bin); \ 669: if(ush) \ 670: sprintf(strchr(src,0),"%u ",ush); \ 671: } \ 672: eol(src); \ 673: break 674: 675: #define MVARVARUST(name) WRITE_NAME(name); \ 676: write_var(bin,src); \ 677: write_var(bin,src); \ 678: if(usevar) { \ 679: sprintf(strchr(src,0),"%s ",getvar(var)); \ 680: usevar=FALSE; \ 681: fread(buf,2,1,bin); \ 682: } else { \ 683: write_ushort(bin,src); \ 684: } \ 685: eol(src); \ 686: break 687: 688: #define MVARUSTVAR(name) WRITE_NAME(name); \ 689: write_var(bin,src); \ 690: if(usevar) { \ 691: sprintf(strchr(src,0),"%s ",getvar(var)); \ 692: usevar=FALSE; \ 693: fread(buf,2,1,bin); \ 694: } else { \ 695: write_ushort(bin,src); \ 696: } \ 697: write_var(bin,src); \ 698: eol(src); \ 699: break 700: 701: #define MVARUSTSTR(name) WRITE_NAME(name); \ 702: write_var(bin,src); \ 703: if(usevar) { \ 704: sprintf(strchr(src,0),"%s ",getvar(var)); \ 705: usevar=FALSE; \ 706: fread(buf,2,1,bin); \ 707: } else { \ 708: write_ushort(bin,src); \ 709: } \ 710: write_cstr(bin,src); \ 711: eol(src); \ 712: break 713: 714: #define MLNG(name) WRITE_NAME(name); \ 715: if(usevar) { \ 716: sprintf(strchr(src,0),"%s ",getvar(var)); \ 717: usevar=FALSE; \ 718: fread(buf,4,1,bin); \ 719: } else { \ 720: write_lng(bin,src); \ 721: } \ 722: eol(src); \ 723: break 724: 725: #define MLNGVAR(name) WRITE_NAME(name); \ 726: if(usevar) { \ 727: sprintf(strchr(src,0),"%s ",getvar(var)); \ 728: usevar=FALSE; \ 729: fread(buf,4,1,bin); \ 730: } else { \ 731: write_lng(bin,src); \ 732: } \ 733: write_var(bin,src); \ 734: eol(src); \ 735: break 736: 737: #define MSHTSTR(name) WRITE_NAME(name); \ 738: if(usevar) { \ 739: sprintf(strchr(src,0),"%s ",getvar(var)); \ 740: usevar=FALSE; \ 741: fread(buf,2,1,bin); \ 742: } else { \ 743: write_short(bin,src); \ 744: } \ 745: write_cstr(bin,src); \ 746: eol(src); \ 747: break 748: 749: #define MLNGSTR(name) WRITE_NAME(name); \ 750: if(usevar) { \ 751: sprintf(strchr(src,0),"%s ",getvar(var)); \ 752: usevar=FALSE; \ 753: fread(buf,4,1,bin); \ 754: } else { \ 755: write_lng(bin,src); \ 756: } \ 757: write_cstr(bin,src); \ 758: eol(src); \ 759: break 760: 761: #define MVARLNGLNG(name) WRITE_NAME(name); \ 762: write_var(bin,src); \ 763: if(usevar) { \ 764: sprintf(strchr(src,0),"%s ",getvar(var)); \ 765: usevar=FALSE; \ 766: fread(buf,4,1,bin); \ 767: } else { \ 768: write_lng(bin,src); \ 769: } \ 770: write_lng(bin,src); \ 771: eol(src); \ 772: break 773: 774: #define MVARUCHLNG(name) WRITE_NAME(name); \ 775: write_var(bin,src); \ 776: if(usevar) { \ 777: sprintf(strchr(src,0),"%s ",getvar(var)); \ 778: usevar=FALSE; \ 779: fread(buf,1,1,bin); \ 780: } else { \ 781: write_uchar(bin,src); \ 782: } \ 783: write_lng(bin,src); \ 784: eol(src); \ 785: break 786: 787: #define MVARCH(name) WRITE_NAME(name); \ 788: write_var(bin,src); \ 789: if(usevar) { \ 790: sprintf(strchr(src,0),"%s ",getvar(var)); \ 791: usevar=FALSE; \ 792: fread(buf,1,1,bin); \ 793: } else { \ 794: write_ch(bin,src); \ 795: } \ 796: eol(src); \ 797: break 798: 799: #define VARSTRVAR(name) WRITE_NAME(name); \ 800: write_var(bin,src); \ 801: write_cstr(bin,src); \ 802: write_var(bin,src); \ 803: eol(src); \ 804: break 805: 806: #define UCHVARSTR(name) WRITE_NAME(name); \ 807: write_uchar(bin,src); \ 808: write_var(bin,src); \ 809: write_cstr(bin,src); \ 810: eol(src); \ 811: break 812: 813: #define UCHVARVAR(name) WRITE_NAME(name); \ 814: write_uchar(bin,src); \ 815: write_var(bin,src); \ 816: write_var(bin,src); \ 817: eol(src); \ 818: break 819: 820: #define UCHVAR(name) WRITE_NAME(name); \ 821: write_uchar(bin,src); \ 822: write_var(bin,src); \ 823: eol(src); \ 824: break 825: 826: #define UCHSTR(name) WRITE_NAME(name); \ 827: write_uchar(bin,src); \ 828: write_cstr(bin,src); \ 829: eol(src); \ 830: break 831: 832: #define CHSTR(name) WRITE_NAME(name); \ 833: write_ch(bin,src); \ 834: write_cstr(bin,src); \ 835: eol(src); \ 836: break 837: 838: #define VARCH(name) WRITE_NAME(name); \ 839: write_var(bin,src); \ 840: write_ch(bin,src); \ 841: eol(src); \ 842: break 843: 844: #define CHVAR(name) WRITE_NAME(name); \ 845: write_ch(bin,src); \ 846: write_var(bin,src); \ 847: eol(src); \ 848: break 849: 850: #define VARVARSHT(name) WRITE_NAME(name); \ 851: write_var(bin,src); \ 852: write_var(bin,src); \ 853: write_short(bin,src);\ 854: eol(src); \ 855: break 856: 857: #define VARVARUST(name) WRITE_NAME(name); \ 858: write_var(bin,src); \ 859: write_var(bin,src); \ 860: write_ushort(bin,src);\ 861: eol(src); \ 862: break 863: 864: char *decompile_ars(uchar *ars, int len) 865: { 866: static char buf[1024]; 867: char *out; 868: uchar *in; 869: uint n; 870: int equals=0; 871: int not=0; 872: 873: out=buf; 874: buf[0]=0; 875: for(in=ars;in<ars+len;in++) { 876: switch(*in) { 877: case AR_NULL: 878: break; 879: case AR_OR: 880: *(out++)='|'; 1.1.1.2 ! root 881: 1.1 root 882: break; 883: case AR_NOT: 884: not=1; 885: break; 886: case AR_EQUAL: 887: equals=1; 888: break; 889: case AR_BEGNEST: 890: if(not) 891: *(out++)='!'; 892: not=0; 893: *(out++)='('; 1.1.1.2 ! root 894: 1.1 root 895: break; 896: case AR_ENDNEST: 897: *(out++)=')'; 1.1.1.2 ! root 898: 1.1 root 899: break; 900: case AR_LEVEL: 901: *(out++)='$'; 902: *(out++)='L'; 1.1.1.2 ! root 903: 1.1 root 904: break; 905: case AR_AGE: 906: *(out++)='$'; 907: *(out++)='A'; 1.1.1.2 ! root 908: 1.1 root 909: break; 910: case AR_BPS: 911: *(out++)='$'; 912: *(out++)='B'; 1.1.1.2 ! root 913: 1.1 root 914: break; 915: case AR_NODE: 916: *(out++)='$'; 917: *(out++)='N'; 1.1.1.2 ! root 918: 1.1 root 919: break; 920: case AR_TLEFT: 921: *(out++)='$'; 922: *(out++)='R'; 1.1.1.2 ! root 923: 1.1 root 924: break; 925: case AR_TUSED: 926: *(out++)='$'; 927: *(out++)='O'; 1.1.1.2 ! root 928: 1.1 root 929: break; 930: case AR_USER: 931: *(out++)='$'; 932: *(out++)='U'; 1.1.1.2 ! root 933: 1.1 root 934: break; 935: case AR_TIME: 936: *(out++)='$'; 937: *(out++)='T'; 1.1.1.2 ! root 938: 1.1 root 939: break; 940: case AR_PCR: 941: *(out++)='$'; 942: *(out++)='P'; 1.1.1.2 ! root 943: 1.1 root 944: break; 945: case AR_FLAG1: 946: *(out++)='$'; 947: *(out++)='F'; 948: *(out++)='1'; 1.1.1.2 ! root 949: 1.1 root 950: break; 951: case AR_FLAG2: 952: *(out++)='$'; 953: *(out++)='F'; 954: *(out++)='2'; 1.1.1.2 ! root 955: 1.1 root 956: break; 957: case AR_FLAG3: 958: *(out++)='$'; 959: *(out++)='F'; 960: *(out++)='3'; 1.1.1.2 ! root 961: 1.1 root 962: break; 963: case AR_FLAG4: 964: *(out++)='$'; 965: *(out++)='F'; 966: *(out++)='4'; 1.1.1.2 ! root 967: 1.1 root 968: break; 969: case AR_EXEMPT: 970: *(out++)='$'; 971: *(out++)='X'; 1.1.1.2 ! root 972: 1.1 root 973: break; 974: case AR_REST: 975: *(out++)='$'; 976: *(out++)='Z'; 1.1.1.2 ! root 977: 1.1 root 978: break; 979: case AR_SEX: 980: *(out++)='$'; 981: *(out++)='S'; 1.1.1.2 ! root 982: 1.1 root 983: break; 984: case AR_UDR: 985: *(out++)='$'; 986: *(out++)='K'; 1.1.1.2 ! root 987: 1.1 root 988: break; 989: case AR_UDFR: 990: *(out++)='$'; 991: *(out++)='D'; 1.1.1.2 ! root 992: 1.1 root 993: break; 994: case AR_EXPIRE: 995: *(out++)='$'; 996: *(out++)='E'; 1.1.1.2 ! root 997: 1.1 root 998: break; 999: case AR_CREDIT: 1000: *(out++)='$'; 1001: *(out++)='C'; 1.1.1.2 ! root 1002: 1.1 root 1003: break; 1004: case AR_DAY: 1005: *(out++)='$'; 1006: *(out++)='W'; 1.1.1.2 ! root 1007: 1.1 root 1008: break; 1009: case AR_ANSI: 1010: if(not) 1011: *(out++)='!'; 1012: not=0; 1013: *(out++)='$'; 1014: *(out++)='['; 1.1.1.2 ! root 1015: 1.1 root 1016: break; 1017: case AR_RIP: 1018: if(not) 1019: *(out++)='!'; 1020: not=0; 1021: *(out++)='$'; 1022: *(out++)='*'; 1.1.1.2 ! root 1023: 1.1 root 1024: break; 1025: case AR_LOCAL: 1026: if(not) 1027: *(out++)='!'; 1028: not=0; 1029: *(out++)='$'; 1030: *(out++)='G'; 1.1.1.2 ! root 1031: 1.1 root 1032: break; 1033: case AR_GROUP: 1034: *(out++)='$'; 1035: *(out++)='M'; 1.1.1.2 ! root 1036: 1.1 root 1037: break; 1038: case AR_SUB: 1039: *(out++)='$'; 1040: *(out++)='H'; 1.1.1.2 ! root 1041: 1.1 root 1042: break; 1043: case AR_LIB: 1044: *(out++)='$'; 1045: *(out++)='I'; 1.1.1.2 ! root 1046: 1.1 root 1047: break; 1048: case AR_DIR: 1049: *(out++)='$'; 1050: *(out++)='J'; 1.1.1.2 ! root 1051: 1.1 root 1052: break; 1053: case AR_EXPERT : 1054: if(not) 1055: *(out++)='!'; 1056: not=0; 1057: *out=0; 1058: strcat(out,"EXPERT"); 1.1.1.2 ! root 1059: out=strchr(out,0); ! 1060: 1.1 root 1061: break; 1062: case AR_SYSOP: 1063: if(not) 1064: *(out++)='!'; 1065: not=0; 1066: *out=0; 1067: strcat(out,"SYSOP"); 1.1.1.2 ! root 1068: out=strchr(out,0); ! 1069: 1.1 root 1070: break; 1071: case AR_QUIET: 1072: if(not) 1073: *(out++)='!'; 1074: not=0; 1075: *out=0; 1076: strcat(out,"QUIET"); 1.1.1.2 ! root 1077: out=strchr(out,0); ! 1078: 1.1 root 1079: break; 1080: case AR_MAIN_CMDS: 1081: *out=0; 1082: strcat(out,"MAIN_CMDS"); 1.1.1.2 ! root 1083: out=strchr(out,0); ! 1084: 1.1 root 1085: break; 1086: case AR_FILE_CMDS: 1087: *out=0; 1088: strcat(out,"FILE_CMDS"); 1.1.1.2 ! root 1089: out=strchr(out,0); ! 1090: 1.1 root 1091: break; 1092: case AR_RANDOM: 1093: *(out++)='$'; 1094: *(out++)='Q'; 1.1.1.2 ! root 1095: 1.1 root 1096: break; 1097: case AR_LASTON: 1098: *(out++)='$'; 1099: *(out++)='Y'; 1.1.1.2 ! root 1100: 1.1 root 1101: break; 1102: case AR_LOGONS: 1103: *(out++)='$'; 1104: *(out++)='V'; 1.1.1.2 ! root 1105: 1.1 root 1106: break; 1107: case AR_WIP: 1108: if(not) 1109: *(out++)='!'; 1110: not=0; 1111: *out=0; 1112: strcat(out,"WIP"); 1.1.1.2 ! root 1113: out=strchr(out,0); ! 1114: 1.1 root 1115: break; 1116: case AR_SUBCODE: 1117: *out=0; 1.1.1.2 ! root 1118: strcat(out,"SUB "); ! 1119: out=strchr(out,0); ! 1120: 1.1 root 1121: break; 1122: case AR_DIRCODE: 1123: *out=0; 1.1.1.2 ! root 1124: strcat(out,"DIR "); ! 1125: out=strchr(out,0); ! 1126: 1.1 root 1127: break; 1128: case AR_OS2: 1129: if(not) 1130: *(out++)='!'; 1131: not=0; 1132: *out=0; 1133: strcat(out,"OS2"); 1.1.1.2 ! root 1134: out=strchr(out,0); ! 1135: 1.1 root 1136: break; 1137: case AR_DOS: 1138: if(not) 1139: *(out++)='!'; 1140: not=0; 1141: *out=0; 1142: strcat(out,"DOS"); 1.1.1.2 ! root 1143: out=strchr(out,0); ! 1144: 1.1 root 1145: break; 1146: case AR_WIN32: 1147: if(not) 1148: *(out++)='!'; 1149: not=0; 1150: *out=0; 1151: strcat(out,"WIN32"); 1.1.1.2 ! root 1152: out=strchr(out,0); ! 1153: 1.1 root 1154: break; 1155: case AR_UNIX: 1156: if(not) 1157: *(out++)='!'; 1158: not=0; 1159: *out=0; 1160: strcat(out,"UNIX"); 1.1.1.2 ! root 1161: out=strchr(out,0); ! 1162: 1.1 root 1163: break; 1164: case AR_LINUX : 1165: if(not) 1166: *(out++)='!'; 1167: not=0; 1168: *out=0; 1169: strcat(out,"LINUX"); 1.1.1.2 ! root 1170: out=strchr(out,0); ! 1171: 1.1 root 1172: break; 1173: case AR_SHELL: 1174: *out=0; 1.1.1.2 ! root 1175: strcat(out,"SHELL "); ! 1176: out=strchr(out,0); ! 1177: 1.1 root 1178: break; 1179: case AR_PROT: 1180: *out=0; 1.1.1.2 ! root 1181: strcat(out,"PROT "); ! 1182: out=strchr(out,0); ! 1183: ! 1184: break; ! 1185: case AR_HOST: ! 1186: *out=0; ! 1187: strcat(out,"HOST "); ! 1188: out=strchr(out,0); ! 1189: ! 1190: break; ! 1191: case AR_IP: ! 1192: *out=0; ! 1193: strcat(out,"IP "); ! 1194: out=strchr(out,0); ! 1195: 1.1 root 1196: break; 1197: case AR_GUEST: 1198: if(not) 1199: *(out++)='!'; 1200: not=0; 1201: *out=0; 1202: strcat(out,"GUEST"); 1.1.1.2 ! root 1203: out=strchr(out,0); ! 1204: 1.1 root 1205: break; 1206: case AR_QNODE: 1207: if(not) 1208: *(out++)='!'; 1209: not=0; 1210: *out=0; 1211: strcat(out,"QNODE"); 1.1.1.2 ! root 1212: out=strchr(out,0); ! 1213: 1.1 root 1214: break; 1215: default: 1.1.1.2 ! root 1216: printf("Error decoding AR: %02Xh, offset: %u\n", *in, in-ars); 1.1 root 1217: return("Unknown ARS String"); 1218: } 1219: switch(*in) { 1220: case AR_TIME: 1221: if(not) 1222: *(out++)='!'; 1223: if(equals) 1224: *(out++)='='; 1225: not=equals=0; 1226: in++; 1227: n=*((short *)in); 1228: in++; 1229: out+=sprintf(out,"%02d:%02d",n/60,n%60); 1230: break; 1231: case AR_AGE: /* byte operands */ 1232: case AR_PCR: 1233: case AR_UDR: 1234: case AR_UDFR: 1235: case AR_NODE: 1236: case AR_LEVEL: 1237: case AR_TLEFT: 1238: case AR_TUSED: 1239: if(not) 1240: *(out++)='!'; 1241: if(equals) 1242: *(out++)='='; 1243: not=equals=0; 1244: in++; 1245: out+=sprintf(out,"%d",*in); 1246: break; 1247: case AR_BPS: /* int operands */ 1248: case AR_MAIN_CMDS: 1249: case AR_FILE_CMDS: 1250: case AR_EXPIRE: 1251: case AR_CREDIT: 1252: case AR_USER: 1253: case AR_RANDOM: 1254: case AR_LASTON: 1255: case AR_LOGONS: 1256: if(not) 1257: *(out++)='!'; 1258: if(equals) 1259: *(out++)='='; 1260: not=equals=0; 1261: in++; 1262: n=*((short *)in); 1263: in++; 1264: out+=sprintf(out,"%d",n); 1265: break; 1266: case AR_GROUP: 1267: case AR_LIB: 1268: case AR_DIR: 1269: case AR_SUB: 1270: if(not) 1271: *(out++)='!'; 1272: if(equals) 1273: *(out++)='='; 1274: not=equals=0; 1275: in++; 1276: n=*((short *)in); 1277: n++; /* convert from to 0 base */ 1278: in++; 1279: out+=sprintf(out,"%d",n); 1280: break; 1281: case AR_SUBCODE: 1282: case AR_DIRCODE: 1283: case AR_SHELL: 1.1.1.2 ! root 1284: case AR_PROT: ! 1285: case AR_HOST: ! 1286: case AR_IP: 1.1 root 1287: if(not) 1288: *(out++)='!'; 1289: if(equals) 1290: *(out++)='='; 1291: not=equals=0; 1292: in++; 1293: n=sprintf(out,"%s ",in); 1294: out+=n; 1295: in+=n-1; 1296: break; 1297: case AR_FLAG1: 1298: case AR_FLAG2: 1299: case AR_FLAG3: 1300: case AR_FLAG4: 1301: case AR_EXEMPT: 1302: case AR_SEX: 1303: case AR_REST: 1304: if(not) 1305: *(out++)='!'; 1306: if(equals) 1307: *(out++)='='; 1308: not=equals=0; 1309: in++; 1310: *(out++)=*in; 1311: break; 1312: } 1313: } 1314: *out=0; 1315: return(buf); 1316: } 1317: 1318: void decompile(FILE *bin, FILE *srcfile) 1319: { 1320: int i; 1321: char ch; 1322: uchar uch; 1323: ushort ush; 1.1.1.2 ! root 1324: int32_t lng; ! 1325: int32_t lng2; 1.1 root 1326: int usevar=FALSE; 1.1.1.2 ! root 1327: uint32_t var=0; 1.1 root 1328: char buf[80]; 1329: char *p; 1330: char src[2048]; 1331: int redo=FALSE; 1332: char *labels; 1333: size_t currpos=0; 1334: 1335: currpos=filelength(fileno(bin)); 1336: labels=(char *)calloc(1,filelength(fileno(bin))); 1337: if(labels==NULL) { 1338: printf("ERROR allocating memory for labels\n"); 1339: return; 1340: } 1341: while(1) { 1342: currpos=ftell(bin); 1343: 1344: if(fread(&uch,1,1,bin)!=1) { 1345: if(redo) 1346: break; 1347: redo=TRUE; 1348: printf("Second pass...\n"); 1349: rewind(bin); 1350: continue; 1351: } 1352: src[0]=0; 1353: if(labels[currpos]) 1354: sprintf(src,":label_%04x\n",currpos); 1355: switch(uch) { 1356: case CS_USE_INT_VAR: 1357: usevar=TRUE; 1358: fread(&var,4,1,bin); 1359: fread(&buf,2,1,bin); /* offset/length */ 1360: continue; 1361: case CS_VAR_INSTRUCTION: 1362: fread(&uch,1,1,bin); 1363: switch(uch) { 1364: case SHOW_VARS: 1365: WRITE_NAME("SHOW_VARS"); 1366: eol(src); 1367: break; 1368: case PRINT_VAR: 1369: VAR("PRINT"); 1370: case VAR_PRINTF: 1371: case VAR_PRINTF_LOCAL: 1372: if(uch==VAR_PRINTF) { 1373: WRITE_NAME("PRINTF"); 1374: } 1375: else { 1376: WRITE_NAME("LPRINTF"); 1377: } 1378: write_cstr(bin,src); 1379: fread(&uch, 1, 1, bin); 1380: for(i=0; i<uch; i++) { 1381: write_var(bin,src); 1382: } 1383: eol(src); 1384: break; 1385: case DEFINE_STR_VAR: 1386: VAR("STR"); 1387: case DEFINE_INT_VAR: 1388: VAR("INT"); 1389: case DEFINE_GLOBAL_STR_VAR: 1390: VAR("GLOBAL_STR"); 1391: case DEFINE_GLOBAL_INT_VAR: 1392: VAR("GLOBAL_INT"); 1393: case SET_STR_VAR: 1394: VARSTR("SET"); 1395: case SET_INT_VAR: 1396: VARLNG("SET"); 1397: case COMPARE_STR_VAR: 1398: VARSTR("COMPARE"); 1399: case COMPARE_INT_VAR: 1400: VARLNG("COMPARE"); 1401: case STRNCMP_VAR: 1402: UCHVARSTR("STRNCMP"); 1403: case STRSTR_VAR: 1404: VARSTR("STRSTR"); 1405: case COMPARE_VARS: 1406: VARVAR("COMPARE"); 1407: case STRNCMP_VARS: 1408: UCHVARVAR("STRNCMP"); 1409: case STRSTR_VARS: 1410: VARVAR("STRSTR"); 1411: case COPY_VAR: 1412: VARVAR("COPY"); 1413: case SWAP_VARS: 1414: VARVAR("SWAP"); 1415: case CAT_STR_VAR: 1416: VARSTR("STRCAT"); 1417: case CAT_STR_VARS: 1418: VARVAR("STRCAT"); 1419: case FORMAT_STR_VAR: 1420: WRITE_NAME("SPRINTF"); 1421: write_var(bin,src); 1422: write_cstr(bin,src); 1423: fread(&uch, 1, 1, bin); 1424: for(i=0; i<uch; i++) { 1425: write_var(bin,src); 1426: } 1427: eol(src); 1428: break; 1429: case TIME_STR: 1430: VARVAR("TIME_STR"); 1431: case DATE_STR: 1432: VARVAR("DATE_STR"); 1433: case FORMAT_TIME_STR: 1434: VARSTRVAR("STRFTIME"); 1435: case SECOND_STR: 1436: VARVAR("SECOND_STR"); 1437: case STRUPR_VAR: 1438: VAR("STRUPR"); 1439: case STRLWR_VAR: 1440: VAR("STRLWR"); 1441: case ADD_INT_VAR: 1442: VARLNG("ADD"); 1443: case ADD_INT_VARS: 1444: VARVAR("ADD"); 1445: case SUB_INT_VAR: 1446: VARLNG("SUB"); 1447: case SUB_INT_VARS: 1448: VARVAR("SUB"); 1449: case MUL_INT_VAR: 1450: VARLNG("MUL"); 1451: case MUL_INT_VARS: 1452: VARVAR("MUL"); 1453: case DIV_INT_VAR: 1454: VARLNG("DIV"); 1455: case DIV_INT_VARS: 1456: VARVAR("DIV"); 1457: case MOD_INT_VAR: 1458: VARLNG("MOD"); 1459: case MOD_INT_VARS: 1460: VARVAR("MOD"); 1461: case AND_INT_VAR: 1462: VARLNG("AND"); 1463: case AND_INT_VARS: 1464: VARVAR("AND"); 1465: case COMPARE_ANY_BITS: 1466: MVARLNG("COMPARE_ANY_BITS"); 1467: case COMPARE_ALL_BITS: 1468: MVARLNG("COMPARE_ALL_BITS"); 1469: case OR_INT_VAR: 1470: VARLNG("OR"); 1471: case OR_INT_VARS: 1472: VARLNG("OR"); 1473: case NOT_INT_VAR: 1474: VARLNG("NOT"); 1475: case NOT_INT_VARS: 1476: VARVAR("NOT"); 1477: case XOR_INT_VAR: 1478: VARLNG("XOR"); 1479: case XOR_INT_VARS: 1480: VARVAR("XOR"); 1481: case RANDOM_INT_VAR: 1482: MVARLNG("RANDOM"); 1483: case TIME_INT_VAR: 1484: VAR("TIME"); 1485: case DATE_STR_TO_INT: 1486: VARVAR("DATE_INT"); 1487: case STRLEN_INT_VAR: 1488: VARVAR("STRLEN"); 1489: case CRC16_TO_INT: 1490: VARVAR("CRC16"); 1491: case CRC32_TO_INT: 1492: VARVAR("CRC32"); 1493: case FLENGTH_TO_INT: 1494: VARVAR("GET_FILE_LENGTH"); 1495: case CHARVAL_TO_INT: 1496: VARVAR("CHARVAL"); 1497: case GETNUM_VAR: 1498: MVARSHT("GETNUM"); 1499: case GETSTR_VAR: 1500: MVARUCH("GETSTR"); 1501: case GETNAME_VAR: 1502: MVARUCH("GETNAME"); 1503: case GETSTRUPR_VAR: 1504: MVARUCH("GETSTRUPR"); 1505: case GETLINE_VAR: 1506: MVARUCH("GETLINE"); 1507: case SHIFT_STR_VAR: 1508: MVARUCH("SHIFT_STR"); 1509: case GETSTR_MODE: 1510: MVARUCHLNG("GETSTR"); 1511: case TRUNCSP_STR_VAR: 1512: VAR("TRUNCSP"); 1513: case CHKFILE_VAR: 1514: VAR("CHKFILE"); 1515: case PRINTFILE_VAR_MODE: 1516: MVARSHT("PRINTFILE"); 1517: case PRINTTAIL_VAR_MODE: 1518: MVARSHTUCH("PRINTTAIL"); 1519: case CHKSUM_TO_INT: 1520: VARVAR("CHKSUM"); 1521: case STRIP_CTRL_STR_VAR: 1522: VAR("STRIP_CTRL"); 1523: case SEND_FILE_VIA: 1524: CHSTR("SEND_FILE_VIA"); 1525: case SEND_FILE_VIA_VAR: 1526: CHVAR("SEND_FILE_VIA"); 1527: case FTIME_TO_INT: 1528: VARVAR("GET_FILE_TIME"); 1529: case RECEIVE_FILE_VIA: 1530: CHSTR("RECEIVE_FILE_VIA"); 1531: case RECEIVE_FILE_VIA_VAR: 1532: CHVAR("RECEIVE_FILE_VIA"); 1533: case TELNET_GATE_STR: /* TELNET_GATE reverses argument order */ 1534: WRITE_NAME("TELNET_GATE"); 1535: fread(&lng,4,1,bin); 1536: write_cstr(bin,src); 1537: if(usevar) { 1538: sprintf(strchr(src,0),"%s ",getvar(var)); 1539: usevar=FALSE; 1540: } else { 1541: sprintf(strchr(src,0),"%ld ",lng); 1542: } 1543: eol(src); 1544: break; 1545: case TELNET_GATE_VAR: /* TELNET_GATE reverses argument order */ 1546: WRITE_NAME("TELNET_GATE"); 1547: fread(&lng,4,1,bin); 1548: fread(&lng2, 1, 4, bin); 1549: sprintf(strchr(src,0),"%s ",getvar(lng2)); 1550: if(usevar) { 1551: sprintf(strchr(src,0),"%s ",getvar(var)); 1552: usevar=FALSE; 1553: } else { 1554: sprintf(strchr(src,0),"%ld ",lng); 1555: } 1556: eol(src); 1557: break; 1558: case COPY_FIRST_CHAR: 1559: VARVAR("COPY_FIRST_CHAR"); 1560: case COMPARE_FIRST_CHAR: 1561: VARUCH("COMPARE_FIRST_CHAR"); 1562: case COPY_CHAR: 1563: VAR("COPY_CHAR"); 1564: case SHIFT_TO_FIRST_CHAR: 1565: MVARUCH("SHIFT_TO_FIRST_CHAR"); 1566: case SHIFT_TO_LAST_CHAR: 1567: MVARUCH("SHIFT_TO_LAST_CHAR"); 1568: case MATCHUSER: 1569: VARVAR("MATCHUSER"); 1570: default: 1571: printf("ERROR! Unknown variable-length instruction: %02x%02X\n",CS_VAR_INSTRUCTION,uch); 1572: printf("Cannot continue.\n"); 1573: free(labels); 1574: return; 1575: } 1576: break; 1577: case CS_IF_TRUE: 1578: indenteol=1; 1579: NONE("IF_TRUE"); 1580: case CS_IF_FALSE: 1581: indenteol=1; 1582: NONE("IF_FALSE"); 1583: case CS_ELSE: 1584: indent--; 1585: indenteol=1; 1586: NONE("ELSE"); 1587: case CS_ENDIF: 1588: indent--; 1589: NONE("END_IF"); 1590: case CS_CMD_HOME: 1591: NONE("CMD_HOME"); 1592: case CS_CMD_POP: 1593: NONE("CMD_POP"); 1594: case CS_END_CMD: 1595: indent--; 1596: NONE("END_CMD"); 1597: case CS_RETURN: 1598: NONE("RETURN"); 1599: case CS_GETKEY: 1600: NONE("GETKEY"); 1601: case CS_GETKEYE: 1602: NONE("GETKEYE"); 1603: case CS_UNGETKEY: 1604: NONE("UNGETKEY"); 1605: case CS_UNGETSTR: 1606: NONE("UNGETSTR"); 1607: case CS_PRINTKEY: 1608: NONE("PRINTKEY"); 1609: case CS_PRINTSTR: 1610: NONE("PRINTSTR"); 1611: case CS_HANGUP: 1612: NONE("HANGUP"); 1613: case CS_SYNC: 1614: NONE("SYNC"); 1615: case CS_ASYNC: 1616: NONE("ASYNC"); 1617: case CS_CHKSYSPASS: 1618: NONE("CHKSYSPASS"); 1619: case CS_LOGKEY: 1620: NONE("LOGKEY"); 1621: case CS_LOGKEY_COMMA: 1622: NONE("LOGKEY_COMMA"); 1623: case CS_LOGSTR: 1624: NONE("LOGSTR"); 1625: case CS_CLS: 1626: NONE("CLS"); 1627: case CS_CRLF: 1628: NONE("CRLF"); 1629: case CS_PAUSE: 1630: NONE("PAUSE"); 1631: case CS_PAUSE_RESET: 1632: NONE("PAUSE_RESET"); 1633: case CS_GETLINES: 1634: NONE("GETLINES"); 1635: case CS_GETFILESPEC: 1636: NONE("GETFILESPEC"); 1637: case CS_FINDUSER: 1638: NONE("FINDUSER"); 1639: case CS_CLEAR_ABORT: 1640: NONE("CLEAR_ABORT"); 1641: case CS_SELECT_SHELL: 1642: NONE("SELECT_SHELL"); 1643: case CS_SET_SHELL: 1644: NONE("SET_SHELL"); 1645: case CS_SELECT_EDITOR: 1646: NONE("SELECT_EDITOR"); 1647: case CS_SET_EDITOR: 1648: NONE("SET_EDITOR"); 1649: case CS_INKEY: 1650: NONE("INKEY"); 1651: case CS_INCHAR: 1652: NONE("INCHAR"); 1653: case CS_GETTIMELEFT: 1654: NONE("GETTIMELEFT"); 1655: case CS_SAVELINE: 1656: NONE("SAVELINE"); 1657: case CS_RESTORELINE: 1658: NONE("RESTORELINE"); 1659: case CS_IF_GREATER: 1660: indenteol=1; 1661: NONE("IF_GREATER"); 1662: case CS_IF_GREATER_OR_EQUAL: 1663: indenteol=1; 1664: NONE("IF_GREATER_OR_EQUAL"); 1665: case CS_IF_LESS: 1666: indenteol=1; 1667: NONE("IF_LESS"); 1668: case CS_IF_LESS_OR_EQUAL: 1669: indenteol=1; 1670: NONE("IF_LESS_OR_EQUAL"); 1671: case CS_DEFAULT: 1672: indenteol=1; 1673: NONE("DEFAULT"); 1674: case CS_END_SWITCH: 1675: indent--; 1676: NONE("END_SWITCH"); 1677: case CS_END_CASE: 1678: indent--; 1679: NONE("END_CASE"); 1680: case CS_PUT_NODE: 1681: NONE("PUT_NODE"); 1682: case CS_GETCHAR: 1683: NONE("GETCHAR"); 1684: case CS_ONE_MORE_BYTE: 1685: fread(&uch,1,1,bin); 1686: switch(uch) { 1687: case CS_ONLINE: 1688: NONE("ONLINE"); 1689: case CS_OFFLINE: 1690: NONE("OFFLINE"); 1691: case CS_NEWUSER: 1692: NONE("NEWUSER"); 1693: case CS_LOGON: 1694: NONE("LOGON"); 1695: case CS_LOGOUT: 1696: NONE("LOGOUT"); 1697: case CS_EXIT: 1698: NONE("EXIT"); 1699: case CS_LOOP_BEGIN: 1700: indenteol=1; 1701: NONE("LOOP_BEGIN"); 1702: case CS_CONTINUE_LOOP: 1703: NONE("CONTINUE_LOOP"); 1704: case CS_BREAK_LOOP: 1705: NONE("BREAK_LOOP"); 1706: case CS_END_LOOP: 1707: indent--; 1708: NONE("END_LOOP"); 1709: default: 1710: printf("ERROR! Unknown one-byte instruction: %02x%02X\n",CS_ONE_MORE_BYTE,uch); 1711: } 1712: break; 1713: case CS_CMDKEY: 1714: indenteol=1; 1715: KEY("CMDKEY"); 1716: case CS_NODE_ACTION: 1717: MUCH("NODE_ACTION"); 1718: case CS_GETSTR: 1719: MUCH("GETSTR"); 1720: case CS_GETNAME: 1721: MUCH("GETNAME"); 1722: case CS_GETSTRUPR: 1723: MUCH("GETSTRUPR"); 1724: case CS_SHIFT_STR: 1725: MUCH("SHIFT_STR"); 1726: case CS_COMPARE_KEY: 1727: KEY("COMPARE_KEY"); 1728: case CS_SETLOGIC: 1729: LGC("SETLOGIC"); 1730: case CS_SET_USER_LEVEL: 1731: MUCH("SET_USER_LEVEL"); 1732: case CS_SET_USER_STRING: 1733: MUCH("SET_USER_STRING"); 1734: case CS_GETLINE: 1735: MUCH("GETLINE"); 1736: case CS_NODE_STATUS: 1737: MUCH("NODE_STATUS"); 1738: case CS_CMDCHAR: 1739: indenteol=1; 1740: CH("CMDCHAR"); 1741: case CS_COMPARE_CHAR: 1742: CH("COMPARE_CHAR"); 1743: case CS_MULTINODE_CHAT: 1744: MUCH("MULTINODE_CHAT"); 1745: case CS_TWO_MORE_BYTES: 1746: fread(&uch,1,1,bin); 1747: switch(uch) { 1748: case CS_USER_EVENT: 1749: MUCH("USER_EVENT"); 1750: default: 1751: printf("ERROR! Unknown two-byte instruction: %02x%02X\n",CS_ONE_MORE_BYTE,uch); 1752: } 1753: break; 1754: case CS_GOTO: 1755: fread(&ush,2,1,bin); 1756: labels[ush]=TRUE; 1757: WRITE_NAME("GOTO"); 1758: sprintf(strchr(src,0),"label_%04x ",ush); 1759: eol(src); 1760: break; 1761: case CS_CALL: 1762: fread(&ush,2,1,bin); 1763: labels[ush]=TRUE; 1764: WRITE_NAME("CALL"); 1765: sprintf(strchr(src,0),"label_%04x ",ush); 1766: eol(src); 1767: break; 1768: case CS_TOGGLE_NODE_MISC: 1769: MSHT("TOGGLE_NODE_MISC"); 1770: case CS_ADJUST_USER_CREDITS: 1771: MSHT("ADJUST_USER_CREDITS"); 1772: case CS_TOGGLE_USER_FLAG: 1773: CHCH("TOGGLE_USER_FLAG"); 1774: case CS_GETNUM: 1775: MSHT("GETNUM"); 1776: case CS_COMPARE_NODE_MISC: 1777: MSHT("COMPARE_NODE_MISC"); 1778: case CS_MSWAIT: 1779: MSHT("MSWAIT"); 1780: case CS_ADJUST_USER_MINUTES: 1781: MSHT("ADJUST_USER_MINUTES"); 1782: case CS_REVERT_TEXT: 1783: MSHT("REVERT_TEXT"); 1784: case CS_THREE_MORE_BYTES: 1785: printf("ERROR! I dont know anything about CS_THREE_MORE_BYTES.\n"); 1786: printf("Cannot continue.\n"); 1787: free(labels); 1788: return; 1789: case CS_MENU: 1790: STR("MENU"); 1791: case CS_PRINT: 1792: STR("PRINT"); 1793: case CS_PRINT_LOCAL: 1794: STR("PRINT_LOCAL"); 1795: case CS_PRINT_REMOTE: 1796: STR("PRINT_REMOTE"); 1797: case CS_PRINTFILE: 1798: STR("PRINTFILE"); 1799: case CS_PRINTFILE_LOCAL: 1800: STR("PRINTFILE_LOCAL"); 1801: case CS_PRINTFILE_REMOTE: 1802: STR("PRINTFILE_REMOTE"); 1803: case CS_YES_NO: 1804: STR("YES_NO"); 1805: case CS_NO_YES: 1806: STR("NO_YES"); 1807: case CS_COMPARE_STR: 1808: STR("COMPARE_STR"); 1809: case CS_COMPARE_WORD: 1810: STR("COMPARE_WORD"); 1811: case CS_EXEC: 1812: STR("EXEC"); 1813: case CS_EXEC_INT: 1814: STR("EXEC_INT"); 1815: case CS_EXEC_BIN: 1816: STR("EXEC_BIN"); 1817: case CS_EXEC_XTRN: 1818: STR("EXEC_XTRN"); 1819: case CS_GETCMD: 1820: STR("GETCMD"); 1821: case CS_LOG: 1822: STR("LOG"); 1823: case CS_MNEMONICS: 1824: STR("MNEMONICS"); 1825: case CS_SETSTR: 1826: STR("SETSTR"); 1827: case CS_SET_MENU_DIR: 1828: STR("SET_MENU_DIR"); 1829: case CS_SET_MENU_FILE: 1830: STR("SET_MENU_FILE"); 1831: case CS_CMDSTR: 1832: indenteol=1; 1833: STR("CMDSTR"); 1834: case CS_CHKFILE: 1835: STR("CHKFILE"); 1836: case CS_GET_TEMPLATE: 1837: STR("GET_TEMPLATE"); 1838: case CS_TRASHCAN: 1839: STR("TRASHCAN"); 1840: case CS_CREATE_SIF: 1841: STR("CREATE_SIF"); 1842: case CS_READ_SIF: 1843: STR("READ_SIF"); 1844: case CS_CMDKEYS: 1845: indenteol=1; 1846: KEYS("CMDKEYS"); 1847: case CS_COMPARE_KEYS: 1848: KEYS("COMPARE_KEYS"); 1849: case CS_STR_FUNCTION: 1850: fread(&uch,1,1,bin); 1851: switch(uch) { 1852: case CS_LOGIN: 1853: STR("LOGIN"); 1854: case CS_LOAD_TEXT: 1855: STR("LOAD_TEXT"); 1856: default: 1857: printf("ERROR! Unknown string instruction: %02x%02X\n",CS_STR_FUNCTION,uch); 1858: ch=0; 1859: while(ch) fread(&ch,1,1,bin); 1860: } 1861: break; 1862: case CS_COMPARE_ARS: 1863: fread(&uch,1,1,bin); 1864: p=(char *)malloc(uch); 1865: fread(p,uch,1,bin); 1866: WRITE_NAME("COMPARE_ARS"); 1867: sprintf(strchr(src,0),"%s\n",decompile_ars((uchar*)p,uch)); 1868: free(p); 1869: break; 1870: case CS_TOGGLE_USER_MISC: 1871: MLNG("TOGGLE_USER_MISC"); 1872: case CS_COMPARE_USER_MISC: 1873: MLNG("COMPARE_USER_MISC"); 1874: case CS_REPLACE_TEXT: 1875: MSHTSTR("REPLACE_TEXT"); 1876: case CS_TOGGLE_USER_CHAT: 1877: MLNG("TOGGLE_USER_CHAT"); 1878: case CS_COMPARE_USER_CHAT: 1879: MLNG("COMPARE_USER_CHAT"); 1880: case CS_TOGGLE_USER_QWK: 1881: MLNG("TOGGLE_USER_QWK"); 1882: case CS_COMPARE_USER_QWK: 1883: MLNG("COMPARE_USER_QWK"); 1884: case CS_SWITCH: 1885: indenteol=1; 1886: VAR("SWITCH"); 1887: case CS_CASE: 1888: indenteol=1; 1889: LNG("CASE"); 1890: case CS_NET_FUNCTION: 1891: fread(&uch,1,1,bin); 1892: switch(uch) { 1893: case CS_SOCKET_OPEN: 1894: VAR("SOCKET_OPEN"); 1895: case CS_SOCKET_CLOSE: 1896: VAR("SOCKET_CLOSE"); 1897: case CS_SOCKET_CONNECT: 1898: MVARVARUST("SOCKET_CONNECT"); 1899: case CS_SOCKET_ACCEPT: 1900: VAR("SOCKET_ACCEPT"); 1901: case CS_SOCKET_NREAD: 1902: VARVAR("SOCKET_NREAD"); 1903: case CS_SOCKET_PEEK: 1904: MVARVARUST("SOCKET_PEEK"); 1905: case CS_SOCKET_READ: 1906: MVARVARUST("SOCKET_READ"); 1907: case CS_SOCKET_WRITE: 1908: VARVAR("SOCKET_WRITE"); 1909: case CS_SOCKET_CHECK: 1910: VAR("SOCKET_CHECK"); 1911: case CS_SOCKET_READLINE: 1912: MVARVARUST("SOCKET_READLINE"); 1913: case CS_FTP_LOGIN: 1914: VARVARVAR("FTP_LOGIN"); 1915: case CS_FTP_LOGOUT: 1916: VAR("FTP_LOGOUT"); 1917: case CS_FTP_PWD: 1918: VAR("FTP_PWD"); 1919: case CS_FTP_CWD: 1920: VARVAR("FTP_CWD"); 1921: case CS_FTP_DIR: 1922: VARVAR("FTP_DIR"); 1923: case CS_FTP_PUT: 1924: VARVARVAR("FTP_PUT"); 1925: case CS_FTP_GET: 1926: VARVARVAR("FTP_GET"); 1927: case CS_FTP_RENAME: 1928: VARVARVAR("FTP_RENAME"); 1929: case CS_FTP_DELETE: 1930: VARVAR("FTP_DELETE"); 1931: default: 1932: printf("ERROR! Unknown net function %02x%02X\n",CS_NET_FUNCTION,uch); 1933: printf("Cannot continue.\n"); 1934: free(labels); 1935: return; 1936: } 1937: break; 1938: case CS_FIO_FUNCTION: 1939: fread(&uch,1,1,bin); 1940: switch(uch) { 1941: case FIO_OPEN: 1942: MVARUSTSTR("FOPEN"); 1943: case FIO_CLOSE: 1944: VAR("FCLOSE"); 1945: case FIO_READ: 1946: MVARVARNZUST("FREAD"); 1947: case FIO_READ_VAR: 1948: VARVARVAR("FREAD"); 1949: case FIO_WRITE: 1950: MVARVARNZUST("FWRITE"); 1951: case FIO_WRITE_VAR: 1952: VARVARVAR("FWRITE"); 1953: case FIO_GET_LENGTH: 1954: VARVAR("FGET_LENGTH"); 1955: case FIO_EOF: 1956: VAR("FEOF"); 1957: case FIO_GET_POS: 1958: VARVAR("FGET_POS"); 1959: case FIO_SEEK: 1960: WRITE_NAME("FSEEK"); 1961: write_var(bin,src); 1962: write_lng(bin,src); 1963: fread(&ush,2,1,bin); 1964: if(ush==SEEK_CUR) 1965: strcat(src,"CUR "); 1966: else if(ush==SEEK_END) 1967: strcat(src,"END "); 1968: else 1969: sprintf(strchr(src,0), "%d ",ush); 1970: eol(src); 1971: break; 1972: case FIO_SEEK_VAR: 1973: WRITE_NAME("FSEEK"); 1974: write_var(bin,src); 1975: write_var(bin,src); 1976: fread(&ush,2,1,bin); 1977: if(ush==SEEK_CUR) 1978: strcat(src,"CUR "); 1979: else if(ush==SEEK_END) 1980: strcat(src,"END "); 1981: else 1982: sprintf(strchr(src,0), "%d ",ush); 1983: eol(src); 1984: break; 1985: case FIO_LOCK: 1986: VARLNG("FLOCK"); 1987: case FIO_LOCK_VAR: 1988: VARVAR("FLOCK"); 1989: case FIO_UNLOCK: 1990: VARLNG("FUNLOCK"); 1991: case FIO_UNLOCK_VAR: 1992: VARVAR("FUNLOCK"); 1993: case FIO_SET_LENGTH: 1994: VARLNG("FSET_LENGTH"); 1995: case FIO_SET_LENGTH_VAR: 1996: VARVAR("FSET_LENGTH"); 1997: case FIO_PRINTF: 1998: WRITE_NAME("FPRINTF"); 1999: write_var(bin,src); 2000: write_cstr(bin,src); 2001: fread(&uch, 1, 1, bin); 2002: for(i=0; i<uch; i++) { 2003: write_var(bin,src); 2004: } 2005: eol(src); 2006: break; 2007: case FIO_SET_ETX: 2008: MUCH("FSET_ETX"); 2009: case FIO_GET_TIME: 2010: VARVAR("FGET_TIME"); 2011: case FIO_SET_TIME: 2012: VARVAR("FSET_TIME"); 2013: case FIO_OPEN_VAR: 2014: MVARUSTVAR("FOPEN"); 2015: case FIO_READ_LINE: 2016: VARVAR("FREAD_LINE"); 2017: case FIO_FLUSH: 2018: VAR("FFLUSH"); 2019: case REMOVE_FILE: 2020: VAR("REMOVE_FILE"); 2021: case RENAME_FILE: 2022: VARVAR("RENAME_FILE"); 2023: case COPY_FILE: 2024: VARVAR("COPY_FILE"); 2025: case MOVE_FILE: 2026: VARVAR("MOVE_FILE"); 2027: case GET_FILE_ATTRIB: 2028: VARVAR("GET_FILE_ATTRIB"); 2029: case SET_FILE_ATTRIB: 2030: VARVAR("SET_FILE_ATTRIB"); 2031: case MAKE_DIR: 2032: VAR("MAKE_DIR"); 2033: case CHANGE_DIR: 2034: VAR("CHANGE_DIR"); 2035: case REMOVE_DIR: 2036: VAR("REMOVE_DIR"); 2037: case OPEN_DIR: 2038: VARVAR("OPEN_DIR"); 2039: case READ_DIR: 2040: VARVAR("READ_DIR"); 2041: case REWIND_DIR: 2042: VAR("REWIND_DIR"); 2043: case CLOSE_DIR: 2044: VAR("CLOSE_DIR"); 2045: default: 2046: printf("ERROR! Unknown file function %02x%02X\n",CS_FIO_FUNCTION,uch); 2047: printf("Cannot continue.\n"); 2048: free(labels); 2049: return; 2050: } 2051: break; 2052: case CS_MAIL_READ: 2053: NONE("MAIL_READ"); 2054: case CS_MAIL_READ_SENT: 2055: NONE("MAIL_READ_SENT"); 2056: case CS_MAIL_READ_ALL: 2057: NONE("MAIL_READ_ALL"); 2058: case CS_MAIL_SEND: 2059: NONE("MAIL_SEND"); 2060: case CS_MAIL_SEND_BULK: 2061: NONE("MAIL_SEND_BULK"); 2062: case CS_MAIL_SEND_FILE: 2063: NONE("MAIL_SEND_FILE"); 2064: case CS_MAIL_SEND_FEEDBACK: 2065: NONE("MAIL_SEND_FEEDBACK"); 2066: case CS_MAIL_SEND_NETMAIL: 2067: NONE("MAIL_SEND_NETMAIL"); 2068: case CS_MAIL_SEND_NETFILE: 2069: NONE("MAIL_SEND_NETFILE"); 2070: case CS_LOGOFF: 2071: NONE("LOGOFF"); 2072: case CS_LOGOFF_FAST: 2073: NONE("LOGOFF_FAST");; 2074: case CS_AUTO_MESSAGE: 2075: NONE("AUTO_MESSAGE"); 2076: case CS_MSG_SET_AREA: 2077: NONE("MSG_SET_AREA"); 2078: case CS_MSG_SELECT_AREA: 2079: NONE("MSG_SELECT_AREA"); 2080: case CS_MSG_SHOW_GROUPS: 2081: NONE("MSG_SHOW_GROUPS"); 2082: case CS_MSG_SHOW_SUBBOARDS: 2083: NONE("MSG_SHOW_SUBBOARDS");; 2084: case CS_MSG_GROUP_UP: 2085: NONE("MSG_GROUP_UP"); 2086: case CS_MSG_GROUP_DOWN: 2087: NONE("MSG_GROUP_DOWN");; 2088: case CS_MSG_SUBBOARD_UP: 2089: NONE("MSG_SUBBOARD_UP");; 2090: case CS_MSG_SUBBOARD_DOWN: 2091: NONE("MSG_SUBBOARD_DOWN"); 2092: case CS_MSG_GET_SUB_NUM: 2093: NONE("MSG_GET_SUB_NUM"); 2094: case CS_MSG_GET_GRP_NUM: 2095: NONE("MSG_GET_GRP_NUM"); 2096: case CS_MSG_READ: 2097: NONE("MSG_READ"); 2098: case CS_MSG_POST: 2099: NONE("MSG_POST"); 2100: case CS_MSG_QWK: 2101: NONE("MSG_QWK"); 2102: case CS_MSG_PTRS_CFG: 2103: NONE("MSG_PTRS_CFG"); 2104: case CS_MSG_PTRS_REINIT: 2105: NONE("MSG_PTRS_REINIT"); 2106: case CS_MSG_NEW_SCAN_CFG: 2107: NONE("MSG_NEW_SCAN_CFG"); 2108: case CS_MSG_NEW_SCAN: 2109: NONE("MSG_NEW_SCAN"); 2110: case CS_MSG_NEW_SCAN_ALL: 2111: NONE("MSG_NEW_SCAN_ALL"); 2112: case CS_MSG_CONT_SCAN: 2113: NONE("MSG_CONT_SCAN"); 2114: case CS_MSG_CONT_SCAN_ALL: 2115: NONE("MSG_CONT_SCAN_ALL"); 2116: case CS_MSG_BROWSE_SCAN : 2117: NONE("MSG_BROWSE_SCAN "); 2118: case CS_MSG_BROWSE_SCAN_ALL: 2119: NONE("MSG_BROWSE_SCAN_ALL"); 2120: case CS_MSG_FIND_TEXT: 2121: NONE("MSG_FIND_TEXT"); 2122: case CS_MSG_FIND_TEXT_ALL: 2123: NONE("MSG_FIND_TEXT_ALL"); 2124: case CS_MSG_YOUR_SCAN_CFG: 2125: NONE("MSG_YOUR_SCAN_CFG"); 2126: case CS_MSG_YOUR_SCAN: 2127: NONE("MSG_YOUR_SCAN"); 2128: case CS_MSG_YOUR_SCAN_ALL: 2129: NONE("MSG_YOUR_SCAN_ALL"); 2130: case CS_MSG_NEW_SCAN_SUB: 2131: NONE("MSG_NEW_SCAN_SUB"); 2132: case CS_MSG_SET_GROUP: 2133: NONE("MSG_SET_GROUP"); 2134: case CS_MSG_UNUSED4: 2135: NONE("MSG_UNUSED4"); 2136: case CS_MSG_UNUSED3: 2137: NONE("MSG_UNUSED3"); 2138: case CS_MSG_UNUSED2: 2139: NONE("MSG_UNUSED2"); 2140: case CS_MSG_UNUSED1: 2141: NONE("MSG_UNUSED1"); 2142: case CS_FILE_SET_AREA: 2143: NONE("FILE_SET_AREA"); 2144: case CS_FILE_SELECT_AREA: 2145: NONE("FILE_SELECT_AREA"); 2146: case CS_FILE_SHOW_LIBRARIES: 2147: NONE("FILE_SHOW_LIBRARIES"); 2148: case CS_FILE_SHOW_DIRECTORIES: 2149: NONE("FILE_SHOW_DIRECTORIES"); 2150: case CS_FILE_LIBRARY_UP: 2151: NONE("FILE_LIBRARY_UP"); 2152: case CS_FILE_LIBRARY_DOWN: 2153: NONE("FILE_LIBRARY_DOWN"); 2154: case CS_FILE_DIRECTORY_UP: 2155: NONE("FILE_DIRECTORY_UP"); 2156: case CS_FILE_DIRECTORY_DOWN: 2157: NONE("FILE_DIRECTORY_DOWN"); 2158: case CS_FILE_GET_DIR_NUM: 2159: NONE("FILE_GET_DIR_NUM"); 2160: case CS_FILE_GET_LIB_NUM: 2161: NONE("FILE_GET_LIB_NUM"); 2162: case CS_FILE_LIST: 2163: NONE("FILE_LIST"); 2164: case CS_FILE_LIST_EXTENDED: 2165: NONE("FILE_LIST_EXTENDED"); 2166: case CS_FILE_VIEW: 2167: NONE("FILE_VIEW"); 2168: case CS_FILE_UPLOAD: 2169: NONE("FILE_UPLOAD"); 2170: case CS_FILE_UPLOAD_USER: 2171: NONE("FILE_UPLOAD_USER"); 2172: case CS_FILE_UPLOAD_SYSOP: 2173: NONE("FILE_UPLOAD_SYSOP"); 2174: case CS_FILE_DOWNLOAD: 2175: NONE("FILE_DOWNLOAD"); 2176: case CS_FILE_DOWNLOAD_USER: 2177: NONE("FILE_DOWNLOAD_USER"); 2178: case CS_FILE_DOWNLOAD_BATCH: 2179: NONE("FILE_DOWNLOAD_BATCH"); 2180: case CS_FILE_REMOVE : 2181: NONE("FILE_REMOVE "); 2182: case CS_FILE_BATCH_SECTION: 2183: NONE("FILE_BATCH_SECTION"); 2184: case CS_FILE_TEMP_SECTION: 2185: NONE("FILE_TEMP_SECTION"); 2186: case CS_FILE_NEW_SCAN_CFG: 2187: NONE("FILE_NEW_SCAN_CFG"); 2188: case CS_FILE_NEW_SCAN: 2189: NONE("FILE_NEW_SCAN"); 2190: case CS_FILE_NEW_SCAN_ALL: 2191: NONE("FILE_NEW_SCAN_ALL"); 2192: case CS_FILE_FIND_TEXT: 2193: NONE("FILE_FIND_TEXT"); 2194: case CS_FILE_FIND_TEXT_ALL: 2195: NONE("FILE_FIND_TEXT_ALL"); 2196: case CS_FILE_FIND_NAME: 2197: NONE("FILE_FIND_NAME"); 2198: case CS_FILE_FIND_NAME_ALL: 2199: NONE("FILE_FIND_NAME_ALL"); 2200: case CS_FILE_PTRS_CFG: 2201: NONE("FILE_PTRS_CFG"); 2202: case CS_FILE_BATCH_ADD: 2203: NONE("FILE_BATCH_ADD"); 2204: case CS_FILE_BATCH_CLEAR: 2205: NONE("FILE_BATCH_CLEAR"); 2206: case CS_FILE_SET_LIBRARY: 2207: NONE("FILE_SET_LIBRARY"); 2208: case CS_FILE_SEND: 2209: NONE("FILE_SEND"); 2210: case CS_FILE_BATCH_ADD_LIST: 2211: NONE("FILE_BATCH_ADD_LIST"); 2212: case CS_FILE_RECEIVE: 2213: NONE("FILE_RECEIVE"); 2214: case CS_NODELIST_ALL: 2215: NONE("NODELIST_ALL"); 2216: case CS_NODELIST_USERS: 2217: NONE("NODELIST_USERS"); 2218: case CS_CHAT_SECTION: 2219: NONE("CHAT_SECTION"); 2220: case CS_USER_DEFAULTS: 2221: NONE("USER_DEFAULTS"); 2222: case CS_USER_EDIT: 2223: NONE("USER_EDIT"); 2224: case CS_TEXT_FILE_SECTION: 2225: NONE("TEXT_FILE_SECTION"); 2226: case CS_INFO_SYSTEM: 2227: NONE("INFO_SYSTEM"); 2228: case CS_INFO_SUBBOARD: 2229: NONE("INFO_SUBBOARD"); 2230: case CS_INFO_DIRECTORY: 2231: NONE("INFO_DIRECTORY"); 2232: case CS_INFO_USER: 2233: NONE("INFO_USER"); 2234: case CS_INFO_VERSION: 2235: NONE("INFO_VERSION"); 2236: case CS_INFO_XFER_POLICY: 2237: NONE("INFO_XFER_POLICY"); 2238: case CS_XTRN_EXEC: 2239: NONE("XTRN_EXEC"); 2240: case CS_XTRN_SECTION: 2241: NONE("XTRN_SECTION"); 2242: case CS_USERLIST_SUB: 2243: NONE("USERLIST_SUB"); 2244: case CS_USERLIST_DIR: 2245: NONE("USERLIST_DIR"); 2246: case CS_USERLIST_ALL: 2247: NONE("USERLIST_ALL"); 2248: case CS_USERLIST_LOGONS: 2249: NONE("USERLIST_LOGONS");; 2250: case CS_PAGE_SYSOP: 2251: NONE("PAGE_SYSOP"); 2252: case CS_PRIVATE_CHAT: 2253: NONE("PRIVATE_CHAT");; 2254: case CS_PRIVATE_MESSAGE: 2255: NONE("PRIVATE_MESSAGE");; 2256: case CS_MINUTE_BANK: 2257: NONE("MINUTE_BANK"); 2258: case CS_GURU_LOG: 2259: NONE("GURU_LOG"); 2260: case CS_ERROR_LOG: 2261: NONE("ERROR_LOG"); 2262: case CS_SYSTEM_LOG: 2263: NONE("SYSTEM_LOG"); 2264: case CS_SYSTEM_YLOG: 2265: NONE("SYSTEM_YLOG"); 2266: case CS_SYSTEM_STATS: 2267: NONE("SYSTEM_STATS"); 2268: case CS_NODE_STATS: 2269: NONE("NODE_STATS"); 2270: case CS_SHOW_MEM: 2271: NONE("SHOW_MEM"); 2272: case CS_CHANGE_USER: 2273: NONE("CHANGE_USER"); 2274: case CS_ANSI_CAPTURE: 2275: NONE("ANSI_CAPTURE"); 2276: case CS_LIST_TEXT_FILE: 2277: NONE("LIST_TEXT_FILE"); 2278: case CS_EDIT_TEXT_FILE: 2279: NONE("EDIT_TEXT_FILE"); 2280: case CS_FILE_SET_ALT_PATH: 2281: NONE("FILE_SET_ALT_PATH"); 2282: case CS_FILE_RESORT_DIRECTORY: 2283: NONE("FILE_RESORT_DIRECTORY"); 2284: case CS_FILE_GET: 2285: NONE("FILE_GET"); 2286: case CS_FILE_PUT: 2287: NONE("FILE_PUT"); 2288: case CS_FILE_UPLOAD_BULK: 2289: NONE("FILE_UPLOAD_BULK"); 2290: case CS_FILE_FIND_OLD: 2291: NONE("FILE_FIND_OLD"); 2292: case CS_FILE_FIND_OPEN: 2293: NONE("FILE_FIND_OPEN"); 2294: case CS_FILE_FIND_OFFLINE: 2295: NONE("FILE_FIND_OFFLINE"); 2296: case CS_FILE_FIND_OLD_UPLOADS: 2297: NONE("FILE_FIND_OLD_UPLOADS"); 2298: case CS_INC_MAIN_CMDS: 2299: NONE("INC_MAIN_CMDS"); 2300: case CS_INC_FILE_CMDS: 2301: NONE("INC_FILE_CMDS"); 2302: case CS_PRINTFILE_STR: 2303: NONE("PRINTFILE_STR"); 2304: case CS_PAGE_GURU: 2305: NONE("PAGE_GURU"); 2306: case CS_SPY: 2307: NONE("SPY"); 2308: default: 2309: printf("ERROR! Unknown instruction: %02X\n",uch); 2310: printf("Cannot continue.\n"); 2311: free(labels); 2312: return; 2313: } 2314: if(redo) 2315: fputs(src,srcfile); 2316: } 2317: free(labels); 2318: } 2319: 2320: int main(int argc, char **argv) 2321: { 2322: int f; 2323: FILE *bin; 2324: FILE *src; 2325: char newname[MAX_PATH+1]; 2326: char *p; 2327: char revision[16]; 2328: FILE *cache; 2329: char cache_line[1024]; 2330: char *crc,*good,*str; 2331: 1.1.1.2 ! root 2332: sscanf("$Revision: 1.42 $", "%*s %s", revision); 1.1 root 2333: 2334: printf("\nUNBAJA v%s-%s - Synchronet Baja Shell/Module De-compiler\n" 2335: ,revision, PLATFORM_DESC); 2336: 2337: for(f=1; f<argc; f++) { 2338: if(!strncmp(argv[f],"-b",2)) { 2339: brute_len=atoi(argv[f]+2); 2340: if(brute_len) { 2341: brute_buf=(char *)malloc(brute_len+1); 2342: if(!brute_buf) 2343: brute_len=0; 1.1.1.2 ! root 2344: brute_crc_buf=(uint32_t *)malloc(brute_len*sizeof(uint32_t)); 1.1 root 2345: if(!brute_crc_buf) { 2346: free(brute_buf); 2347: brute_len=0; 2348: } 2349: if((cache=fopen("unbaja.brute","r"))!=NULL) { 2350: while(fgets(cache_line,sizeof(cache_line),cache)) { 2351: truncnl(cache_line); 2352: crc=strtok(cache_line,","); 2353: if(crc!=NULL) { 2354: good=strtok(NULL,","); 2355: if(good!=NULL) { 2356: str=strtok(NULL,","); 2357: if(str!=NULL) { 2358: add_bruted(strtoul(crc,NULL,16),strtoul(good,NULL,10),str,0); 2359: } 2360: } 2361: } 2362: } 2363: fclose(cache); 2364: } 2365: } 2366: printf("Will brute-force up to %d chars\n",brute_len); 2367: continue; 2368: } 2369: bin=fopen(argv[f],"rb"); 2370: if(bin==NULL) 2371: perror(argv[f]); 2372: else { 2373: SAFECOPY(newname, argv[f]); 2374: p=strrchr(newname, '.'); 2375: if(p==NULL) 2376: p=strchr(newname,0); 2377: strcpy(p,".decompiled"); 2378: src=fopen(newname,"w"); 2379: if(src == NULL) 2380: perror(newname); 2381: else { 2382: printf("\nDecompiling %s to %s\n",argv[f],newname); 2383: fputs("!include sbbsdefs.inc\n",src); 2384: fputs("!include file_io.inc\n",src); 2385: fputs("!include dir_attr.inc\n\n",src); 2386: decompile(bin, src); 2387: fclose(src); 2388: } 2389: fclose(bin); 2390: } 2391: } 2392: 2393: return(0); 2394: } 2395:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.