동글동글 라이프
7. UserAssist Analysis ( ROT13 ) 본문
UserAssist 는 시스템에서 실행되었던 프로그램의 목록과 실행 횟수
그리고 마지막 실행시간 등의 정보를 가지고 있습니다.
UserAssist 정보를 가지는 Registry 키의 전체 경로는 아래와 같습니다.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist
레지스트리 키로 접근하면 아래와 같이 2개의 서브 키가 있는 것을 확인할 수 있습니다.
Count 안의 값들이 실행한 프로그램의 목록과 횟수들을 가지고 있다고 보시면 됩니다 :)
( 제가 쓰고 있는 Windows 버전은 Windows7 입니다. )
음? 영문자이긴 한데 뭔가 읽을 수 없는 영어단어가 아닌 듯한 목록입니다.
이것은 key의 이름이 ROT13 으로 변환되어 있기 때문에 그렇습니다.
여기서 ROT13 이 무엇이냐면, A~M의 값들과 N~Z 의 값들이 1:1 매칭이 되어 변환 되는 암호화 방법입니다.
이미지 출처 위키백과 ROT 13 : http://ko.wikipedia.org/wiki/ROT13
알고리즘이 어렵지 않고 간단한 변환이라,
tr 연산자를 통해 문자열을 쉽게 처리 할 수 있습니다.
http://perldoc.perl.org/functions/tr.html
Output: |
운영체제에 따라 UserAssist 값이 달라 따로 운영체제별로 코드로 정리해 보죠!!
# Special list for translating the UserAssist (ROT-13) key value names
my @WinXPua = qw/{5E6AB780-7743-11CF-A12B-00AA004AE837}
{75048700-EF1F-11D0-9888-006097DEACF9}/;
my @Win7ua = qw/{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}
{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F}/;
|
그럼 이전에 짠 코드에서 %vk 값 안에서 키값을 확인했을 때 Value Name을 복호화 시켜 출력하도록 작성하겠습니다.
if ($nk{no_values} > 0) {
my @ofs_vallist = readValList(($nk{ofs_vallist} + $ADJUST),$nk{no_values});
foreach my $i (0..(scalar(@ofs_vallist) - 1)) {
my %vk = readVkRecord($ofs_vallist[$i] + $ADJUST);
if ($nk{keyname} eq "Count") {
foreach my $u (@Win7ua) {
if (grep(/$u/,$name)) {
$vk{valname} =~ tr/N-ZA-Mn-za-m/A-Za-z/;
}
}
}
print "\t--> ".$vk{valname}.";".$regtypes{$vk{val_type}}.";".$vk{data}."\n";
}
print "\n";
}
|
> 복호화 하지 않은 값
>perl rega.pl UserAssist
\UserAssist
LastWrite time: Tue Nov 29 01:22:08 2011
\UserAssist\{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}
LastWrite time: Tue Nov 29 01:22:08 2011
--> Version;REG_DWORD;5
\UserAssist\{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}\Count
LastWrite time: Tue Apr 10 05:27:20 2012
--> Zvpebfbsg.Jvaqbjf.TrggvatFgnegrq;REG_BINARY;06 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 1b e0 6f 3d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 80 bf 00 00 80 bf 00 00 80 bf 00 00 80 bf 05 00 00 00 cf e
8 1e 16 35 ae cc 01 00 00 00 00
> 복호화 된 값
>perl rega.pl UserAssist
\UserAssist
LastWrite time: Tue Nov 29 01:22:08 2011
\UserAssist\{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}
LastWrite time: Tue Nov 29 01:22:08 2011
--> Version;REG_DWORD;5
\UserAssist\{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}\Count
LastWrite time: Tue Apr 10 05:27:20 2012
--> Microsoft.Windows.GettingStarted;REG_BINARY;06 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 1b e0 6f 3d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 80 bf 00 00 80 bf 00 00 80 bf 00 00 80 bf 05 00 00 00 cf e
8 1e 16 35 ae cc 01 00 00 00 00
복호화가 잘 되어 출력되는 것을 확인 할 수 있습니다 :)
오늘은 하루 잘 보내시구요~
총선!! 모두 투표합시다~^^/
참고 URL : http://malwarelab.tistory.com/tag/UserAssist
'개발자 이야기 > [forensic]Winproof' 카테고리의 다른 글
8. Registry File Parser Source code (6) | 2012.04.12 |
---|---|
6. Value Data Storage (1) | 2012.04.10 |
5. SubKey List (1) | 2012.04.09 |
4. NK Record (0) | 2012.04.06 |
3. Bin Header (2) | 2012.04.05 |