https://www.youtube.com/watch?v=Sv8yu12y5zM
무려 실제 랜섬웨어 프로그램을 리버싱하는 예시인데, 너무 흥미로워서 토막글을 남겨둡니다. 예전에 리버싱 공부할 때 이런 걸로 공부했어야 했는데 😭
아마 더러운 난독화 (import, starting point, 그외 기타 암호화 obfuscation 등)가 더 들어갔으면 더 복잡했을 것 같지만 이 프로그램은 꽤 단백한 느낌입니다.
- 맥에서도 reverse가 되네? ghidra 가 꽤 쓸만한 듯. 드디어 IDA에서 벗어날 수 있겠구나!
- 역시 ollydbg 같은 걸로 Runtime 상에서의 분석도 중요하지만, 정적 분석도 잘 할 줄 알아야 한다.
- 프로그램 안에 프로그램은 좀 신박하네요. 근데 어차피 리소스 까보면 다 보이긴 할 듯
- 함수나 변수에 이름 붙이기가 꽤 중요! MSDN 같은 레퍼런스 써가면서 붙이는 건 생각 못했다. 이 부분이 과거 리버싱 했을때 내가 가장 취약했던 점이었을 거임… 이름 안 붙이고 쌩으로 파악하려니까 push/popd 등의 향연에 정신을 차릴 수가 없다. 이름과 Type을 제대로 붙이고 나니 디어셈블러에서 코드를 명료화해서 표시해주는게 몹시 인상깊었음.
- memcpy, strcpy, memset, memzero 디어셈 하면 보이는 특징적인 패턴을 빠르게 파악하는 게 좋아 보임. 이런 패턴류가 더 있는지는 모르겠지만, 정리해 둔 게 있으면 좋을 것 같다.
- 디컴파일러가 하나의 배열을 여러개로 쪼개서 인식하는 경우가 있는 것 같다. 이를테면 char[780] 이 원래 코드였다면, 디컴파일러에서는 char[120] unsigned[680] 이런 식으로 보여지는 경우. 이것도 잘 파악해서 깔끔하게 만들어주는 게 포인트인 듯 하다. 아마 배열 중간에 접근하는 코드가 있으면 이렇게 보이겠지?
- 클래스 코드는 만들어진 어셈블 코드가 너저분해서 디컴파일하기에는 지옥이다. __thiscall 이 의심해봐야 할 시그널. OOM 분석 관련 플러그인 있으면 반드시 도움을 받을 것.
- 암호화 DATA를 찾아주는 플러그인도 있네?! 이걸 이용하여 이 constant을 활용하는 함수들의 저의(?)를 미리 파악하는 데 큰 도움이 될 듯.
- stl 클래스는 디어셈블링에선 정말 지옥같은 존재이다.
Reference
- 1 https://www.youtube.com/watch?v=Sv8yu12y5zM
- 2 https://www.youtube.com/watch?v=Q90uZS3taG0
- 3 https://www.youtube.com/watch?v=ru5VzUigKqw
이건 이후에 별도로 참고할 예정: Lightning cable hack
'개발 > Essay' 카테고리의 다른 글
개발자로서 자신을 예쁘게 포장하기 (5) | 2024.10.04 |
---|---|
Lessons for 2023 Q3 (0) | 2023.10.11 |
Filter iteration과 Low pass (0) | 2023.03.20 |
Lessons learned in 23Q1 (0) | 2023.03.03 |
개발 관련하여 읽은 책과 글들 (2022년 하반기) (0) | 2022.12.26 |