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

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

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

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

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

13.06.2015, 23:58. Просмотров 641. Ответов 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.
Вопрос: что я сделал не так? Почему не получается распаковать файл? Может, я не правильно распаковываю?
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru