powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Декомпиляция Clipper
5 сообщений из 5, страница 1 из 1
Декомпиляция Clipper
    #36397125
xneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вопрос.
Есть прога под DOS написанная на Clipper.
В файле встречаются строки:
авторCopyright 1988,1989 by Gregory A. Martin
Version 1.83 - May 23, 1989
CLIPPER 87 Non-Demo Version
В своей работе программа шифрует некоторые текстовые строки.
Интересует разбор метода шифрования. На глаз видно что строки шифруются блоками по 8 байт. Возможно используется какойто стандартный метод шифрования. При изменении одного бита в исходной строке изменяется кардинально весь блок результата.
Попробовал декомпильнуть с помощью Valkirya/Rescue. Нашёл следующую функцию внутри.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
FUNCTION FIO2SOST(_Undef)

   LOCAL _Undef1, _Undef2, nNum, aArr[ 4 ], sStr := ""

   _Undef := PADR(_Undef,  48 )

   FOR nNum :=  1  TO LEN(_Undef) STEP  8 

      _Undef1 := BIN2L(CHARMIRR(SUBSTR(_Undef, nNum,  4 )))
      _Undef2 := BIN2L(CHARMIRR(SUBSTR(_Undef, nNum +  4 ,  4 )))
      E091125(@_Undef1, @_Undef2)

      IF _Undef1 >  4294967295  .OR. _Undef2 >  4294967295 
         DSP_ERR("l" + STR(_Undef1) + "r" + STR(_Undef2))
      ENDIF

      sStr := sStr + (NTOC(_Undef1,  16 ,  8 , "0") + NTOC(_Undef2,  16 ,  8 , "0");   )

   NEXT

RETURN sStr + NTOC(RECNO(),  16 ,  4 , "0")

Судя из текста всё упёрлось в функцию с именем E091125 , которой передаётся два указателя?(я делфист :)) на параметры.
Дальше по файлу .MOD нашёл смещение функции:
Код: plaintext
 0001   0066  04b290  E091125 00cdb5 C/ASM 
Длинна функции по ходу 102 байта. Декомпильнул...
Код: plaintext
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.
push  bp
mov   bp, sp
sub   sp,  0008 
mov   ax,  0001 
push  ax
call  1A42:06B4
pop   cx
mov   [bp- 02 ], dx
mov   [bp- 04 ], ax
mov   ax,  0002 
push  ax
call  1A42:06B4
pop   cx
mov   [bp- 06 ], dx
mov   [bp- 08 ], ax
push  ss
lea   ax, [bp- 08 ]
push  ax
push  ss
lea   ax, [bp- 04 ]
push  ax
push  ds
mov   ax,  6204 
push  ax
call  06E7:00F4
add   sp, 000C
mov   ax,  0001 
push  ax
push  word ptr [bp- 02 ]
push  word ptr [bp- 04 ]
call  1A42:07E0
add   sp,  0006 
mov   ax,  0002 
push  ax
push  word ptr [bp- 06 ]
push  word ptr [bp- 08 ]
call  1A42:07E0
add   sp,  0006 
mov   sp, bp
pop   bp
retf
Всё... дальше пока штопор :)
Не понятно ничего с CALL... куда они идут?

Помогите плиз намёком каким... с клипером не знаком :)
...
Рейтинг: 0 / 0
Декомпиляция Clipper
    #36397538
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо кроме .ASM получить еще .LST файл. Там будут проставлены адреса памяти. Или интерактивным дизассембером типа IDA можно вроде посмотреть. Километр текста будет, но другого выхода нет. Возможно, понадобится мощный и быстрый редактор текста типа Multiedit, чтобы быстро передвигаться по текстовому файлу.
Можно еще отладчиком попытаться дойти до этой функции (типа CV.EXE).
Вообще если нет больших секретов, то можешь .EXE как-нибудь передать (или на zvvzvv@list.ru), попробую посмотреть тоже. Ну а если военная тайна - то сам пробуй.
...
Рейтинг: 0 / 0
Декомпиляция Clipper
    #36398202
xneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо. Дело продвинулось с помощью IDA :)
Исполняемый модуль бросать не очень хочу так как могу получить по бошке :)

В коде присутствует и функция криптования и функция декриптования. Сложность в том что функция декриптования достаточно разветвлённая и громадная. Проанализировать на ассемблере что она делает сложно. Но судя из того что данные шифруются именно блоками по 8 байт я склоняюсь к тому что это один из стандартных методов. Вот какой... не знаю :)

Сам код вроде не использует никаких внешних вызовов и никаких прерываний DOS. Есть только JMP и CALL инструкции внутри модуля.

Отсюда вопрос:
Если я просто загружу модуль целиком в буффер скажем в прогу на Делфи, передам через стек параметры и сделаю CALL-вызов по смещению входа в процедуру дешифровки, такой ход может пройти? :)
...
Рейтинг: 0 / 0
Декомпиляция Clipper
    #36398569
clihlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xneo,

нет. нельзя из 32 разрядного кода просто так вызывать 16-ти разрядный. Инструкции типо
call 1A42:07E0 под виндой с ее flat моделью памяти никчему хорошему не приведут.

ЗЫ. для IDA есть плагин HexRays - это декомпилятор в C. Не то чтобы очень хороший код на выходе получается... но понимать всеже будет легче, чем асм.
...
Рейтинг: 0 / 0
Декомпиляция Clipper
    #36399561
Памас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
clihltxneo,

нет. нельзя из 32 разрядного кода просто так вызывать 16-ти разрядный. Инструкции типо
call 1A42:07E0 под виндой с ее flat моделью памяти никчему хорошему не приведут.

ЗЫ. для IDA есть плагин HexRays - это декомпилятор в C. Не то чтобы очень хороший код на выходе получается... но понимать всеже будет легче, чем асм.
вам поможет SoftICE и возможно "Григорьев...", неужели до сих пор "хитроганные" живут?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Декомпиляция Clipper
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]