Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись и чтение в файл, Запись и чтение 
V
    Опции темы
Alexey68
Дата 1.2.2014, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Здравствуйте All!
Пытаюсь зашифровать определённый участок исполняемого файла:
Код

FILE *fopw, *fopr;
int a;
char *fileC;

fopw = fopen("out.exe", "r+");

fileC = (char*)malloc(20);

fseek(fopw, 1951, SEEK_SET);

for (int i = 0; i < 3500; i++)
{
fscanf(fopw, "%c", &fileC[i]);
}

for (int i = 0; i < 20; i++)
{
 fileC[i] = fileC[i] ^ 0x334;
}

fseek(fopw, 1951, SEEK_SET);

for (int a = 0; a < 20; a++)
{
fprintf(fopw, "%c", fileC[a]);
}

fclose(fopw);
system("pause");
}

исходный код:
Код

0040119F  |> /68 AC204000   PUSH hello.004020AC                      ; /format = "Hello world"
004011A4  |. |E8 AF010000   CALL <JMP.&CC3280MT._printf>             ; \_printf
004011A9  |. |59            POP ECX
004011AA  |. |FF45 F8       INC DWORD PTR SS:[EBP-8]
004011AD  |. |837D F8 0A    CMP DWORD PTR SS:[EBP-8],0A
004011B1  |.^\7C EC         JL SHORT hello.0040119F
004011B3  |.  68 B9204000   PUSH hello.004020B9                      ; /command = "pause"
004011B8  |.  E8 A1010000   CALL <JMP.&CC3280MT._system>             ; \_system

после зашифрования:
Код

0040119F      6BAF 234303EB>IMUL EBP,DWORD PTR DS:[EDI+EB034323],-54
004011A6      0203          ADD AL,BYTE PTR DS:[EBX]
004011A8      035A FC       ADD EBX,DWORD PTR DS:[EDX-4]
004011AB      46            INC ESI
004011AC      FB            STI
004011AD      807E FB 09    CMP BYTE PTR DS:[ESI-5],9
004011B1    ^ 7F EF         JG SHORT out.004011A2
004011B3   .  68 B9204000   PUSH out.004020B9                        ; /command = "pause"
004011B8   .  E8 A1010000   CALL <JMP.&CC3280MT._system>             ; \_system

после разшифрования:
Код

0040119F      68 AC204000   PUSH out.004020AC                        ;  ASCII "Hello world
"
004011A4      E8 AF010000   CALL <JMP.&CC3280MT._printf>
004011A9      59            POP ECX
004011AA      FF45 F8       INC DWORD PTR SS:[EBP-8]
004011AD      837D F8 0D    CMP DWORD PTR SS:[EBP-8],0D//  должно быть - 0A
004011B1      0A7CEC B9     OR BH,BYTE PTR SS:[ESP+EBP*8-47]// должно быть JL SHORT hello.0040119F
004011B5      2040 00       AND BYTE PTR DS:[EAX],AL                  //
004011B8   .  E8 A1010000   CALL <JMP.&CC3280MT._system>             ; \_system

почему-то инструкции изменились.
В чём ошибка?
PM MAIL   Вверх
tzirechnoy
Дата 1.2.2014, 14:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: -1
Всего: 16



В винде соглашэния о формате текстовых файлов несколько отличаются от юникса, в котором весь этот C API был выдуман -- потому там приходится явно указывать, текстовый файл или бинарный, при открытии.
По умолчанию -- текстовый, Вам нужэн бинарный.

Добавлено через 1 минуту и 42 секунды
Но вообще -- что-то у меня есть обоснованные сомнения, что Вы понимаете, что делаете.

С другой стороны -- ну и что, на проблемы вроде нетривиального чтения .exe при исполнении Вы если что и сами скоро напоретесь, и как-нибудь разберётесь.

Только ошыбки и коды возврата функцый впредь проверяйте, здесь не это играет, но вообще -- очень полезно.
PM MAIL   Вверх
Alexey68
Дата 1.2.2014, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



необходимо было использовать режим - r+b.
Большое спасибо tzirechnoy.
p.s с PE форматом знаком (в этом случае парсинг заголовков и структур PE не нужен), а с режимом не обратил внимания...

Это сообщение отредактировал(а) Alexey68 - 1.2.2014, 14:48
PM MAIL   Вверх
xvr
Дата 3.2.2014, 13:12 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Alexey68 @  1.2.2014,  14:33 Найти цитируемый пост)
fileC = (char*)malloc(20);

Цитата(Alexey68 @  1.2.2014,  14:33 Найти цитируемый пост)
for (int i = 0; i < 3500; i++)
{
fscanf(fopw, "%c", &fileC[i]);
}

По что же вы так с памятью, а  smile 

PM MAIL   Вверх
feodorv
Дата 3.2.2014, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(xvr @  3.2.2014,  14:12 Найти цитируемый пост)
По что же вы так с памятью, а

И уж лучше fread...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.