Сейчас на форуме: asfa, bartolomeo (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Поиск кода в программе
Посл.ответ Сообщение

Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 февраля 2012 18:57 · Поправил: niar42
· Личное сообщение · #1

Здравствуйте.

Имеется программа (файл приклеплен). Она помимо всего прочего в процессе работы пишет своё время работы с момента запуска в формате чч.мм.сс. Помогите, пожалуйста, найти участок кода, за это отвечающий. Точнее меня интересует способ, каким она получает время.

P.S. Программа под дос, причем не факт что 16-битная. (Но она не запустится, так как она используется на каком-то специализированном одноплатном компьютере и использует его низкоуровневые фишки.) Но в целом программа обычная досовская.

файл удален



Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 19 февраля 2012 19:34
· Личное сообщение · #2

Она не запустится, потому что она досовая, код - 32х битный, с ком-портами что-то вытворяет.



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 февраля 2012 19:40
· Личное сообщение · #3

Ну не важно.



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 20 февраля 2012 03:57
· Личное сообщение · #4

niar42
yagello верно указал! ето чистая ДОС программа, насколько я помню под дос 32 биток не делали в реал моде?

при запуске - страшно ругается:

[16 bit MS-DOS Subsystem]
C:\Windows\system32\cmd.exe - ttt.exe
The NTVDM CPU has encountered an illegal instruction.
CS:0f74 IP:9fe8 OP:0f 00 00 81 65 Choose 'Close' to terminate the application.
[Close] [Ignore]

niar42 пишет:
она используется на каком-то специализированном одноплатном компьютере и использует его низкоуровневые фишки

и как ето прикажите дебажить?

Тут вижу два варианта - или DosBox под виндой или ДОСя под ВМ
P.S. Один из древних файланализаторов подсказал что
linker: Borland TLINK 7.1
sizes: header 28, relocs 4, empty 480, image 179224, overlay 0 bytes



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 февраля 2012 06:04
· Личное сообщение · #5

Не надо это дебажить. чисто по дизассемблерному коду нельзя найти нужный кусок кода? по идее там должны быть какие то деления на 60 и т.п., преобразование в десятичную СС... Там естб несколько похожих участков, но я не уверен в них. в ассемблере я слабак, поэтому решил обратиться сюда.

строка часов в формате чч.мм.сс, я искал участки, где добавляется точка, но не нашел. потом в hex режиме нашел строку "." 00 "." 00, но не нашел ссылки на нее...



Ранг: 6.0 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 21 февраля 2012 05:43
· Личное сообщение · #6

Время в БИОС находится всегда по одному и томуже адресу. Смотри где программа к нему обращается
и от туда пляши.
P.S. Адрес ячейки не помню. Ищи в гугле.




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 21 февраля 2012 06:32
· Личное сообщение · #7

niar42 пишет:
Точнее меня интересует способ, каким она получает время.

Порылся и нашёл код под дос для получения времени

Code:
  1. Получения даты
  2. asm
  3.   mov ah,2A
  4.   int 21
  5.   mov Year,CX
  6.   mov Month,DH
  7.   mov Day,DL
  8. end
  9.  
  10. Получения времени
  11. asm
  12.   mov AH,2C
  13.   int 21
  14.   mov Hour,CH
  15.   mov Minute,CL
  16.   mov Secund,DH
  17. end


-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 21 февраля 2012 07:07
· Личное сообщение · #8

В реальном режиме
(часы реального времени материнки):
Code:
  1. mov al, xxxx
  2. out 70h, al
  3. in al,71h

например если xxxx=8h, то в al месяц и т.д.

-----
продавец резиновых утёнков




Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 февраля 2012 22:16
· Личное сообщение · #9

HiEndsoft, да, я видел там код, где обращаются с 70 и 71 портом.

Ещё есть такая особенность. Программа выводит время работы, но не свое, а с момента загрузки компьютера/ОС. Как она это делает? Никаких резидентов нет.



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 21 февраля 2012 22:58
· Личное сообщение · #10

от туда же и берет

-----
продавец резиновых утёнков




Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 февраля 2012 16:36
· Личное сообщение · #11

То есть RTC хранят текущий аптайм компьютера? Или как?



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 22 февраля 2012 23:44 · Поправил: Hexxx
· Личное сообщение · #12

niar42 пишет:
То есть RTC хранят текущий аптайм компьютера? Или как?

показывают реальное время, обычные часы и все.
http://ru.wikipedia.org/wiki/RTC

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 февраля 2012 12:25
· Личное сообщение · #13

Что значит "реальное"? Оно что -- обнуляется каждый раз при включении компьютера?



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 23 февраля 2012 16:15
· Личное сообщение · #14

а батарейка в компе угадайте для чего

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 февраля 2012 18:14
· Личное сообщение · #15

Только я один не вижу связи между сообщениями? Я говорю, программа при запуске выводит текущее время работы компьютера (с момента загрузки). Потом мне отвечают, что берёт она его из RTC, которые, по словам Hexxx, "показывают реальное время, обычные часы и все". А потом приплелась какая-то батарейка, которая нужна как раз наоборот, чтобы питать часы, пока комп выключен...

Я новичок на этом форуме, так что извиняюсь заранее. Но если тут какой-то особый диалект русского языка используется -- просветите, пожалуйста.




Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 23 февраля 2012 19:20 · Поправил: Maximus
· Личное сообщение · #16

niar42 прога всего вероятней берет время изменения какого нить системного файла, и считает его началом отсчета, или началом времени запуска системы

-----
StarForce и Themida ацтой!




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 23 февраля 2012 23:37 · Поправил: Hexxx
· Личное сообщение · #17

niar42 пишет:
Только я один не вижу связи между сообщениями? Я говорю, программа при запуске выводит текущее время работы компьютера (с момента загрузки). Потом мне отвечают, что берёт она его из RTC, которые, по словам Hexxx, "показывают реальное время, обычные часы и все". А потом приплелась какая-то батарейка, которая нужна как раз наоборот, чтобы питать часы, пока комп выключен...Я новичок на этом форуме, так что извиняюсь заранее. Но если тут какой-то особый диалект русского языка используется -- просветите, пожалуйста.

ну так вот эти часы, которые питает батарейка - это часы реального времени, ака RTC. На то они и часы реального времени, чтобы после отключения компа продолжать считать реальное время. Есть программный интерфейс для того чтобы прочитать их значение, 70-й порт.

аптайм - это как раз разница значения RTC прочитанного на старте и прочитанного потом. Хотя при желании можно считать аптайм по регистру TSC.

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 февраля 2012 23:54
· Личное сообщение · #18

Hexxx пишет:
аптайм - это как раз разница значения RTC прочитанного на старте и прочитанного потом

Я же говорю, что программа не имеет никаких резидентов и пр., стартующихся при запуске. Комп загрузился, через 10 минут я запускаю прогу и она мне пишет "00:10:00". В коде есть участок, где она что-то делает с 70-м портом.



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 февраля 2012 23:55
· Личное сообщение · #19

Hexxx пишет:
Хотя при желании можно считать аптайм по регистру TSC.

Вот это уже интересней. Не знаете, где про это можно почитать?



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 24 февраля 2012 09:15
· Личное сообщение · #20

http://ru.wikipedia.org/wiki/Rdtsc

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 24 февраля 2012 09:23 · Поправил: Hexxx
· Личное сообщение · #21

Есть еще хацкерский способ получения времени в досе:
Прочитать дату создания файла с именем NUL. NUL - это виртуальный файл, который дос создает при старте. Так что разница даты его создания и значение RTC - это как раз uptime.

По идее можно читать дату создания любого такого виртуального устройства: PRN, AUX, CON

-----
Реверсивная инженерия - написание кода идентичного натуральному



 eXeL@B —› Вопросы новичков —› Поиск кода в программе
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати