Работаем над CronosPlus 3.04.72 со скальпилем и молотком :)

Тема в разделе "WASM.ZEN", создана пользователем trapmen, 6 мар 2008.

  1. trapmen

    trapmen TrapMen

    Публикаций:
    0
    Регистрация:
    18 фев 2008
    Сообщения:
    8
    Адрес:
    Nevermind
    В общем, молчание по поводу реверса сабжа, думаю, стоит понимать как полную капитуляцию реверсеров :(
    Либо, как в том анекдоте про неуловимого Джо, который нах%#* никому не нужен ;)

    В общем, попытаюсь более точно сформулировать задачу.
    Есть оболочка под кодовым названием "cronos_3_04_74_all_sn" :)
    Присутствуюет там такое файло:
    ; Generated by QuickSFV v2.35 on 2008-03-06 at 23:18:12
    ; http://www.QuickSFV.org
    ;
    ; 151668 01:00.36 2003-09-23 CroBugs.dll
    ; 17 04:46.46 2005-03-23 CroInfo
    ; 13047812 20:10.38 2008-03-01 Cronos.exe
    ; 1007 23:17.06 2008-03-06 CroSys.dat
    ; 32 23:17.06 2008-03-06 CroSys.tad
    CroBugs.dll E8CF38A4
    CroInfo CD67560B
    Cronos.exe F3DF3D98
    CroSys.dat 0234F80D
    CroSys.tad 9AC0E39B

    Над самим exeшником уже поработал некий "Evil Hacker", который основную муторную работу сделал:
    - распаковал exeшник
    - заNOPил сверку серийников банков

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

    Теперь осталось только немного довести до ума его труды :)
    Надо:
    1. раскопать формат хранения (структуру) файлов:
    а) Списка подключенных к системе банков (CroSys.dat, CroSys.tad)
    б) Самих банков данных (*.dat, *.tad, *.cpy)
    2. Научиться вскрывать защищенные паролем банки

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

    Вот что мне уже удалось накопать:
    Заюзав Иду 5.2.0.908 и плаг Hey-Reys 1.0.071108 получил более-менее вменяемые листинги некоторых интересных на мой взгляд функций:

    Код (Text):
    1. //----- (00557E40) --------------------------------------------------------
    2. signed int __userpurge sub_557E40<eax>(int a1<ecx>, int a2<ebp>, int a3, int a4, int a5, char a6)
    3. {
    4.   int v6; // ebx@1
    5.   unsigned int v7; // esi@1
    6.   char *v8; // eax@3
    7.   char *v9; // esi@3
    8.   unsigned __int8 v10; // cf@4
    9.   char v11; // cl@6
    10.   int v12; // eax@8
    11.   unsigned __int8 v13; // cf@11
    12.   char v14; // zf@11
    13.   int v15; // eax@11
    14.   signed int v16; // ecx@11
    15.   char *v17; // edi@11
    16.   char *v18; // esi@11
    17.   int v19; // edi@18
    18.   int v20; // esi@18
    19.   char v21; // bl@20
    20.   signed int result; // eax@24
    21.   unsigned __int8 v23; // bl@25
    22.   int v24; // eax@29
    23.   int v25; // esi@30
    24.   int v26; // eax@31
    25.   int v27; // eax@1
    26.   int v28; // eax@2
    27.   unsigned __int8 v29; // dl@6
    28.   int v30; // ecx@18
    29.   int v31; // eax@18
    30.   unsigned __int8 v32; // bl@18
    31.   int v33; // edx@18
    32.   int v34; // eax@18
    33.   int v35; // edx@18
    34.   int v36; // eax@20
    35.   int v37; // edx@20
    36.   int *v38; // ecx@23
    37.   int v39; // eax@25
    38.   int v40; // edx@25
    39.   LPVOID v41; // eax@30
    40.   int v42; // eax@31
    41.   int v43; // edx@31
    42.   char v44; // cl@31
    43.   char v45; // ST08_1@31
    44.   char v46; // [sp+108h] [bp-13Ch]@1
    45.   int v47; // [sp+0h] [bp-244h]@1
    46.   int *v48; // [sp+234h] [bp-10h]@1
    47.   int v49; // [sp+22Ch] [bp-18h]@1
    48.   int v50; // [sp+112h] [bp-132h]@1
    49.   char v51; // [sp+116h] [bp-12Eh]@1
    50.   int v52; // [sp+230h] [bp-14h]@1
    51.   _BYTE v53[237]; // [sp+11Bh] [bp-129h]@2
    52.   int v54; // [sp+240h] [bp-4h]@3
    53.   char v55; // [sp+Ch] [bp-238h]@3
    54.   char v56; // [sp+19h] [bp-22Bh]@11
    55.   int v57; // [sp+1Dh] [bp-227h]@18
    56.   __int16 v58; // [sp+1Bh] [bp-229h]@18
    57.   char v59; // [sp+21Ch] [bp-28h]@18
    58.   int v60; // [sp+218h] [bp-2Ch]@18
    59.   int v61; // [sp+214h] [bp-30h]@18
    60.   int v62; // [sp+220h] [bp-24h]@21
    61.   unsigned int v63; // [sp+224h] [bp-20h]@22
    62.   __int16 v64; // [sp+117h] [bp-12Dh]@23
    63.   __int16 v65; // [sp+119h] [bp-12Bh]@23
    64.   int v66; // [sp+208h] [bp-3Ch]@33
    65.  
    66.   v6 = a1;
    67.   strcpy(&v46, "CroFile");
    68.   v48 = &v47;
    69.   v49 = v6;
    70.   v50 = dword_DADD14;
    71.   v51 = byte_DADD18;
    72.   v27 = sub_AF2365((int)&v52);
    73.   sub_AF318E(v27);
    74.   v7 = 0;
    75.   do
    76.   {
    77.     v28 = sub_AF319B();
    78.     v53[v7++] = ((unsigned int)((v28 << 8) + ((unsigned __int64)(-2147418109i64 * (v28 << 8)) >> 32)) >> 31)
    79.               + (unsigned __int8)((signed int)((v28 << 8) + ((unsigned __int64)(-2147418109i64 * (v28 << 8)) >> 32)) >> 14);
    80.   }
    81.   while ( v7 < 0xE9 );
    82.   v54 = 0;
    83.   v52 = v6 + 10804;
    84.   sub_53B100((int *)(v6 + 10804), (int)&v55, 252);
    85.   v9 = &v46;
    86.   v8 = &v55;
    87.   while ( 1 )
    88.   {
    89.     v10 = *v8 < (unsigned __int8)*v9;
    90.     if ( *v8 != *v9 )
    91.       break;
    92.     if ( !*v8 )
    93.       goto LABEL_8;
    94.     v29 = *(v8 + 1);
    95.     v11 = *(v8 + 1);
    96.     v10 = v29 < *(v9 + 1);
    97.     if ( v29 != *(v9 + 1) )
    98.       break;
    99.     v8 += 2;
    100.     v9 += 2;
    101.     if ( !v11 )
    102.     {
    103. LABEL_8:
    104.       v12 = 0;
    105.       goto LABEL_10;
    106.     }
    107.   }
    108.   v12 = -v10 - (v10 - 1);
    109. LABEL_10:
    110.   if ( v12 )
    111.     goto LABEL_37;
    112.   v16 = 2;
    113.   v17 = (char *)&v50 + 3;
    114.   v18 = &v56;
    115.   v15 = 0;
    116.   v13 = 0;
    117.   v14 = 1;
    118.   do
    119.   {
    120.     if ( !v16 )
    121.       break;
    122.     v13 = *v18 < (unsigned __int8)*v17;
    123.     v14 = *v18++ == *v17++;
    124.     --v16;
    125.   }
    126.   while ( v14 );
    127.   if ( !v14 )
    128.     v15 = -v13 - (v13 - 1);
    129.   if ( v15 > 0 )
    130.   {
    131. LABEL_37:
    132.     v39 = sub_98EBB0((int)&v59, &v56, 2);
    133.     LOBYTE(v54) = 4;
    134.     v23 = sub_991D50(v39);
    135.     v60 = v40;
    136.     LOBYTE(v54) = 0;
    137.     if ( (v59 & 0x5F) == 16 )
    138.     {
    139.       if ( v62 )
    140.         sub_99BEF0((void **)&v62, v63, 0);
    141.     }
    142.     if ( v23 > 2u )
    143.     {
    144.       v24 = sub_904D50();
    145.       if ( v24 )
    146.       {
    147.         v41 = sub_B1C78C(v24, 28);
    148.         v25 = (int)v41;
    149.         *(_DWORD *)&a6 = v41;
    150.         LOBYTE(v54) = 5;
    151.         if ( v41 )
    152.         {
    153.           v42 = sub_5F8C60(v52);
    154.           v43 = *(_DWORD *)v42;
    155.           v45 = v44;
    156.           v52 = (int)&v45;
    157.           (*(int (__thiscall **)(int, char *))(v43 + 4))(v42, &v45);
    158.           v26 = sub_442780(v25, a2, 107, v45);
    159.         }
    160.         else
    161.         {
    162.           v26 = 0;
    163.         }
    164.         LOBYTE(v54) = 0;
    165.         v66 = v26;
    166.         sub_AF2183((int)&v66, (int)dword_CD5590);
    167.       }
    168.     }
    169.     result = 0;
    170.   }
    171.   else
    172.   {
    173.     v20 = a3;
    174.     v19 = a5;
    175.     v30 = (unsigned __int16)v57;
    176.     *(_WORD *)a3 = v58;
    177.     *(_DWORD *)v19 = v30;
    178.     *(_WORD *)(v6 + 20) = *(_WORD *)v20;
    179.     *(_DWORD *)(v6 + 10808) = *(_DWORD *)v19;
    180.     v31 = sub_98EBB0((int)&v59, &v56, 2);
    181.     LOBYTE(v54) = 1;
    182.     v32 = sub_991D50(v31);
    183.     v60 = v33;
    184.     LOBYTE(v54) = 0;
    185.     sub_4242B0((int)&v59);
    186.     *(_BYTE *)(v49 + 22) = v32;
    187.     v34 = sub_98EBB0((int)&v59, (char *)&v50 + 3, 2);
    188.     LOBYTE(v54) = 2;
    189.     v61 = sub_991D50(v34);
    190.     v60 = v35;
    191.     LOBYTE(v54) = 0;
    192.     sub_4242B0((int)&v59);
    193.     if ( v32 < (_BYTE)v61 )
    194.     {
    195.       if ( a6 & 2 )
    196.       {
    197.         v36 = sub_98EBB0((int)&v59, (char *)&v50 + 3, 2);
    198.         LOBYTE(v54) = 3;
    199.         v21 = sub_991D50(v36);
    200.         v60 = v37;
    201.         LOBYTE(v54) = 0;
    202.         if ( (v59 & 0x5F) == 16 )
    203.         {
    204.           if ( v62 )
    205.             sub_99BEF0((void **)&v62, v63, 0);
    206.         }
    207.         v38 = (int *)v52;
    208.         *(_BYTE *)(v49 + 22) = v21;
    209.         v64 = *(_WORD *)v20;
    210.         v65 = *(_DWORD *)v19;
    211.         sub_53B120(v38, (int)&v46, 252);
    212.       }
    213.     }
    214.     result = 1;
    215.   }
    216.   return result;
    217. }
    Присмотревшись к этой процедурке в OllyDbg и софт-айсе, мои догадки начали понемного подтверждаться - все ихние файлики данных унифицированы и открываются вроде как только через эту процедуру. Просто слишком они в ней что-то намудрили и я погряз в её анализе... :(

    В общем, предлагаю объединиться и вскрыть это дело.
    У кого еще есть какие дельные соображения по этому поводу?
    Если есть желание пообщаться в привате:
    ася 55-111-5
    trapmen гмаил.ком
    готов приобрести реальные наработки по этой теме.

    P.S.: Зарапидил исследуемые файлы и C-листинг, который выплюнул Hex-Rays: cronos_3_04_74_all_sn_reversed.rar
     
  2. letika

    letika New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    28
    Незачем плодить темы.
     
  3. Solo

    Solo New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    131
    давно уже все взломано и выяснено. И форматы файлов, и привязки/отвязки...
    но смысла продавать или просто рассказывать нет никакого.
    Проходи сам, если энтузиазма хватит :)
     
  4. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    Solo
    Если смысла продавать нет, то не жадничай, пиши статью и присылай её мне :).
     
  5. Solo

    Solo New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    131
    Aquila
    А смысл?
    продавать смысла нет, т.к. вырученная $1000-$2000 не стоят обрушения сложившегося рынка :)
     
  6. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    Solo
    Как какой смысл? Ты наполнишь им свою жизнь - напишешь статью для wasm.ru :).

    Ну, тогда ладно. Тогда не пиши. Хотя, как по мне, ничего страшного бы не случилось! :))
     
  7. trapmen

    trapmen TrapMen

    Публикаций:
    0
    Регистрация:
    18 фев 2008
    Сообщения:
    8
    Адрес:
    Nevermind
    Кстати, есть такая интересная программка Архивариус-3000, в ней появилась поддержка чтения банков Кроноса...
    На днях постараюсь её расковырять, думаю там мусора должно быть меньше, и попробую оттуда дёрнуть формат файлов...
     
  8. Solo

    Solo New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    131
    в Кронос+ мусора нет. Там просто С++ классы :)

    Архивариус, как написано на сайте, понимает формат Кронос, а не Кронос Плюс.
    А формат Кроноса можно понять прочитав первую ссылку этой темы...
     
  9. trapmen

    trapmen TrapMen

    Публикаций:
    0
    Регистрация:
    18 фев 2008
    Сообщения:
    8
    Адрес:
    Nevermind
    Только вот я эту тему почти неделю назад запостил и до сих пор пока еще не вкурил этот формат...
    А Архивариус банки CronosPlus довольно охотно открывает и создает по ним свой индекс...
    Так что думаю стоит его реверснуть, т.к. логично было бы предположить что в его функции чтения убрано все лишнее...
     
  10. acc200

    acc200 New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2018
    Сообщения:
    1
    Мне понятен азарт исследователя.
    Но, как многолетнему пользователю Cronos, вообще непонятен подход к продукту.
    Вы хотите поменять букву диска? Мля, да поменяйте уже. Сотрите все файлы CroSys, запустите кронос ► нажмите ключики(такие желтенькие в панели инструментов, прямо посередине панели) ► подключить все !!!
    укажи папку и ты поменял букву.
    Вы суете свой "скальпель" в продукт, и даже не пытались разобраться как он работает в обычном, штатном порядке.