https://www.youtube.com/watch?v=Sv8yu12y5zM
실제 랜섬웨어 프로그램을 뒤집은 예인데 너무 신기해서 스텁을 남깁니다.
예전에 리버싱 공부할 때 이런거 공부했어야 했는데
더 더러운 난독화(가져오기, 시작점, 기타 암호화 난독화 등)가 추가되었다면 아마도 더 복잡했을 텐데, 이 프로그램은 꽤 단순하게 느껴집니다.
- Mac에서 반대로 작동합니까? ghidra는 꽤 유용해 보입니다.
드디어 IDA에서 벗어날 수 있습니다! - 다시 말하지만, ollydbg와 같은 것으로 런타임에 대한 분석이 중요하지만 정적 분석을 수행하는 방법도 알아야 합니다.
- 프로그램 내의 프로그램은 약간 새롭습니다.
하지만 어쨌든 리소스를 보면 모든 것을 볼 수 있습니다. - 함수나 변수의 이름을 짓는 것은 매우 중요합니다!
MSDN 같은 레퍼런스를 쓰면서 첨부할 생각을 못 했네요. 예전에 리버스할 때 이 부분이 가장 취약했던 부분이겠군요… 이름도 안 붙이고 알아내려고 하다보니 push/popd의 향연에 정신을 못 차리네요. 이름과 유형을 적절하게 첨부한 후 디스어셈블러에 코드가 명확하게 표시되는 것이 매우 인상적이었습니다. - memcpy, strcpy, memset, memzero를 디스어셈블할 때 나타나는 특징적인 패턴을 빠르게 파악하는 것이 좋을 것 같습니다.
이런 패턴이 더 있을지는 모르겠지만 정리하면 좋을 것 같습니다. - 디컴파일러에서 배열을 여러 개로 분할해서 인식하는 경우가 있는 것 같습니다.
예를 들어 char(780)이 원래 코드인 경우 디컴파일러는 char(120) unsigned(680)을 다음과 같이 표시합니다.
이것을 잘 이해하고 깔끔하게 만드는 것이 포인트인 것 같습니다.
배열의 중간에 액세스하는 코드가 있다면 다음과 같을 것입니까? - 결과 어셈블 코드가 지저분하기 때문에 클래스 코드는 디컴파일하기에 지옥입니다.
__thiscall이 의심해야 한다는 신호입니다.
OOM 분석과 관련된 플러그인이 있다면 반드시 도움을 받아야 합니다. - 암호화된 데이터를 찾아주는 플러그인이 있나요?!
이를 이용하면 이 상수를 활용하는 함수들의 이유(?)를 미리 파악하는데 큰 도움이 될 것 같습니다. - stl 클래스는 분해하기 정말 지옥입니다.
참조
- 1 https://www.youtube.com/watch?v=Sv8yu12y5zM
- 2 https://www.youtube.com/watch?v=Q90uZS3taG0
- 삼 https://www.youtube.com/watch?v=ru5VzUigKqw
이것 나중에 별도 참조: 번개 케이블 해킹