Прива народ ! Сижу тут ковыряю одну программку и натолкнулся на один интересный кусок кода ) вот он : ********************************************************* lea edi, ds:47E438h // Указатель на массив элементов так 1024 %)) loc_4431FB: shr esi, 1 jnb short loc_44320C xor eax, [edi] xor ebx, [edi+4] xor ecx, [edi+8] xor edx, [edi+0Ch] test esi, esi loc_44320C: lea edi, [edi+10h] jnz short loc_4431FB mov esi, [ebp+var_4] lea edi, ds:47E638h loc_44321A: shr esi, 1 jnb short loc_44322B xor eax, [edi] xor ebx, [edi+4] xor ecx, [edi+8] xor edx, [edi+0Ch] test esi, esi loc_44322B: lea edi, [edi+10h] jnz short loc_44321A xor esi, esi xor edi, edi loc_443234: bt edx, 4 rcl ecx, 4 jnb short loc_44325D xor esi, eax xor edi, ebx loc_443241: rcr edx, 5 bt ebx, 1Bh rcr eax, 4 rcl ebx, 5 jnb short loc_443234 xor eax, 800008h xor ebx, 80000300h jmp short loc_443234 ********************************************************* Так вот сам вопрос, возможно ли зная выходные данные (нужны только edi, esi) данного куска кода написать функцию которая получает исходные данные (нужны только edi, esi). Если нет, то почему %) Сенкс.
Да, 4 dd по нему. Я просто не весь кусок кода привел, edi и esi ссылаются на одну переменную длинной 64 бита. (edi на первую часть, esi на вторую).
Все наверное посмотрели данный пост, думаю что код интересный, но вопрос остался открытым. Возможно или нет ? Как я посмотрел, думаю что НЕТ. Хотя разработчики конечно написали генератор данного куска кода, складывается впечетление что данная функция необратима, из этого выход только один. Или байты править, или брутофорс (что есть очень долго). Сенкс.
q_q Я думаю что кода достаточно, на всякий момент показываю более: .text:004431E7 add esp, 0Ch .text:004431EA xor eax, eax .text:004431EC xor ebx, ebx .text:004431EE xor ecx, ecx .text:004431F0 xor edx, edx перед данным куском кода я всё сделал, то есть код полностью обратим Сенкс.
а переход на loc_443241 идет (полный почти текст): .text:004431EA xor eax, eax .text:004431EC xor ebx, ebx .text:004431EE xor ecx, ecx .text:004431F0 xor edx, edx .text:004431F2 mov esi, [ebp+var_8] .text:004431F5 lea edi, ds:47E438h .text:004431FB .text:004431FB loc_4431FB: ; CODE XREF: sub_4431D0+3Fj .text:004431FB shr esi, 1 .text:004431FD jnb short loc_44320C .text:004431FF xor eax, [edi] .text:00443201 xor ebx, [edi+4] .text:00443204 xor ecx, [edi+8] .text:00443207 xor edx, [edi+0Ch] .text:0044320A test esi, esi .text:0044320C .text:0044320C loc_44320C: ; CODE XREF: sub_4431D0+2Dj .text:0044320C lea edi, [edi+10h] .text:0044320F jnz short loc_4431FB .text:00443211 mov esi, [ebp+var_4] .text:00443214 lea edi, ds:47E638h .text:0044321A .text:0044321A loc_44321A: ; CODE XREF: sub_4431D0+5Ej .text:0044321A shr esi, 1 .text:0044321C jnb short loc_44322B .text:0044321E xor eax, [edi] .text:00443220 xor ebx, [edi+4] .text:00443223 xor ecx, [edi+8] .text:00443226 xor edx, [edi+0Ch] .text:00443229 test esi, esi .text:0044322B .text:0044322B loc_44322B: ; CODE XREF: sub_4431D0+4Cj .text:0044322B lea edi, [edi+10h] .text:0044322E jnz short loc_44321A .text:00443230 xor esi, esi .text:00443232 xor edi, edi .text:00443234 .text:00443234 loc_443234: ; CODE XREF: sub_4431D0+7Ej .text:00443234 ; sub_4431D0+8Bj .text:00443234 bt edx, 4 .text:00443238 rcl ecx, 4 .text:0044323B jnb short loc_44325D .text:0044323D xor esi, eax .text:0044323F xor edi, ebx .text:00443241 .text:00443241 loc_443241: ; CODE XREF: sub_4431D0+8Fj .text:00443241 ; sub_4431D0+93j .text:00443241 rcr edx, 5 .text:00443244 bt ebx, 1Bh .text:00443248 rcr eax, 4 .text:0044324B rcl ebx, 5 .text:0044324E jnb short loc_443234 .text:00443250 xor eax, 800008h .text:00443255 xor ebx, 80000300h .text:0044325B jmp short loc_443234 .text:0044325D ; ---------------------------------------------------------------------- ----- .text:0044325D .text:0044325D loc_44325D: ; CODE XREF: sub_4431D0+6Bj .text:0044325D test edx, edx .text:0044325F jnz short loc_443241 .text:00443261 test ecx, ecx .text:00443263 jnz short loc_443241
Накати на нее криптосечер. Если алгоритм известный, то по таблице должен найти. Вроде где-то в инструментах был, если мой побоишься пускать _925312770__cryptosearcher.exe
из конечных esi и edi, т.е. те значения, которые будут в этих регистрах, когда eip будет равен 443265, можно получить входные eax, ebx, ecx, edx., т.е. когда eip равен 443230. а дальше, если у тебя есть возможность менять 2 локальных параметра var_4 и var_8, а также значения элементов массивов 47E438h и 47E638h, все легко обращается вообще, я бы хотел еще более точнее услышать, что нужно, а то все если да если. объясни, что ты можешь менять