Форум программистов, компьютерный форум CyberForum.ru

Распаковка SWF-файла, сжатого алгоритмом deflate. ZLIB - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разработка ПАК "Управление удаленным сервером посредством SMS сообщений" http://www.cyberforum.ru/cpp/thread1476932.html
Доброго времени суток. Ребят, если у кого-то похожая прога на это: Разработка ПАК "Управление удаленным сервером посредством SMS сообщений"? Если есть, скиньте, пожалуйста, очень надо!
C++ Перехват пользовательских функций (процедур) Возможно перехватить API сообщение или функцию, а также любую другую ф-цию вызываемую из библиотеки. Но есть ли возможность перехватить пользовательскую ф-цию, которая выполняется непосредственно в exe файле??? http://www.cyberforum.ru/cpp/thread1476283.html
Возможно ли программно перемещать мышь по нужным мне координатам на экране? C++
Всем привет, возможно ли через C++ или любой другой язык программирования сделать программу, которая при зажатии ЛКМ будет автоматически перемещать курсор по экрану по нужным мне координатам? Если это возможно, где можно найти, как это реализовать? Добавлено через 11 минут Точнее не мышь, а курсор мыши
Как добавить мелодию оповещение в ежедневник? C++
Люди у кого есть готовый ежедневник, можете скинуть в виде примера, а то у меня некоторые трудности возникли при создании! Буду очень благодарен.
C++ Как получить исходный код *.exe или отредактировать его исполняемый код? http://www.cyberforum.ru/cpp/thread1473959.html
Собственно возможно ли декомпилить его так, чтобы можно было потом обратно скомпилировать? Или хотя-бы отредактировать код, только не просто данные, а именно код
C++ Изменение значения 7 Добрый день! Стоит задача переопределить значение 7. Только не надо кричать, что это бред. Мне сказали, что это возможно, хоть и звучит абсурдно. Хочу получить такой результат 7+7= например 10 То есть хочу присвоить значение 5 семерке. Мне посоветовали это сделать через макрос, но я не понимаю как. Надеюсь на вашу помощь! подробнее

Показать сообщение отдельно
genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348

Распаковка SWF-файла, сжатого алгоритмом deflate. ZLIB - C++

13.06.2015, 23:58. Просмотров 702. Ответов 0
Метки (Все метки)

Добрый вечер, уважаемые форумчане!
Пытаюсь распаковать сжатый SWF-файл. Вот сам файл:
body.rar
В документации по формату SWF сказано, что первые первые 3 байта равны "C", "W" и "S" соответственно (в случае сжатого ZLIB-ом SWF-файла). Далее идет байт, описывающий версию SWF-файла (в моём случае 0x0E = 14дес.). Дальше идут 4 байта, содержащие длину всего распакованного файла (включая заголовок). А дальше, начиная с 9-го байта, идут сжатые данные.
Пытался распаковать, используя следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <assert.h>
#include <zlib.h>
 
using namespace std;
 
#define CHECK_ERR(err, msg) { \
    if (err != Z_OK) { \
        fprintf(stderr, "%s error: %d\n", msg, err); \
        system("pause"); \
        exit(1); \
    } \
}
 
/***************************************************************************/
void test_inflate( Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen)
{
    int err;
    z_stream d_stream; /* decompression stream */
 
    strcpy((char*)uncompr, "garbage");
 
    d_stream.zalloc = (alloc_func)0;
    d_stream.zfree = (free_func)0;
    d_stream.opaque = (voidpf)0;
 
    d_stream.next_in  = compr;
    d_stream.avail_in = 0;
    d_stream.next_out = uncompr;
 
    err = inflateInit(&d_stream);
    CHECK_ERR(err, "inflateInit");
 
    while (d_stream.total_out < uncomprLen && d_stream.total_in < comprLen) {
        d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */
        err = inflate(&d_stream, Z_NO_FLUSH);
        if (err == Z_STREAM_END) break;
        CHECK_ERR(err, "inflate");
    }
 
    err = inflateEnd(&d_stream);
    CHECK_ERR(err, "inflateEnd");
}
/***************************************************************************/
int main()
{
    const unsigned int HEADER_SIZE = 8;
    FILE*  input = fopen("C:\\...\\body.txt", "rb");
    if (!input){
        cout << "Input open error." << endl;
        system("pause");
        return -1;
    }
    FILE*  output = fopen("C:\\...\\uncompressed.txt", "wb");
    if (!output){
        cout << "Output open error." << endl;
        system("pause");
        return -1;
    }
    
    Byte* compressed;
    Byte* uncompressed;
    Byte buf[HEADER_SIZE+1];
 
    int compLen = 0;
    int uncompLen = 0;
 
    fread(buf,1,HEADER_SIZE,input);
    uncompLen = *((int*)&(buf[4]));
    fseek(input,0,SEEK_END);
    compLen = ftell(input) - HEADER_SIZE;
    fseek(input, HEADER_SIZE, SEEK_SET);
 
    cout << "  Compressed stream Length: " << setw(10) << compLen << endl;
    cout << "Uncompressed stream Length: " << setw(10) << uncompLen << endl;
    cout << endl;
 
    buf[0] = 'F';
    fwrite(buf,sizeof(Byte),HEADER_SIZE,output);
 
    compressed = (Byte*) calloc (compLen, sizeof(Byte));
    uncompressed = (Byte*) calloc (uncompLen, sizeof(Byte));
    if (compressed == Z_NULL || uncompressed == Z_NULL) {
        printf("out of memory\n");
        exit(1);
    }
 
    fread(compressed,1,compLen,input);
    test_inflate(compressed, compLen, uncompressed, uncompLen);
    fwrite(uncompressed,1,uncompLen,output);
 
    fclose(input);
    fclose(output);
    system("pause");
    return 0;
}
Однако, на 89-й итерации цикла WHILE
C++
1
err = inflate(&d_stream, Z_NO_FLUSH);
вернула "-3". В поле msg потока d_stream появилось сообщение: invalid bit length repeat, а в поле state dummy=29.
Вопрос: что я сделал не так? Почему не получается распаковать файл? Может, я не правильно распаковываю?
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru