Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2011, 11:44   #1
B-o-r-i-s
 
Регистрация: 25.10.2009
Сообщений: 9
По умолчанию головоломка???

Здравствуйте, Друзья! Очень надеюсь на Вашу помощь!

У меня такая просьба:
Необходимо проанализировать исполняемый файл и подать ему на вход
такие данные, чтобы программа вывела строку "privet!" в консоль.
Исполняемый файл изменять нельзя (ни на диске, ни в памяти).
Конечным результатом должно являться описание способа, с
помощью которого Вы это сделаете.

Прошу! Помогите!
Вложения
Тип файла: rar test.rar (570 байт, 13 просмотров)
B-o-r-i-s вне форума Ответить с цитированием
Старый 03.07.2011, 11:46   #2
B-o-r-i-s
 
Регистрация: 25.10.2009
Сообщений: 9
По умолчанию

Код:
Segment type: Pure code
.text:00401000 ; Segment permissions: Read/Execute
.text:00401000 _text           segment para public 'CODE' use32
.text:00401000                 assume cs:_text
.text:00401000                 ;org 401000h
.text:00401000                 assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
.text:00401000 ; void byte_401000
.text:00401000 byte_401000     db 51h                  ; DATA XREF: start+58o
.text:00401000                                         ; start+5Fo
.text:00401001 ; ---------------------------------------------------------------------------
.text:00401001                 push    0
.text:00401003                 lea     eax, [esp+4]
.text:00401007                 push    eax
.text:00401008                 push    2
.text:0040100A                 push    offset unk_402020
.text:0040100F                 push    0FFFFFFF5h
.text:0040100F ; ---------------------------------------------------------------------------
.text:00401011 aD              db '¦D$'
.text:00401014                 db  14h
.text:00401015                 db    0
.text:00401016                 db    0
.text:00401017                 db    0
.text:00401018                 db    0
.text:00401019 ; ---------------------------------------------------------------------------
.text:00401019                 call    ds:GetStdHandle
.text:0040101F                 push    eax
.text:00401020                 call    ds:WriteFile
.text:00401026                 push    0
.text:00401028                 call    ds:ExitProcess
.text:00401028 ; ---------------------------------------------------------------------------
.text:0040102E                 db 0CCh ; ¦
.text:0040102F                 db 0CCh ; ¦
.text:00401030
.text:00401030 ; --------------- S U B R O U T I N E ---------------------------------------
.text:00401030
.text:00401030
.text:00401030 nullsub_1       proc near               ; DATA XREF: start+53o
.text:00401030                 retn
.text:00401030 nullsub_1       endp
.text:00401030
.text:00401030 ; ---------------------------------------------------------------------------
.text:00401031                 align 10h
.text:00401040
.text:00401040 ; --------------- S U B R O U T I N E ---------------------------------------
.text:00401040
.text:00401040
.text:00401040                 public start
.text:00401040 start           proc near
.text:00401040
.text:00401040 NumberOfBytesRead= dword ptr -4
.text:00401040
.text:00401040                 push    ecx             ; lpOverlapped
.text:00401041                 lea     eax, [esp+4+NumberOfBytesRead]
.text:00401044                 push    eax             ; lpflOldProtect
.text:00401045                 push    40h             ; flNewProtect
.text:00401047                 push    2800h           ; dwSize
.text:0040104C                 push    offset Address  ; lpAddress
.text:00401051                 mov     [esp+14h+NumberOfBytesRead], 0
.text:00401059                 call    ds:VirtualProtect
.text:0040105F                 push    0               ; lpOverlapped
.text:00401061                 lea     ecx, [esp+8+NumberOfBytesRead]
.text:00401065                 push    ecx             ; lpNumberOfBytesRead
.text:00401066                 push    2800h           ; nNumberOfBytesToRead
.text:0040106B                 push    offset Address  ; lpBuffer
.text:00401070                 push    0FFFFFFF6h      ; lpBuffer
.text:00401072                 call    ds:GetStdHandle
.text:00401072 ; ---------------------------------------------------------------------------
.text:00401078 aP              db 'P'                  ; hFile
.text:00401079 ; ---------------------------------------------------------------------------
B-o-r-i-s вне форума Ответить с цитированием
Старый 03.07.2011, 11:47   #3
B-o-r-i-s
 
Регистрация: 25.10.2009
Сообщений: 9
По умолчанию

Код:
.text:00401079                 call    ds:ReadFile
.text:0040107F                 test    eax, eax
.text:00401081                 jnz     short loc_40108B
.text:00401083                 push    0FFFFFFFFh      ; uExitCode
.text:00401085                 call    ds:ExitProcess
.text:0040108B
.text:0040108B loc_40108B:                             ; CODE XREF: start+41j
.text:0040108B                 mov     eax, [esp+4+NumberOfBytesRead]
.text:0040108E                 cmp     eax, 0Ah
.text:00401091                 jnb     short loc_4010BA
.text:00401093                 mov     edx, offset nullsub_1
.text:00401098                 sub     edx, offset byte_401000
.text:0040109E                 push    edx             ; size_t
.text:0040109F                 push    offset byte_401000 ; void *
.text:004010A4                 push    offset Address  ; void *
.text:004010A9                 call    memcpy
.text:004010AE                 add     esp, 0Ch
.text:004010B1                 mov     edx, offset Address
.text:004010B6                 call    edx ; Address
.text:004010B8                 pop     ecx
.text:004010B9                 retn
.text:004010BA ; ---------------------------------------------------------------------------
.text:004010BA
.text:004010BA loc_4010BA:                             ; CODE XREF: start+51j
.text:004010BA                 push    esi
.text:004010BB                 lea     esi, Address[eax]
.text:004010C1                 mov     eax, 403002h
.text:004010C6
.text:004010C6 loc_4010C6:                             ; CODE XREF: start+9Aj
.text:004010C6                 mov     cl, [eax+1]
.text:004010C9                 mov     dl, [eax-2]
.text:004010CC                 mov     [eax-2], cl
.text:004010CF                 mov     [eax+1], dl
.text:004010D2                 add     eax, 4
.text:004010D5                 lea     ecx, [eax-2]
.text:004010D8                 cmp     ecx, esi
.text:004010DA                 jbe     short loc_4010C6
.text:004010DC                 pop     esi
.text:004010DD                 mov     edx, offset Address
.text:004010E2                 call    edx ; Address
.text:004010E4                 pop     ecx
.text:004010E5                 retn
.text:004010E5 start           endp
.text:004010E5
.text:004010E6
.text:004010E6 ; --------------- S U B R O U T I N E ---------------------------------------
.text:004010E6
.text:004010E6 ; Attributes: thunk
.text:004010E6
.text:004010E6 ; void *__cdecl memcpy(void *,const void *,size_t)
.text:004010E6 memcpy          proc near               ; CODE XREF: start+69p
.text:004010E6                 jmp     ds:__imp_memcpy
.text:004010E6 memcpy          endp
.text:004010E6
B-o-r-i-s вне форума Ответить с цитированием
Старый 03.07.2011, 16:20   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Ну, у меня вроде получилось.
На каком этапе проблемы? Что делает прога, более-менее понятно?
Somebody вне форума Ответить с цитированием
Старый 03.07.2011, 16:23   #5
B-o-r-i-s
 
Регистрация: 25.10.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Ну, у меня вроде получилось.
На каком этапе проблемы? Что делает прога, более-менее понятно?
Подскажите пожалуйста, что надо ввести в консоли? и где об этом говорится в коде?
B-o-r-i-s вне форума Ответить с цитированием
Старый 03.07.2011, 19:23   #6
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от B-o-r-i-s Посмотреть сообщение
где об этом говорится в коде?
Нигде не говорится. Это творческий процесс - отладка, попытки разобраться, написание кода.
Цитата:
Сообщение от B-o-r-i-s Посмотреть сообщение
что надо ввести в консоли?
Помочь сделать и сказать ответ - разные вещи. Ладно, например, такой вот вариант (копируй всю строку, до конца):
Код:
Н└P3P$♦DB•ЛjD3B@3BL3BP3BX3BTM-#5ЄfБ9R P☼---├----vrip-t!eDone_by_Somebody_at_programmersforum.ru
Если при копировании с кодировкой проблемы, вот в файле:
Вложения
Тип файла: txt test-bin.txt (97 байт, 111 просмотров)

Последний раз редактировалось Somebody; 03.07.2011 в 19:29.
Somebody вне форума Ответить с цитированием
Старый 03.07.2011, 20:02   #7
B-o-r-i-s
 
Регистрация: 25.10.2009
Сообщений: 9
По умолчанию

ЌАP3P$DB‹jD3B@3BL3BP3BX3BTM-#5тfЃ9R P---Г----vrip-t!eDone_by_Somebody_at_programmersf orum.ru
Это строка из test-bin.txt все равно какая-то абракадабра
B-o-r-i-s вне форума Ответить с цитированием
Старый 03.07.2011, 20:14   #8
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от B-o-r-i-s Посмотреть сообщение
все равно какая-то абракадабра
А ты ждал красивую строчку из буковок и циферок?
Если не копируется, перенаправь ввод через командную строку.
Somebody вне форума Ответить с цитированием
Старый 03.07.2011, 20:17   #9
B-o-r-i-s
 
Регистрация: 25.10.2009
Сообщений: 9
По умолчанию

сейчас попробую, только откуда ты эту красивую строчку взял?
B-o-r-i-s вне форума Ответить с цитированием
Старый 03.07.2011, 20:25   #10
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Запустил ollydbg, открыл эту прогу, прогнал несколько раз, разбираясь, что и как, увидел, как выполнить свой код из строки, запустил hiew, написал код, скопировал в двоичном виде в notepad++, поменял местами байты, как надо, ввёл строку, запустил. Последний этап пару десятков раз, пока все ошибки не исправил.
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
головоломка lblondy Помощь студентам 0 12.05.2011 13:14
Головоломка оптимизации kinogruppa Microsoft Office Excel 2 06.09.2009 23:37
Головоломка Vali_T Помощь студентам 9 24.05.2008 12:30
головоломка =) Exo Microsoft Office Excel 4 14.04.2008 17:06
Головоломка! Selena SQL, базы данных 1 14.11.2007 11:43