Recent Posts
Recent Comments
03-30 00:00
관리 메뉴

동글동글 라이프

7. UserAssist Analysis ( ROT13 ) 본문

개발자 이야기/[forensic]Winproof

7. UserAssist Analysis ( ROT13 )

동글동글라이프 2012. 4. 11. 08:36

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 매칭이 되어 변환 되는 암호화 방법입니다.


파일:ROT13 table with example.svg


이미지 출처 위키백과 ROT 13 : http://ko.wikipedia.org/wiki/ROT13


알고리즘이 어렵지 않고 간단한 변환이라,

tr 연산자를 통해 문자열을 쉽게 처리 할 수 있습니다.


http://perldoc.perl.org/functions/tr.html 

1
2
3
4
5
6
7
8
9
use strict;
use warnings;

my $value = 'HELLO';
print $value,"\n";
$value =~ tr/N-ZA-Mn-za-m/A-Za-z/;
print $value,"\n";
$value =~ tr/N-ZA-Mn-za-m/A-Za-z/;
print $value,"\n";

Output:
1
2
3
HELLO
URYYB
HELLO


운영체제에 따라 UserAssist 값이 달라 따로 운영체제별로 코드로 정리해 보죠!!

1
2
3
4
5
# 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을 복호화 시켜 출력하도록 작성하겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
Comments