В общем, молчание по поводу реверса сабжа, думаю, стоит понимать как полную капитуляцию реверсеров Либо, как в том анекдоте про неуловимого Джо, который нах%#* никому не нужен В общем, попытаюсь более точно сформулировать задачу. Есть оболочка под кодовым названием "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 получил более-менее вменяемые листинги некоторых интересных на мой взгляд функций: [c] //----- (00557E40) -------------------------------------------------------- signed int __userpurge sub_557E40<eax>(int a1<ecx>, int a2<ebp>, int a3, int a4, int a5, char a6) { int v6; // ebx@1 unsigned int v7; // esi@1 char *v8; // eax@3 char *v9; // esi@3 unsigned __int8 v10; // cf@4 char v11; // cl@6 int v12; // eax@8 unsigned __int8 v13; // cf@11 char v14; // zf@11 int v15; // eax@11 signed int v16; // ecx@11 char *v17; // edi@11 char *v18; // esi@11 int v19; // edi@18 int v20; // esi@18 char v21; // bl@20 signed int result; // eax@24 unsigned __int8 v23; // bl@25 int v24; // eax@29 int v25; // esi@30 int v26; // eax@31 int v27; // eax@1 int v28; // eax@2 unsigned __int8 v29; // dl@6 int v30; // ecx@18 int v31; // eax@18 unsigned __int8 v32; // bl@18 int v33; // edx@18 int v34; // eax@18 int v35; // edx@18 int v36; // eax@20 int v37; // edx@20 int *v38; // ecx@23 int v39; // eax@25 int v40; // edx@25 LPVOID v41; // eax@30 int v42; // eax@31 int v43; // edx@31 char v44; // cl@31 char v45; // ST08_1@31 char v46; // [sp+108h] [bp-13Ch]@1 int v47; // [sp+0h] [bp-244h]@1 int *v48; // [sp+234h] [bp-10h]@1 int v49; // [sp+22Ch] [bp-18h]@1 int v50; // [sp+112h] [bp-132h]@1 char v51; // [sp+116h] [bp-12Eh]@1 int v52; // [sp+230h] [bp-14h]@1 _BYTE v53[237]; // [sp+11Bh] [bp-129h]@2 int v54; // [sp+240h] [bp-4h]@3 char v55; // [sp+Ch] [bp-238h]@3 char v56; // [sp+19h] [bp-22Bh]@11 int v57; // [sp+1Dh] [bp-227h]@18 __int16 v58; // [sp+1Bh] [bp-229h]@18 char v59; // [sp+21Ch] [bp-28h]@18 int v60; // [sp+218h] [bp-2Ch]@18 int v61; // [sp+214h] [bp-30h]@18 int v62; // [sp+220h] [bp-24h]@21 unsigned int v63; // [sp+224h] [bp-20h]@22 __int16 v64; // [sp+117h] [bp-12Dh]@23 __int16 v65; // [sp+119h] [bp-12Bh]@23 int v66; // [sp+208h] [bp-3Ch]@33 v6 = a1; strcpy(&v46, "CroFile"); v48 = &v47; v49 = v6; v50 = dword_DADD14; v51 = byte_DADD18; v27 = sub_AF2365((int)&v52); sub_AF318E(v27); v7 = 0; do { v28 = sub_AF319B(); v53[v7++] = ((unsigned int)((v28 << 8) + ((unsigned __int64)(-2147418109i64 * (v28 << 8)) >> 32)) >> 31) + (unsigned __int8)((signed int)((v28 << 8) + ((unsigned __int64)(-2147418109i64 * (v28 << 8)) >> 32)) >> 14); } while ( v7 < 0xE9 ); v54 = 0; v52 = v6 + 10804; sub_53B100((int *)(v6 + 10804), (int)&v55, 252); v9 = &v46; v8 = &v55; while ( 1 ) { v10 = *v8 < (unsigned __int8)*v9; if ( *v8 != *v9 ) break; if ( !*v8 ) goto LABEL_8; v29 = *(v8 + 1); v11 = *(v8 + 1); v10 = v29 < *(v9 + 1); if ( v29 != *(v9 + 1) ) break; v8 += 2; v9 += 2; if ( !v11 ) { LABEL_8: v12 = 0; goto LABEL_10; } } v12 = -v10 - (v10 - 1); LABEL_10: if ( v12 ) goto LABEL_37; v16 = 2; v17 = (char *)&v50 + 3; v18 = &v56; v15 = 0; v13 = 0; v14 = 1; do { if ( !v16 ) break; v13 = *v18 < (unsigned __int8)*v17; v14 = *v18++ == *v17++; --v16; } while ( v14 ); if ( !v14 ) v15 = -v13 - (v13 - 1); if ( v15 > 0 ) { LABEL_37: v39 = sub_98EBB0((int)&v59, &v56, 2); LOBYTE(v54) = 4; v23 = sub_991D50(v39); v60 = v40; LOBYTE(v54) = 0; if ( (v59 & 0x5F) == 16 ) { if ( v62 ) sub_99BEF0((void **)&v62, v63, 0); } if ( v23 > 2u ) { v24 = sub_904D50(); if ( v24 ) { v41 = sub_B1C78C(v24, 28); v25 = (int)v41; *(_DWORD *)&a6 = v41; LOBYTE(v54) = 5; if ( v41 ) { v42 = sub_5F8C60(v52); v43 = *(_DWORD *)v42; v45 = v44; v52 = (int)&v45; (*(int (__thiscall **)(int, char *))(v43 + 4))(v42, &v45); v26 = sub_442780(v25, a2, 107, v45); } else { v26 = 0; } LOBYTE(v54) = 0; v66 = v26; sub_AF2183((int)&v66, (int)dword_CD5590); } } result = 0; } else { v20 = a3; v19 = a5; v30 = (unsigned __int16)v57; *(_WORD *)a3 = v58; *(_DWORD *)v19 = v30; *(_WORD *)(v6 + 20) = *(_WORD *)v20; *(_DWORD *)(v6 + 10808) = *(_DWORD *)v19; v31 = sub_98EBB0((int)&v59, &v56, 2); LOBYTE(v54) = 1; v32 = sub_991D50(v31); v60 = v33; LOBYTE(v54) = 0; sub_4242B0((int)&v59); *(_BYTE *)(v49 + 22) = v32; v34 = sub_98EBB0((int)&v59, (char *)&v50 + 3, 2); LOBYTE(v54) = 2; v61 = sub_991D50(v34); v60 = v35; LOBYTE(v54) = 0; sub_4242B0((int)&v59); if ( v32 < (_BYTE)v61 ) { if ( a6 & 2 ) { v36 = sub_98EBB0((int)&v59, (char *)&v50 + 3, 2); LOBYTE(v54) = 3; v21 = sub_991D50(v36); v60 = v37; LOBYTE(v54) = 0; if ( (v59 & 0x5F) == 16 ) { if ( v62 ) sub_99BEF0((void **)&v62, v63, 0); } v38 = (int *)v52; *(_BYTE *)(v49 + 22) = v21; v64 = *(_WORD *)v20; v65 = *(_DWORD *)v19; sub_53B120(v38, (int)&v46, 252); } } result = 1; } return result; } [/c] Присмотревшись к этой процедурке в OllyDbg и софт-айсе, мои догадки начали понемного подтверждаться - все ихние файлики данных унифицированы и открываются вроде как только через эту процедуру. Просто слишком они в ней что-то намудрили и я погряз в её анализе... В общем, предлагаю объединиться и вскрыть это дело. У кого еще есть какие дельные соображения по этому поводу? Если есть желание пообщаться в привате: ася 55-111-5 trapmen гмаил.ком готов приобрести реальные наработки по этой теме... P.S.: Зарапидил исследуемые файлы и C-листинг, который выплюнул Hex-Rays: cronos_3_04_74_all_sn_reversed.rar