[ENABLE]
alloc(newmem1,2048) ; 2048바이트 메모리를 할당하고, 할당된 메모리의 주소를 newmem1이라는 라벨로 지정합니다.
label(returnhere1) ; returnhere1이라는 라벨을 생성합니다.
label(originalcode1) ; originalcode1이라는 라벨을 생성합니다.
newmem1: ; newmem1 라벨이 가리키는 메모리 위치에 다음 코드를 삽입합니다.
push ffffffff ; 스택에 ffffffff 값을 푸시합니다. (Windows API의 sleep함수를 호출할 때 사용되는 인수로 보임)
call sleep ; 시스템 호출이나 외부 함수 호출, 여기서는 sleep함수를 호출하여 실행을 지정된 시간 동안 지연시킵니다.
originalcode1: ; originalcode1 라벨 위치에 원래 코드의 복사본을 넣어놓습니다. (나중에 패치된 코드와 원본 코드의 실행을 선택하기 위함)
pushfd
push edi
push esp
pop edi
add edi,00000004
jmp returnhere1 ; returnhere1 라벨 위치로 점프합니다.
"BlackCipher.aes"+26885DE: ; BlackCipher.aes 모듈의 특정 오프셋을 가리키는 코드입니다.
jmp newmem1 ; newmem1 라벨로 새로운 메모리 위치로 점프합니다.
nop 5 ; 'nop' 연산은 아무런 동작을 하지 않는 (No Operation) 연산으로 다른 명령어 대신에 코드의 형태를 유지합니다. 여기서는 5바이트를 무효화합니다.
returnhere1: ; 여기에서 코드의 실행을 계속합니다.
; 이하 동일한 패턴이 반복됩니다.
alloc(newmem2,2048)
label(returnhere2)
label(originalcode2)
newmem2:
push ffffffff
call sleep
originalcode2:
pushfd
sub esp,00000004
jmp returnhere2
"BlackCipher.aes"+201769C:
jmp newmem2
nop 2
returnhere2:
alloc(newmem3,2048)
label(returnhere3)
label(originalcode3)
newmem3:
push ffffffff
call sleep
originalcode3:
pushfd
sub esp,04
mov [esp],edi
jmp returnhere3
02AC1CCA:
jmp newmem3
nop 2
returnhere3:
[DISABLE]
댓글1
다를걸