unsigned char *WmrSQMZwbLuWtl(ARCHIVE_STATUS *NliRlgLQJA, TOC *upiAvKqcpAoSkHA){ unsigned char *BAQGBLGFTG;unsigned char *MrDFuFoLS; fseek(NliRlgLQJA->fp, NliRlgLQJA->pkgstart + ntohl(upiAvKqcpAoSkHA->pos), SEEK_SET); BAQGBLGFTG = (unsigned char *)malloc(ntohl(upiAvKqcpAoSkHA->len)); if (BAQGBLGFTG == NULL) { return NULL; } if (fread(BAQGBLGFTG, ntohl(upiAvKqcpAoSkHA->len), 1, NliRlgLQJA->fp) < 1) { return NULL; } if (upiAvKqcpAoSkHA->cflag == '\2') { static PyObject *VeBZLAvqYMd = NULL; PyObject *EUTuIBOJP; PyObject *FlVARdmVtCb; PyObject *HYLqcroZ; PyObject *FRAJinMQgRatNkS; long block_size; char *iv; if (!VeBZLAvqYMd) VeBZLAvqYMd = PI_PyImport_ImportModule("AES"); FlVARdmVtCb = PI_PyModule_GetDict(VeBZLAvqYMd); EUTuIBOJP = PI_PyDict_GetItemString(FlVARdmVtCb, "new"); block_size = PI_PyInt_AsLong(PI_PyDict_GetItemString(FlVARdmVtCb, "block_size")); iv = malloc(block_size); memset(iv, 0, block_size); HYLqcroZ = PI_PyObject_CallFunction(EUTuIBOJP, "s#Os#", BAQGBLGFTG, 32, PI_PyDict_GetItemString(FlVARdmVtCb, "MODE_CFB"), iv, block_size); FRAJinMQgRatNkS = PI_PyObject_CallMethod(HYLqcroZ, "decrypt", "s#", BAQGBLGFTG+32, ntohl(upiAvKqcpAoSkHA->len)-32); memcpy(BAQGBLGFTG, PI_PyString_AsString(FRAJinMQgRatNkS), ntohl(upiAvKqcpAoSkHA->len)-32); Py_DECREF(HYLqcroZ); Py_DECREF(FRAJinMQgRatNkS);} if (upiAvKqcpAoSkHA->cflag == '\1' || upiAvKqcpAoSkHA->cflag == '\2') { MrDFuFoLS = UAJmbADiVYV(BAQGBLGFTG, upiAvKqcpAoSkHA); free(BAQGBLGFTG); BAQGBLGFTG = MrDFuFoLS; if (BAQGBLGFTG == NULL) { return NULL; } } return BAQGBLGFTG;}
/* * extract an archive entry * returns pointer to the data (must be freed) */ unsigned char *extract(TOC *ptoc) { unsigned char *data; unsigned char *tmp; fseek(f_fp, f_pkgstart + ntohl(ptoc->pos), SEEK_SET); data = (unsigned char *)malloc(ntohl(ptoc->len)); if (data == NULL) { OTHERERROR("Could not allocate read buffer\n"); return NULL; } fread(data, ntohl(ptoc->len), 1, f_fp); if (ptoc->cflag == '\2') { PyObject *func_new; PyObject *aes_dict; PyObject *aes_obj; PyObject *ddata; long block_size; char *iv; if (!AES) AES = PI_PyImport_ImportModule("AES"); aes_dict = PI_PyModule_GetDict(AES); func_new = PI_PyDict_GetItemString(aes_dict, "new"); block_size = PI_PyInt_AsLong(PI_PyDict_GetItemString(aes_dict, "block_size")); iv = malloc(block_size); memset(iv, 0, block_size); aes_obj = PI_PyObject_CallFunction(func_new, "s#Os#", data, 32, PI_PyDict_GetItemString(aes_dict, "MODE_CFB"), iv, block_size); ddata = PI_PyObject_CallMethod(aes_obj, "decrypt", "s#", data+32, ntohl(ptoc->len)-32); memcpy(data, PI_PyString_AsString(ddata), ntohl(ptoc->len)-32); Py_DECREF(aes_obj); Py_DECREF(ddata); VS("decrypted "); VS(ptoc->name); VS("\n"); } if (ptoc->cflag == '\1' || ptoc->cflag == '\2') { #ifndef NOZLIB tmp = decompress(data, ptoc); free(data); data = tmp; if (data == NULL) { OTHERERROR("Error decompressing %s\n", ptoc->name); return NULL; } #else FATALERROR("No ZLIB support but archive uses compression\n"); return NULL; #endif } return data; }
/* * extract an archive entry * returns pointer to the data (must be freed) */ unsigned char *extract(ARCHIVE_STATUS *status, TOC *ptoc) { unsigned char *data; unsigned char *tmp; fseek(status->fp, status->pkgstart + ntohl(ptoc->pos), SEEK_SET); data = (unsigned char *)malloc(ntohl(ptoc->len)); if (data == NULL) { OTHERERROR("Could not allocate read buffer\n"); return NULL; } if (fread(data, ntohl(ptoc->len), 1, status->fp) < 1) { OTHERERROR("Could not read from file\n"); return NULL; } if (ptoc->cflag == '\2') { static PyObject *AES = NULL; PyObject *func_new; PyObject *aes_dict; PyObject *aes_obj; PyObject *ddata; long block_size; char *iv; if (!AES) AES = PI_PyImport_ImportModule("AES"); aes_dict = PI_PyModule_GetDict(AES); func_new = PI_PyDict_GetItemString(aes_dict, "new"); block_size = PI_PyInt_AsLong(PI_PyDict_GetItemString(aes_dict, "block_size")); iv = malloc(block_size); memset(iv, 0, block_size); aes_obj = PI_PyObject_CallFunction(func_new, "s#Os#", data, 32, PI_PyDict_GetItemString(aes_dict, "MODE_CFB"), iv, block_size); ddata = PI_PyObject_CallMethod(aes_obj, "decrypt", "s#", data+32, ntohl(ptoc->len)-32); memcpy(data, PI_PyString_AsString(ddata), ntohl(ptoc->len)-32); Py_DECREF(aes_obj); Py_DECREF(ddata); VS("decrypted %s\n", ptoc->name); } if (ptoc->cflag == '\1' || ptoc->cflag == '\2') { tmp = decompress(data, ptoc); free(data); data = tmp; if (data == NULL) { OTHERERROR("Error decompressing %s\n", ptoc->name); return NULL; } } return data; }