악성 파일 분석이라구요?[1]
업무 중 한 파일을 받게 되는데..... zip파일안엔 .vhd 파일이 들어 있다.하지만!! .vhd 파일을 실행시키면 그 안에는 또 다른 .bat 파일이 두둥...! .bat 파일 안에는 알 수 없는 알파벳들만 보이죠... Bu
cybersec.tistory.com
이전 포스트에 amsi 우회에 대해서 알아본다고 했는데 오늘 한번 파헤쳐 봅시다!
간단하게 amsi 란?
어쩌구 저쩌구
우회 어쩌구
메모리 어쩌구 하면 어려우니깐
그냥 작동 되는거 눈으로 보는게 제일 빠르쥬?
이전 포스트에서 .bat 파일안에서 amsi.dll, AmsiInitialize 라는 코드를 확인했었니다
해당 내용은 위에🙄

저기 patchByte란게 보이시나욤?
저 바이트가 뭐냐?
악성 파일 분석이라구요?[2]-(베놈과의 만남)
악성 파일 분석이라구요?[1]업무 중 한 파일을 받게 되는데..... zip파일안엔 .vhd 파일이 들어 있다.하지만!! .vhd 파일을 실행시키면 그 안에는 또 다른 .bat 파일이 두둥...! .bat 파일 안에는 알 수
cybersec.tistory.com
저기 위에 포스트에서도 잠깐 설명했지만
ret 명령어를 통해서 시작위치를 처음으로 강제 복귀 시키는것 이라고 생각하면 됩니다
Q:그럼 저 HEX 데이터가 ret인지 어떻게 알아요?
system 명령어 코드에서 대해서 이전 포스트에 캡처 사진으로 샤삭 지나갔지만
요기 들어가면 알 수 있습니다.
x86 and amd64 instruction reference
THIS REFERENCE IS NOT PERFECT. It's been mechanically separated into distinct files by a dumb script. It may be enough to replace the official documentation on your weekend reverse engineering project, but for anything where money is at stake, go get the o
www.felixcloutier.com
MOV 카테고리에

라고 나와있네요
B8은 MOV 인거 같고
rw? iw? rd? id?
MOV 다음에 오는 레지스터라고 생각하심 됩니다.
저기 PathByte에서는 B8 00 00 00 00 C3 라고 적혀 있쥬?

B8 -> Move Move!!
(MOV는 사실 옮기는게 아니고 값을 복사한다 라고 봐야합니다)
어떤값을?
00 00 00 00 -> 제로 값으로 복사 복사
그다음엔?
C3 -> ret 명령어 입니다

돌아가세요 처음으로!!
자 자 그럼 recap 해보면
나 "악성코드" -> 안티 바이러스에 잡히기 싫다! -> 작동 안 한것 처럼 위장해야지! -> 강제로 시작주소로 복귀
그럼 직접 봐볼까요?

자 강제로 .bat를 실행 시켜봤더니 해당 메모리에 amsi.dll를 올려서 잘 굽고있네요
근데 한두덩이가 아니네요?
여기서 ! 중요한거는 저기 RWX 부분!
R은 read~~ 읽다
W는 write 쓰다~~
X는 execute 실행 하다~ (왜 E 가 아니고 X일까요?)
그럼 메모리 확인을 위해 xdbg 툴을 이용해 메모리를 붙혀보겠습니다!

이렇게 부착 버튼을 눌러주면

열심히 일을하는 powershell이 보이네요

이제 저기 메모리 맵 부분으로 이동해보죠

자~ 나왔습니다 요놈이 역시나 메모리에 올라와 있었네요!
해당 amsi.dll 더블클릭!

ctrl + g 를 눌르고 amsiscanbuffer 부분을 찾아봅시다

저기 보이시나요? amsi 가 시작하는 부분입니다. 근데 이상하죠?
분명 B8 00 00 00 00 C3이 올거라 생각했지만
엥...?
다른 값들들이 들어있습니다.
어떻게 된 일?

일단 어셈블리 코드로 확인해 봅시다

mov eax, 80070057이 들어있네요
eax에 80070057 값을 넣겠다는 뜻입니다.
ret 18 는 C2 1800 으로 적혀있죠

C2 iw -> pop immediately 16bytes from stack(즉시 이전 16바이트를 제거 후 복귀하라!)
그럼 저희 코드에서는 c2 1800 (바이트 계산 알고싶으면 보시고 아니면 구분선 뒤로 가시오)
Q.그럼 c2 1800은 18 바이트인가요?
땡 입니다!
여기서 18은 0x18로 16진수 표현입니다.
그럼? 24바이트죠!
왜요?

컥... 간단히 설명하면
10진수는 10의 자리, 1의 자리로 표현이 되죵?
16진수는 16의 자리, 1의 자리로 표현 한다고 생각하시면 됩니다.
그럼 10진수에서 18은?
10의 자리가 1이면 10
1의 자리가 8이면 8
그럼 10+8=18
그럼 16진수에서 18은?
16의 자리가 1이면16
1의 자리가 8 이면 8
그럼 16+8=24
그럼 여기서 Quiz!
16진수로 24는 10진수 표현으로 무엇일까요?
그래서 코드 자체만 보면 ret 이용해서 패치하는 것 같아 보이는데...
저 80070057 코드는 뭘까요?
CoinMiner's Attempt to Bypass AMSI by V3 Memory Scan - ASEC
ASEC 자료에 의하면
"AsmsiScanBuffer 의 초기 6바이트를 amsi.dll(0xB8, 0x57, 0x00, 0x07, 0x80 및 0xC3)으로 편집한다"
최종적으로 amsiscanbuffer 함수를 초기화 시켜 비활성화 상태로 만든다는 것 같습니다.
'Analysis' 카테고리의 다른 글
| [피싱 사이트 분석] 애플 사이트 사칭 피싱 사이트 (4) | 2025.08.28 |
|---|---|
| [악성코드 분석] - LUMMA STEALER REPORT (2) | 2025.08.14 |
| [Equation Native] 쉘코드 분석이라구요? (2) | 2025.05.22 |
| 악성 파일 분석이라구요?[2]-(베놈과의 만남) (2) | 2025.04.02 |
| 악성 파일 분석이라구요?[1] (3) | 2025.03.26 |