Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Декомпиляция Clipper / 5 сообщений из 5, страница 1 из 1
04.01.2010, 20:19:27
    #36397125
xneo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Декомпиляция Clipper
Такой вопрос.
Есть прога под 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
05.01.2010, 10:13:41
    #36397538
Vowk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Декомпиляция Clipper
Надо кроме .ASM получить еще .LST файл. Там будут проставлены адреса памяти. Или интерактивным дизассембером типа IDA можно вроде посмотреть. Километр текста будет, но другого выхода нет. Возможно, понадобится мощный и быстрый редактор текста типа Multiedit, чтобы быстро передвигаться по текстовому файлу.
Можно еще отладчиком попытаться дойти до этой функции (типа CV.EXE).
Вообще если нет больших секретов, то можешь .EXE как-нибудь передать (или на zvvzvv@list.ru), попробую посмотреть тоже. Ну а если военная тайна - то сам пробуй.
...
Рейтинг: 0 / 0
05.01.2010, 18:59:21
    #36398202
xneo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Декомпиляция Clipper
Огромное спасибо. Дело продвинулось с помощью IDA :)
Исполняемый модуль бросать не очень хочу так как могу получить по бошке :)

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

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

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

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

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

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

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


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