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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2016, 15:52   #11
surrexi
 
Регистрация: 02.06.2016
Сообщений: 7
По умолчанию

Написал программу проверки пароля, помогите пожалуйста ее применить для моего задания
Код:
.model  small
.stack  100h
.data
  pass db 'Parol'
  passLen=$-pass              
  MaxInputLen db 50             
  InputLen db 0                    
  InputBuff db 50 dup (0)           
  InputMsg db 'Enter password: $'
  MsgWrong db 'Password is wrong!$'
  MsgAccept db 'Password is accept!$'
  Access db 0
  
.code
  start:
    mov ax,@data
    mov ds,ax
    mov es,ax         
    xor ax,ax
    call MessageForIn             
    call input                
    call Check               
    cmp Access,1             
    je GoodPass             
    call BadMsg            
    jmp exit                    

GoodPass:
  call GoodMsg             
exit:
  mov ax,4c00h 
  int 21h

input proc
  mov ah ,0Ah           
  mov dx,offset MaxInputLen  
  int 21h             
  mov dl,10  
  mov ah,6
  int 21h
  ret
endp

MessageForIn proc
  mov ah,9
  mov dx,offset InputMsg    
  int 21h
  ret
endp

Check proc      
  mov ah,passLen
  mov bh,InputLen
  cmp ah,bh   
  jne wrong  
  mov di,offset pass
  mov si,offset InputBuff
  mov cx,PassLen 
  cld 
  repe cmpsb 
  jne wrong           
  mov Access,1
  wrong:
    ret 
endp

GoodMsg proc
  mov ah,9
  mov dx,offset MsgAccept
  int 21h
  ret
endp

BadMsg proc
  mov ah,9
  mov dx,offset MsgWrong
  int 21h
  ret
endp

end start
surrexi вне форума Ответить с цитированием
Старый 02.06.2016, 16:31   #12
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от surrexi Посмотреть сообщение
помогите пожалуйста ее применить для моего задания
Чем помочь-то? На пальцах объяснить, как заражать файлы что-ли?
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 02.06.2016, 16:37   #13
surrexi
 
Регистрация: 02.06.2016
Сообщений: 7
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
Чем помочь-то? На пальцах объяснить, как заражать файлы что-ли?
Было бы замечательно. В задании написано что нужно вводить имя файла и пароль в командной строке, это как?
И можно не на пальцах объяснить, а код показать
surrexi вне форума Ответить с цитированием
Старый 02.06.2016, 16:56   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от surrexi Посмотреть сообщение
В задании написано что нужно вводить имя файла и пароль в командной строке, это как?
это означает, что при запуске вашей программы SetPassToCOM
можно будет указать в командной строке параметры.

Код:
SetPassToCOM ТутИмяФайл.com MyPar0le
а вот как эту командную строчку получить в своей программе:

Цитата:
DOS stores the command line in a legacy structure called the Program Segment Prefix ("PSP"). And I do mean legacy. This structure was designed to be backwards-compatible with programs ported from CP/M.

Where's the PSP?

You know how programs built as .COM files always start with ORG 100h? The reason for that is precisely that - for .COM programs - the PSP is always stored at the beginning of the code segment (at CS:0h). The PSP is 0FFh bytes long, and the actual program code starts right after that (that is, at CS:100h).

The address is also conveniently available at DS:00h and ES:00h, since the key characteristic of the .COM format is that all the segment registers start with the same value (and a COM program typically never changes them).

To read the command line from a .COM program, you can pick its length at CS:80h (or DS:80h, etc. as long as you haven't changed those registers). The Command Line starts at CS:81h and takes the rest of PSP, ending with a Carriage Return (0Dh) as a terminator, so the command line is never more than 126 bytes long.

(and that is why the command line has been 126 bytes in DOS forever, despite the fact we all wished for years it could be made longer. Since WinNT uses provides a different mechanism to access the command line, the WinNT/XP/etc. command line doesn't suffer from this size limitation).

For an .EXE program, you can't rely on CS:00h because the startup code segment can be just about anywhere in memory. However, when the program starts, DOS always stores the PSP at the base of the default data segment. So, at startup, DS:00h and ES:00h will always point to the PSP, for both .EXE and .COM programs.

If you didn't keep track of PSP address at the beginning of the program, and you change both DS and ES, you can always ask DOS to provide the segment value at any time, via INT 21h, function 62h. The segment portion of the PSP address will be returned in BX (the offset being of course 0h).

но я Вам скажу больше. "Заражающая программа может быть написана на любом языке, включая и ЯВУ! В этом случае нужно в её состав включить внедряемый код."


А Вам я советую взять простую COM программу (ну, которая пишет Hello World и ждёт нажатия любой клавиши) и дальше тренироваться на ней.

попробуйте её заразить ручками (взять в руки любой Hex-редактор (Hiew, WinHex или любой другой).
Когда у Вас получится это сделать, тогда Вы и поймёте, что и как нужно делать.

p.s. задача прочитать имя заражаемой программы и пароль из командной строки ни какого отношения собственно к процессу заражения не имеет. Это просто расширение удобства использования программы/универсальности, но не более того!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.06.2016, 16:59   #15
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от surrexi Посмотреть сообщение
Было бы замечательно.
Если-бы каждый непросвещённый человек мог так просто взять и внедрить свою бацилу в исполняемый файл, то каждый карапуз-бы занимался этим.
Ты говоришь, что не можешь вывести строку на консоль (unreal), и хочешь чтоб тебе объясняли методы внедрения на пальцах, да ещё и с исходниками.

Почитай литературу по структуре исполняемых файлов, всё сразу прояснится.. Узнаешь, куда можно вставлять свой код, как вычислить его смещение, в каком месте нужно перехватить управление и куда его потом вернуть.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 02.06.2016, 17:06   #16
surrexi
 
Регистрация: 02.06.2016
Сообщений: 7
По умолчанию

Прошу прощение за мои тупые вопросы))
Ну во первых, это задача по учебе, преподаватель сказал написать на assembler (tasm).
Во вторых, я раньше не сталкивался с такими, он нас учил только 2+2 сложить в отладчике и все. Поэтому из языков высокого уровня я понимаю так:
* Вот также в моей программе как запрос на пароль есть, также и запрос на файл.
Например,
Введите .com файл .....
Введите пароль .......
В общем хочу спросить, есть ли какой-нибудь простой способ это выполнить не прибегая к дополнительному ПО.
surrexi вне форума Ответить с цитированием
Старый 02.06.2016, 17:13   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от surrexi Посмотреть сообщение
Прошу прощение за мои тупые вопросы))
Ну во первых, это задача по учебе, преподаватель сказал написать на assembler (tasm).
ну, тем хуже для Вас. Тогда забудьте про ЯВУ, пишите на tasm.

Цитата:
Сообщение от surrexi Посмотреть сообщение
Во вторых, я раньше не сталкивался с такими, он нас учил только 2+2 сложить в отладчике и все.
значит, Вам придётся в этом разобраться самостоятельно (используя те сведения, что Вы получили на форуме и те, что Вы почерпнёте из книг и интернета).

Цитата:
Сообщение от surrexi Посмотреть сообщение
Поэтому из языков высокого уровня я понимаю так:
* Вот также в моей программе как запрос на пароль есть, также и запрос на файл.
Например,
Введите .com файл .....
Введите пароль .......
ну, всё верно. можно так. Это альтернатива командной строке.
В идеале можно сделать так - прочитать значения из командной строки, а, если в командной строке пусто - тогда запросить данные у пользователя.

Цитата:
Сообщение от surrexi Посмотреть сообщение
В общем хочу спросить, есть ли какой-нибудь простой способ это выполнить не прибегая к дополнительному ПО.
так. стоп. Простой способ выполнить ЧТО именно?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Десятично-двоичный преобразователь (хрестоматийная задача любой ЭВМ) Sasha_Smirnov Microsoft Office Word 13 06.10.2013 11:01
Архитектура ЭВМ Xronikov Помощь студентам 8 11.06.2012 09:36
задача на эвм nata-107 Помощь студентам 0 15.05.2012 17:06
Синтез логических узлов ЭВМ (логические основы ЭВМ) Одинокая Волчица Фриланс 7 26.04.2011 06:50