Enigma Virtual Box が一部の環境でクラッシュする理由が酷すぎる件
push SSZ00482A64_kernel32_dll call jmp_kernel32.dll!GetModuleHandleA test eax,eax jz L00482A5A push SSZ00482A74_CreateActCtxW push eax call jmp_kernel32.dll!GetProcAddress mov [ebp-04h],eax cmp dword ptr [ebp-04h],00000000h jz L00482A5A mov esi,[ebp-04h] xor ebx,ebx L004829C4: mov eax,esi call SUB_L00482218 test eax,eax jz L004829D8 add ebx,eax add esi,eax cmp ebx,00000005h jl L004829C4 L004829D8: mov cl,[eax] add cl,0xB0 sub cl,08h jc L0048224A //58 pop eax sub cl,10h jz L00482252 //68 push 0xyyyyyyyy sub cl,23h jz L00482239 //8b [mov ] sub cl,5Eh jnz L00482257 mov edx,00000005h //e9 mov eax,edx retn ;------------------------------------------------------------------------------ L00482239: mov al,[eax+01h] add al,40h sub al,40h jnc L00482257 //c0-ff mov edx,00000002h mov eax,edx retn ;------------------------------------------------------------------------------ L0048224A: mov edx,00000001h mov eax,edx retn ;------------------------------------------------------------------------------ L00482252: mov edx,00000005h L00482257: mov eax,edx retn
|
問題の処理
CreateActCtxAの関数をフックして書き換える処理
オリジナルの関数の処理が
pop eax
mov ~
push 0x********
jmp 0x********
以外の処理だった場合、返り値が初期化されてないので、とんでもなくでっかい値が返ってきた場合クラッシュする
拡張カーネルの場合、思いっきりこの条件に適合するのでクラッシュしていた模様 ・ω・
ちなみに、Windows 2000の拡張カーネル以外でも、セキュリティソフトや、ゲームガード系アプリがフックを書き換えたりした場合や、将来のOSで処理が変わった場合も起こりうる
[Report] CreateActCtxW detector function does not initialize return value. - Enigma Protector
報告しておいた
Comments