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
報告しておいた

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です