Привет всем. вот я тут исследую программку одну. я если признатся честно - не особо силен в асме. вопщем вот вызов rnbosproquery и после него какой то счет идет. может ктонить объяснить, как ето в обратную сторону раскррутить и засунуть в квери чтоп она не лазила в ключ, а сама щитала? .text:01247F4B lea ecx, [esp+428h+var_408] .text:01247F4F push 4 .text:01247F51 lea edx, [esp+42Ch+var_420] .text:01247F55 push ecx .text:01247F56 lea eax, [esp+430h+var_41C] .text:01247F5A push edx .text:01247F5B push eax .text:01247F5C lea ecx, [esp+438h+var_404] .text:01247F60 push 38h .text:01247F62 push ecx .text:01247F63 call _RNBOsproQuery@24 ; RNBOsproQuery(x,x,x,x,x,x) .text:01247F68 mov eax, [esp+428h+var_420] .text:01247F6C sub eax, esi .text:01247F6E pop esi .text:01247F6F neg eax .text:01247F71 sbb eax, eax .text:01247F73 and al, 0FBh .text:01247F75 mov esp, ebp .text:01247F77 pop ebp .text:01247F78 retn
hABi2aL Тут же всё про эту функцию описано... В EAX копируется поле response32 - это последние 4 байта того, что сгенерировал ключ. Из response32 вычитается что-то (начальное значение ESI не приводится в вашем фрагменте кода). Код (Text): if(eax) eax = 0xFFFFFFFB;
Квантум,ну нифига я не понимаю в том что ты написал, но какой то намек чувствую. то есть - можно переписать квери взад? что оно делать то должно чтоп все нормалек работало?
квантум, у меня ета квери вызываеися четыре раза по адресам, на которые дамп указал алгоритм, значит в еси как раз и находится то число потом, которое и в ключе? тоесть мне нужно буквально свитч сделать в квери в зависимости от адреса и сложить тупо то что дали с етими числами? а их я в дебагере отслежу? я правильно понял? а сложение какое?
.text:01247AE0 push ebp .text:01247AE1 mov ebp, esp .text:01247AE3 and esp, 0FFFFFFF8h .text:01247AE6 sub esp, 424h .text:01247AEC push esi .text:01247AED push 0 ; time_t * .text:01247AEF mov esi, 80h .text:01247AF4 call _time .text:01247AF9 lea ecx, [eax+eax*2] .text:01247AFC lea ecx, [ecx+ecx*8] .text:01247AFF shl ecx, 2 .text:01247B02 sub ecx, eax .text:01247B04 lea ecx, [eax+ecx*4] .text:01247B07 shl ecx, 4 .text:01247B0A sub ecx, eax .text:01247B0C lea edx, [ecx+ecx*8] .text:01247B0F push edx ; unsigned int .text:01247B10 call _srand .text:01247B15 add esp, 8 .text:01247B18 .text:01247B18 loc_1247B18: ; CODE XREF: sub_1247AE0+7Aj .text:01247B18 cmp esi, 7Fh .text:01247B1B jg short loc_1247B21 .text:01247B1D test esi, esi .text:01247B1F jge short loc_1247B5C .text:01247B21 .text:01247B21 loc_1247B21: ; CODE XREF: sub_1247AE0+3Bj .text:01247B21 lea eax, [esp+428h+var_410] .text:01247B25 lea ecx, [esp+428h+var_418] .text:01247B29 push eax .text:01247B2A push ecx .text:01247B2B mov [esp+430h+var_410], 9999999Ah .text:01247B33 mov [esp+430h+var_40C], 40399999h .text:01247B3B mov [esp+430h+var_418], 0 .text:01247B43 mov [esp+430h+var_414], 0 .text:01247B4B call sub_1247A60 .text:01247B50 add esp, 8 .text:01247B53 call __ftol .text:01247B58 mov esi, eax вот вроде то что в еси пихает данные
Не важно что там в ESI. Главное, что после вычитания (SUB EAX,ESI) в EAX будет либо ноль, либо отличное от нуля значение. В зависимости от этого (ноль или не-ноль), ф-ция вернёт 0 или -5 (0xFFFFFFFB). Поэтому, я бы предположил сначала, что разработчики - лентяи, а значит: в response32 должно быть тоже значение что и в ESI. Итак, можно убрать вызов RNBOsproQuery вместе с шестью предшествующими пушами и поставить на их место MOV EAX,ESI и JMP 01247F6C.
не, так былоб конешно хорошо, но ети четыре вызова такие очевидные тока в одном месте, но лентяи ещё штук двадцать вызовов квери сделали. поэтому всетки придется переписать квери. в моем случае она выглядит так .text:01237AB0 ; __stdcall RNBOsproQuery(x,x,x,x,x,x) .text:01237AB0 _RNBOsproQuery@24 proc near ; CODE XREF: sub_11E1000+135p .text:01237AB0 ; sub_11E1200+138p ... .text:01237AB0 .text:01237AB0 arg_0= dword ptr 0Ch .text:01237AB0 arg_4= word ptr 10h .text:01237AB0 arg_8= dword ptr 14h .text:01237AB0 arg_C= dword ptr 18h .text:01237AB0 arg_10= dword ptr 1Ch .text:01237AB0 arg_14= dword ptr 20h .text:01237AB0 .text:01237AB0 push esi .text:01237AB1 push edi .text:01237AB2 mov esi, [esp+arg_0] .text:01237AB6 test esi, esi .text:01237AB8 jnz short loc_1237AC3 .text:01237ABA mov ax, 10h .text:01237ABE pop edi .text:01237ABF pop esi .text:01237AC0 retn 18h .text:01237AC3 ; ---------------------------------------------------------------------- ----- .text:01237AC3 .text:01237AC3 loc_1237AC3: ; CODE XREF: RNBOsproQuery(x,x,x,x,x,x)+8j .text:01237AC3 push esi .text:01237AC4 call _I386SPRO552SPRONETD@4 ; I386SPRO552SPRONETD(x) .text:01237AC9 mov edi, eax .text:01237ACB mov ax, [edi] .text:01237ACE cmp ax, 7243h .text:01237AD2 jnz short loc_1237B15 .text:01237AD4 mov word ptr [edi], 7242h .text:01237AD9 push edi .text:01237ADA mov eax, [esp+4+arg_14] .text:01237ADE mov ecx, [esp+4+arg_10] .text:01237AE2 mov edx, [esp+4+arg_C] .text:01237AE6 push eax .text:01237AE7 mov eax, [esp+8+arg_8] .text:01237AEB push ecx .text:01237AEC mov cx, [esp+0Ch+arg_4] .text:01237AF1 push edx .text:01237AF2 push eax .text:01237AF3 push ecx .text:01237AF4 push esi .text:01237AF5 call _SSP630AP@24 ; SSP630AP(x,x,x,x,x,x) .text:01237AFA push eax .text:01237AFB call _SSP630CO .text:01237B00 mov [edi+6], ax .text:01237B04 add esp, 8 .text:01237B07 mov word ptr [edi], 7243h .text:01237B0C mov ax, [edi+6] .text:01237B10 pop edi .text:01237B11 pop esi .text:01237B12 retn 18h .text:01237B15 ; ---------------------------------------------------------------------- ----- .text:01237B15 .text:01237B15 loc_1237B15: ; CODE XREF: RNBOsproQuery(x,x,x,x,x,x)+22j .text:01237B15 cmp ax, 7242h .text:01237B19 jnz short loc_1237B4A .text:01237B1B mov eax, [esp+arg_14] .text:01237B1F push edi .text:01237B20 mov ecx, [esp+4+arg_10] .text:01237B24 push eax .text:01237B25 mov edx, [esp+8+arg_C] .text:01237B29 push ecx .text:01237B2A mov cx, [esp+0Ch+arg_4] .text:01237B2F push edx .text:01237B30 mov eax, [esp+10h+arg_8] .text:01237B34 push eax .text:01237B35 push ecx .text:01237B36 push esi .text:01237B37 call _SSP630AP@24 ; SSP630AP(x,x,x,x,x,x) .text:01237B3C push eax .text:01237B3D call _SSP630CO .text:01237B42 add esp, 8 .text:01237B45 pop edi .text:01237B46 pop esi .text:01237B47 retn 18h .text:01237B4A ; ---------------------------------------------------------------------- ----- .text:01237B4A .text:01237B4A loc_1237B4A: ; CODE XREF: RNBOsproQuery(x,x,x,x,x,x)+69j .text:01237B4A mov eax, [esp+arg_14] .text:01237B4E mov ecx, [esp+arg_10] .text:01237B52 mov edx, [esp+arg_C] .text:01237B56 push eax .text:01237B57 mov eax, [esp+4+arg_8] .text:01237B5B push ecx .text:01237B5C mov cx, [esp+8+arg_4] .text:01237B61 push edx .text:01237B62 push eax .text:01237B63 push ecx .text:01237B64 push esi .text:01237B65 call _SSP630BK@24 ; SSP630BK(x,x,x,x,x,x) .text:01237B6A pop edi .text:01237B6B pop esi .text:01237B6C retn 18h .text:01237B6C _RNBOsproQuery@24 endp
Квантум, ещё вопрос вот я переписал вот так начало спроквери seg000:00057AB0 push ecx seg000:00057AB1 mov ecx, esi seg000:00057AB3 mov [esp+24h], ecx seg000:00057AB7 pop ecx seg000:00057AB8 add esp, 18h seg000:00057ABB retn 18h чего я сделал не так?))))) блин все во то хочется запихнуть еси туда, где он будет потом считыватся, так нет! нихера не получается
18h, а не 24h!!! Причём там хранится адрес response32, а не сам response32. Надо так: Код (Text): mov eax,[esp + 18h] mov [eax],ecx