기금넷 공식사이트 - 주식 지식 - 도움말 Safengine Shielden 2.3.3.0을 디버그 가능하게 만드는 방법

도움말 Safengine Shielden 2.3.3.0을 디버그 가능하게 만드는 방법

(1)

메모리에서 CreateThread의 그림자를 찾으십시오.

나는 그를 실패시켰습니다. 첫 번째 명령을 ret 18로 변경하십시오:

shadow_CreateThread

00D1FB55 8BFF mov edi, edi ;ret 18로 변경

00D1FB57 55 push ebp

00D1FB58 8BEC mov ebp, esp

00D1FB5A FF75 1C 푸시 dword ptr [ebp+1C]

00D1FB5D FF75 18 푸시 dword ptr [ebp+18]

00D1FB60 FF75 14 푸시 dword ptr [ebp +14]

00D1FB63 FF75 10 푸시 dword ptr [ebp+10]

00D1FB66 FF75 0C 푸시 dword ptr [ebp+C]

00D1FB69 FF75 08 푸시 dword ptr [ebp+8]

00D1FB6C 6A FF 푸시 -1

00D1FB6E E8 D9FDFFFF 호출 00D1F94C

00D1FB73 5D 팝 ebp

00D1FB74 C2 1800 ret 18

코드 복사

이러한 디버깅 옵션을 확인할 때마다 스레드를 차지하므로 이유를 설명할 필요가 없습니다.

저는 nevsayno의 사진을 본 후 다음과 같은 옵션이 생각났습니다. 그의 사진을 빌려서 붙여넣었습니다.)

(2)

기억 속에 (위와 함께) 같은 문단임) GetThreadContext의 그림자 찾기:

Shadow_GetThreadContext

00D488DD 8BFF mov edi, edi

00D488DF 55 push ebp

00D488E0 8BEC mov ebp, esp

00D488E2 FF75 0C 푸시 dword ptr [ebp+C]

00D488E5 FF75 08 푸시 dword ptr [ebp+8]

00D488E8 FF15 EA0ED100 호출 [D10EEA]

00D488EE 85C0 테스트 eax, eax

00D488F0 0F8C 57B60000 jl 00D53F4D

00D488F6 33C0 xor eax, eax

00D488F8 40

inc eax

00D488F9 5D pop ebp

00D488FA C2 0800 ret 8 ;jmp 00E41F90

00D488FD 90 nop

00D488FE 90 nop

p> p>

00D488FF 90 nop

00D48900 90 nop

00D48901 90 nop

코드 복사

위의 ret 8 변경 쓸모없는 부분으로 점프하고 다음 코드를 추가하세요:

00E41F90 50 push eax

00E41F91 8B4424 0C mov eax, [esp+C]

00E41F95 8038 10 cmp 바이트 ptr [eax], 10

00E41F98 75 16 jnz short 00E41FB0

00E41F9A 33D2 xor edx, edx

00E41F9C 8950 04 mov [eax+ 4] , edx ;clr Dr0~3

00E41F9F 8950 08 mov [eax+8], edx

00E41FA2 8950 0C mov [eax+C], edx

00E41FA5 8950 10 mov [eax+10], edx

00E41FA8 52 푸시 edx

00E41FA9 6A 04 푸시 4

00E41FAB E8 457C9C7B kernel32.TlsSetValue 호출

p>

00E41FB0 58 pop eax

00E41FB1 C2 0800 ret 8

코드 복사

이유:

Mr. TlsValue가 DrDr1+Dr2+Dr3의 총 값과 같은지 판단합니다

Drx의 값을 얻으려면 이를 0으로 지우고 TlsValue를 0으로 설정합니다.

참고: Shadow_GetThreadContext는 Anti Debugger에서만 호출되기 때문입니다.

따라서 새 코드에서 연결을 사용하지 않으려면 직접 덮어쓰면 됩니다.

(3)

메모리에서 SetThreadContext의 그림자를 찾아보세요:

그리고 시작 부분을 다음으로 변경하세요:

mov al, 1

ret 8

코드 복사

이유:

이 기능을 사용하지 않으면 자체 디버깅을 위한 하드 브레이크가 사라질 수 있습니다.

p>

(4)

이전에 42F765 값을 기록해 두었습니다. 실제로 이는 VM의 ds:[imm] 명령입니다.<

/p>

vm.ds:[imm]

0042F763 8B01 mov eax, [ecx] ;jmp 00534FC5

0042F765 8D1C33 lea ebx, [ebx+esi]

0042F768 ^ 7E B9 jle short 0042F723

0042F76A ^ 7F CB jg short 0042F737

코드 복사

훅을 걸어야 합니다. 쓸모없는 부분으로 건너뛰고 다음 코드를 작성하세요:

여기서 4 cmp는 처음에 녹음한 Dr0~3입니다.

00534FC5 81F9 C4754000 cmp ecx, 004075C4

00534FCB 74 18 짧은 00534FE5

00534FCD 81F9 49754000 cmp ecx, 00407549

00534FD3 74 10 짧은 00534FE5

00534FD5 81F9 B4744 000cmp ecx, 004074B4

00534FDB 74 08 je short 00534FE5

00534FDD 81F9 AF744000 cmp ecx, 004074AF

00534FE3 75 09 jnz short 00534FEE

00534FE5 9 C pushfd

00534FE6 66:810C24 0001 또는 단어 ptr [esp], 100

00534FEC 9D popfd

00534FED 90 nop

00534FEE 8B01 mov eax, [ecx] ;원래 명령어 추가

00534FF0 8D1C33 lea ebx, [ebx+esi] ;원래 명령어 추가

00534FF3 ^ E9 70A7EFFF jmp 0042F768 ;Jump back< /p >

코드 복사

이유:

셸은 항상 해당 4개의 값을 Dr0~3으로 설정하고 Dr7을 33335555h로 설정합니다.

의미 저 4자리를 읽으면 80000004라는 예외가 발생하게 됩니다.

쉘이 구체적으로 읽을 때 80000004가 발생하지 않으면 동작하지 않습니다.

OD에서 중단점을 설정하면 연결이 끊어진 후 Target으로 제어권을 넘기기 전에

OD는 연결이 끊어진 한 그 값을 변경합니다. , 무슨 일이 있어도 할 수 없는 일이다

정상 실행이 실패한 이유.

처음에 삭제한 7개의 스레드에도 Drx의 이러한 직업이 가득합니다.

(5)

VM의 rdtsc 명령 변경

원래 vm.rdtsc는 다음과 같습니다.

rdtsc

> sub ebp, 8

mov [ebp+0], edx

mov [ebp+4], eax

코드 복사

물론 중간에 많은 쓰레기가 삽입됩니다. 우리는 주로 eax = 0을 만들고자 합니다. 이 샘플은 다음과 같습니다:

00437C98 8D2424 lea esp, [esp] ; / nop

00437C9B 895500 mov [ebp], edx

코드를 복사하세요

정크 명령어 lea esp,[esp]를 xor eax,eax로 변경하세요. / nop

이유:

쉘은 항상 rdtsc.eax를 사용하여 메모리 확인을 위해 난수를 수행합니다.

ds:[imm]을 변경했으며 향후에 큰 변화를 가져올 수 있습니다. 힙 소프트웨어 브레이크포인트(CC)

변경 후에는 0번째 작은 블록만 확인하게 됩니다.

위 5가지 항목을 완료하고 나면 마치 디버깅용 메모장처럼 쉘과 소프트웨어를 볼 수 있을 것입니다.

이 쉘을 완벽하게 분석할 수 있습니다.

마지막으로 다니엘의 쉘링 스크립트를 기대해보자.

참고: "중단점을 설정할 수 없습니다"라는 단어와 관련하여:

일반 셸로 디버깅하는 경우 디버깅 프로세스 중에 두 가지 현상이 나타납니다.

1. 중단점을 설정하고 중단하더라도 F9를 눌러 성공적으로 실행할 수 있습니다.

기뻐하지 마세요. 이는 쉘이 Anti를 시작하지 않았기 때문입니다.

2. 쉘이 Anti를 시작하면 브레이크포인트가 깨졌으나 더 이상 정상적으로 실행할 수 없는 경우

"내부 오류"와 같은 메시지가 나타날 수 있습니다.

3 . 메모리 검사가 감지되면 바로 충돌이 발생할 수 있습니다.