Сейчас на форуме: Magister Yoda, johnniewalker, Kybyx, vsv1, r0lka, -Sanchez- (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› разобраться в формате хранения бд, не беспл
Посл.ответ Сообщение

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

Создано: 16 ноября 2010 20:39
· Личное сообщение · #1

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

Code:
  1. .text:0040B3F1 loc_40B3F1:                             ; CODE XREF: sub_40B2E4+1FBj
  2. .text:0040B3F1 push    ebx
  3. .text:0040B3F2 mov     eax, [ebp+var_3C]
  4. .text:0040B3F5 push    eax
  5. .text:0040B3F6 call    sub_4023C4      << v listinge
  6. .text:0040B3FB mov     [ebp+var_20], 20h
  7. .text:0040B401 mov     [ebp+var_1004C], eax
  8. .text:0040B407 add     esp, 8
  9. .text:0040B40A fild    [ebp+var_1004C]
  10. .text:0040B410 mov     edx, [ebp+var_34]
  11. .text:0040B413 fsubr   dbl_595DD0
  12. .text:0040B419 fstp    dbl_595DD0
  13. .text:0040B41F cmp     dword ptr [edx+244ACh], 0
  14. .text:0040B426 jz      short loc_40B472
  15. .text:0040B428 mov     [ebp+var_10050], ebx
  16. .text:0040B42E fild    [ebp+var_10050]
  17. .text:0040B434 fsubr   ds:flt_40B550
  18. .text:0040B43A mov     ecx, [ebp+var_38]
  19. .text:0040B43D shl     ecx, 0Eh
  20. .text:0040B440 add     eax, ecx
  21. .text:0040B442 movzx   eax, word ptr [ebp+eax*2+var_1004C+2]
  22. .text:0040B44A mov     [ebp+var_10054], eax
  23. .text:0040B450 fild    [ebp+var_10054]
  24. .text:0040B456 fmul    ds:flt_40B554
  25. .text:0040B45C fadd    ds:flt_40B558
  26. .text:0040B462 fld     ds:tbyte_40B55C
  27. .text:0040B468 fmulp   st(1), st
  28. .text:0040B46A fdiv    qword ptr [edi]
  29. .text:0040B46C fmulp   st(1), st
  30. .text:0040B46E fstp    qword ptr [esi]
  31. .text:0040B470 jmp     short loc_40B4D8
  32. .text:0040B472 ; ---------------------------------------------------------------------- -----
  33. .text:0040B472
  34. .text:0040B472 loc_40B472:                             ; CODE XREF: sub_40B2E4+142j
  35. .text:0040B472 mov     edx, [ebp+var_38]
  36. .text:0040B475 shl     edx, 0Eh
  37. .text:0040B478 add     edx, eax
  38. .text:0040B47A movzx   ecx, [ebp+edx*2+var_10048]
  39. .text:0040B482 mov     [ebp+var_10058], ecx
  40. .text:0040B488 fild    [ebp+var_10058]
  41. .text:0040B48E fld     ds:flt_40B554
  42. .text:0040B494 fsub    dbl_595DD0
  43. .text:0040B49A fmulp   st(1), st
  44. .text:0040B49C movzx   eax, [ebp+edx*2+var_10046]
  45. .text:0040B4A4 mov     [ebp+var_1005C], eax
  46. .text:0040B4AA fild    [ebp+var_1005C]
  47. .text:0040B4B0 fmul    dbl_595DD0
  48. .text:0040B4B6 faddp   st(1), st
  49. .text:0040B4B8 fld     ds:tbyte_40B55C
  50. .text:0040B4BE fmulp   st(1), st
  51. .text:0040B4C0 fdiv    qword ptr [edi]
  52. .text:0040B4C2 mov     [ebp+var_10060], ebx
  53. .text:0040B4C8 fild    [ebp+var_10060]
  54. .text:0040B4CE fsubr   ds:flt_40B550
  55. .text:0040B4D4 fmulp   st(1), st
  56. .text:0040B4D6 fstp    qword ptr [esi]


данные выводятся ввиде двух матриц значений (24х35), а в бд хранятся в неявном виде (BLOB).
0040B4DC сравнивает позицию в строке, т.е. функция выше повторяется для каждого значения. это наглядно видно в ида, когда оставить брек без остановки, только на подсчет проходов. следовательно именно в коде выше происходит обработка значения.

дальше этих размышлений дело не идет, так как нет возможности (времени) расшифровать эти асм функции в приемлимый вид арифметических и других действий.
спрашиваю у более опытных товарищей, правильным ли путем движется мысль? совет в направлении или комментарии приветствуются. если кто желает помочь со всей задачей в целом (конвертер или алгоритм), предоставлю прогу и вознаграждение по факту в 30wmz. icq 591539444
P.S. прога для узких задач, так что в паблик на форум не хочется выкладывать. кто реально может помочь в асю или лс.

2219_16.11.2010_CRACKLAB.rU.tgz - func.txt



Ранг: 20.2 (новичок), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 17 ноября 2010 12:12
· Личное сообщение · #2

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



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

Создано: 17 ноября 2010 12:38
· Личное сообщение · #3

ticketsvl

прога на чем писана? похоже на Дельфу ( CODE XREF: _TAnalisForm_DataIBTableAfterScroll+1B1)

если да - wellcome to IDR (Interactive Delphi Reconstructor)
топик здесь на форуме, поищите



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

Создано: 17 ноября 2010 13:35
· Личное сообщение · #4

спасибо за совет. попробую, но пока это для меня также сложно как и разбор алгоритма.

еще такой вопрос к знатокам - значения у нас идут вида 7,9423628851996284084e1, а данные как говорил в BLOB (можно считать хекс). как я понимаю, хрантиться будет в double. наткнулся на яваскриптовый код
babbage.cs.qc.edu/IEEE-754/Decimal.html вопрос в том, насколько он точный? для значения выше хекс будет 401FC4FAC6B39620 ?
пробовал сам по аналогии с проскальзывающим здесь кодом подправить следующий код
Code:
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. int main( void )
  5. {
  6. long double x = 7.9423628851996284084;
  7. long double y;
  8. RtlCopyMemory(&y, &x, sizeof( long double ));
  9. printf("Float Value = %1.20Lf Hex Value = 0x%x", x, y);
  10. return 0;
  11. }

но выдающее значение весьма сомнительно. Float Value = 7.94236288519962840800 Hex Value = 0x9cb10000
скорее всего выше где-то ошибка.

сам массив (матрица 24х35) 9000байт. интересно какой там может быть формат, неужели какой угодно?



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 17 ноября 2010 13:37
· Личное сообщение · #5

sendersu пишет:
похоже на Дельфу

Нет, это билдер.

P.S. И с каких это пор Delphi использует секцию .text?



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

Создано: 17 ноября 2010 13:42
· Личное сообщение · #6

sendersu
да на дельфе, писал в первой месаге. идр давно попробовал. он для этой проги хуже чем dede. показывает ошибку "cannot find table of initalization ..." и потом инфа только в закладке forms.
да и сомневаюсь, что там прямо будет убодочитаемый код, а не таже асм функция что выше.



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

Создано: 17 ноября 2010 14:06
· Личное сообщение · #7

int
посмотрел, нет секций 'code', 'bss' они у всех делфи прог или только обычно?
peid не доверяю в автоматическом определении...



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

Создано: 17 ноября 2010 23:30
· Личное сообщение · #8

ticketsvl
double - 8 байт


пример перевода дабла в хекс строку

Code:
  1. char *doubleToRawString(double x) {
  2.     // sizeof(long long) == 8.
  3.  
  4.     char *buffer = new char[32];
  5.     sprintf(buffer, "%llx", *(unsigned long long *)&x);
  6.     return buffer;
  7. }


ticketsvl пишет:
показывает ошибку "cannot find table of initalization ..." и потом инфа только в закладке forms.

как написал int - ето не Дельфи а Билдер, IDR же работает только с Дельфями....



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

Создано: 18 ноября 2010 02:42 · Поправил: Hexxx
· Личное сообщение · #9

без бинаря, тут врядли что-то можно сделать. Вот как угадать что в dbl_595DD0 или в offset unk_595DD8? Да и по тексту декомпилировать сложнее, чем рассматривать в IDA: нет возможности юзать фичи иды для облегчения процесса восстановления кода.

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




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

Создано: 19 ноября 2010 03:42
· Личное сообщение · #10

Hexxx
скинул лс

sendersu
про билдер понятно и за код спасибо, правда у меня он не скомпилился на Borland C++ 5.5.1 Too many types in declaration in function main
пробовал править, тоже ерунда получается. поищу посвежее компилятор...



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 19 ноября 2010 21:27
· Личное сообщение · #11

int пишет:
И с каких это пор Delphi использует секцию .text?

с 2006



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

Создано: 20 ноября 2010 05:08
· Личное сообщение · #12

всем спасибо за помощь. задача успешно выполнена. краклаб зебест.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 20 ноября 2010 09:49
· Личное сообщение · #13

Тогда закрою топик.


 eXeL@B —› Крэки, обсуждения —› разобраться в формате хранения бд, не беспл
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати