Код (Text): .text:00005360 arg_0 = dword ptr 4 .text:00005360 arg_4 = dword ptr 8 .text:00005360 arg_8 = dword ptr 0Ch .text:00005360 .text:00005360 mov eax, [esp+arg_4] .text:00005364 mov edx, [esp+arg_8] .text:00005368 mov ecx, eax .text:0000536A push ebx .text:0000536B shr eax, 10h .text:0000536E mov ebx, eax .text:00005370 mov eax, edx .text:00005372 push ebp .text:00005373 push esi .text:00005374 shr edx, 10h .text:00005377 and eax, 0FFFFh .text:0000537C mov esi, edx .text:0000537E mov edx, eax .text:00005380 imul eax, ebx .text:00005383 push edi .text:00005384 mov edi, eax .text:00005386 and ecx, 0FFFFh .text:0000538C mov eax, esi .text:0000538E imul eax, ecx .text:00005391 imul edx, ecx .text:00005394 mov ebp, [esp+10h+arg_0] .text:00005398 add eax, edi .text:0000539A cmp eax, edi .text:0000539C mov edi, eax .text:0000539E sbb ecx, ecx .text:000053A0 mov [ebp+0], edx .text:000053A3 neg ecx .text:000053A5 shl eax, 10h .text:000053A8 shl ecx, 10h .text:000053AB shr edi, 10h .text:000053AE add edx, eax .text:000053B0 add ecx, edi .text:000053B2 cmp edx, eax .text:000053B4 mov [ebp+0], edx .text:000053B7 jnb short loc_53BA .text:000053B9 inc ecx .text:000053BA .text:000053BA loc_53BA: ; CODE XREF: sub_5360+57j .text:000053BA imul esi, ebx .text:000053BD add esi, ecx .text:000053BF pop edi .text:000053C0 mov [ebp+4], esi .text:000053C3 pop esi .text:000053C4 pop ebp .text:000053C5 xor eax, eax .text:000053C7 pop ebx .text:000053C8 retn .text:000053C8 sub_5360 endp
Broken_Sword Я уж подумал, что ты новый цикл "мелких задач для крупных мозгов" начал в помощь начинающим обфускаторам и их оппонентам )
Broken Sword Насколько я понимаю, некоторые инструкции при обфускации заменяются на совокупности других инструкций, равнозначных но не очевидных сразу и тем самым достигается сложность анализа и выполняемость машиной ничем не отличаемого от оригинала. Вот к примеру команда1 обфускатором переваривается в: mov reg1,reg2 команды n штук mov reg1,reg2 команды n штук Если и этот код подать через обфускатор но mov reg1, reg2 заменить на простейшие: push reg1 pop reg2 то получим: push reg1 pop reg2 команды n штук push reg1 pop reg2 команды n штук Но ведь все равно какаять закономерность в таком коде есть, к примеру анализируя обфусцированный код, можем увидеть, что: <опкод push> reg1 <опкод pop> reg2 Я думаю раз есть закономерность, то можно и деобфусцировать, то бишь опираясь на <опкод push >,<опкод pop>. Наверное можно написать сканер поиска закономерностей по опкодам, а по закономерностями думаю будет легче деобфусцировать. (Прав ли я) ? (нет, то почему) : (иначе насколько?)
EvilsInterrupt Задача обфускации усложнить анализ кода. Наличие закономерностей разумеется облегчает анализ, но от этого он не становится тривиальным (если конечно речь не идет о повторяющихся 1:1 кусках кода). Broken Sword привел наглядный пример - если ты с таким алгоритмом еще не встречался, то по первым признакам (shr и shl на 10h, 4-е imul'а, sbb и jnb для учета переносов) сразу возникает подозрение на обычное умножение, но для 100% ответа все-таки нужно все аккуратно проанализировать, чтобы убедиться в отсутствии невидимых на первый взгляд фишек