Visual Basic 6.0 샘플 분석
비주얼베이직으로 제작된 샘플일 경우 아래와 같은 순서로 분석을 하면 된다.
우선 VB Decompiler라는 툴을 이용하여 비주얼베이직으로 코딩 한 사용자 코드를 구분해 놓는다.
VB 코드를 디스어셈블러를 통해 보여주지만 어차피 IDA로 보는 게 편하기 때문에 File -> Save procedures list -> 파일형식 *.idc 선택한다.
먼저, IDA를 통해 샘플을 불러온다. 여기에 아까 저장한 *.idc 스크립트 파일을 덮어씌운다. (File -> Script File)
이렇게 불러오면 사용자가 작성한 코드를 IDA에서도 바로 구분해서 확인할 수 있다.
이젠 VB에서 API작업을 해줘야 한다. VB 6.0 기준 윈도우 API를 사용할 때는 VB6 런타임 라이브러리(MSVBVM60.DLL)를 사용한다. 불러오는 형태는 아래와 같다.
그래픽 뷰에서 텍스트 뷰로 전환하면 이런 형태일 것이다. 여기서 해당 부분을 풀어서 해석해야 한다.
'U' 단축키를 통해 Undefine을 한 후에 'A' 단축키를 통해 아스크코드로 변환하자.
아스키코드로 변환하면 이렇게 Win API를 찾을 수 있다.
우린 이 sub_402304() 함수 자체를 'RegSetValueExA'로 정의할 수 있다.
이렇게 이와 유사한 함수들을 다 찾아서 변환하면 된다.
'DllFunctionCall' 함수를 보면 다수의 sub 합수들이 참조하는 것을 확인할 수 있다. 비슷한 형태를 찾아서 모두 바꿔주자.
그럼 이렇게 한눈에 보이게 API 변환을 할 수 있다.
이젠 코드를 분석할 차례다.
Proc_0_0부터 분석을 진행한다.
뒤에 사용자 코드를 통해 대략적인 코드 순서도 확인할 수 있다.
(Proc_1_3 디스어셈블리 코드에서 (헥스레이 뷰 x) Xrefs grahp to 기능을 통해 확인 가능)
sub_406870은 실제 디코딩 함수였고, 이런 순서를 확인할 수 있다.
실제 IDA만으로 웬만한 흐름이나 분석은 가능하며,
디코딩(루프문)이 필요할 경우 디버깅툴과 병행하면서 분석을 하면 된다.