ARPCache 에 대하여...
레지스트리 분석을 위해 각 부분별 레지스트리를 분석하고 있었다.
프로그램 추가/삭제 부분에서 디스크상 삭제하였는데 레지스트리에 기록되어 있는 쓔레기 부분을 파악하기 위해 ARPCache 부분을 참조해야 한다는 것을 확인하였다.
그런데 ARP 라고 해서 Address Resolution Protocol 인줄 알고 프로그램 추가/삭제와 무슨 상관이 있을까 하고 한참을 보다 ARP 는 Add/Remove Programs 라고 프로그램 추가/삭제를 위한 레지스트리임을 알게 되었다.. 흐흐
아무튼 레지스트리의 주소는 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache 인데 모든 정보가 바이너리 값으로 되어 있었다.
MSDN 에 찾아봐도 레퍼런스가 없는 것을 보아하니 undocumented 되어 있는 것 같았다.
그래도 모든 값을 제대로 파악해야 했기에 나름 분석하다 아래의 구조체를 만들어 내었다.
끼워 맞추는 식이지만.. -_ㅡ;
WCHAR wName[] 은 컴파일러가 비표준 확장이라며 버럭거리지만 컴파일은 된다.
뒤에 바로 유니코드가 오기때문에 포인터를 넣을 수도 없었고, 저 표현식은 filemon 소스에서 본 적이 있어서 구현상 무리가 없을 것 같아 그대로 구현하였다.
이제 arpcache 에서 키값을 가져와서 SlowInfoCache 값을 저 구조체에 캐스팅해 보면 아래와 같이 매칭된다.
위의 자료는 CCleaner 라는 프로그램이고 아래는 제어판-프로그램추가/삭제 있는 내용이다.
크기는 1511424 는 Mb 로 수정하면 1.44140625 이기 때문에 정확하고, 사용됨의 빈도는 정확히 바운더리가 어느정도 인지는 모르겠지만 6 이 보통으로 나오니.. 몇번 삽질하면 바운더리가 확실히 나올 것 같다.
아무튼 목표는 바이너리값 분석이기 때문에 이것으로 마무리하고.. 그 외의 정보는 아래의 레지스트리 위치에서 찾으면 된다.
SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall
혹시나 ARPCACHE 값을 분석해야 할 사람이 있으면 참고가 되었기를...
최근 댓글