FinSpy spyware analysis

We have collaborated with Amnesty International for whom we have analyzed a new variant of the FinSpy spyware.

Executive summary

By analyzing the sample we found what we suspect to be a new version of the FinFisher’s malware FinSpy for Android.

Even though the malware behavior and capabilities seem to be the same as what it has already been described in the past, this version goes a step further to hide the malware configuration and its capabilities.

This new version we named DexDen has very likely been released between May 2017 and October 2019.

Command and control server associated to the malware configuration is still alive by the time we wrote this report.

In terms of capabilities, the sample we have analyzed is meant to exfiltrate SIM card information, SMS log, call log, calendar events, address book, messages and files from 12 popular messenger applications and to track victim’s location.

This report provides details on how strings are obfuscated, how the communication protocol has evolved and how the extraction of three technical aspects of the malware can give insights on the malware code-base evolution.

Overview

This report focuses on the analysis of the sample described below.

Sample file

FilenameWIFI.apk
Size2.87MB
MD579ba96848428337e685e10b06ccc1c89
SHA-151b31827c1d961ced142a3c5f3efa2b389f9c5ad
SHA-256854774a198db490a1ae9f06d5da5fe6a1f683bf3d7186e56776516f982d41ad3
Application namewifi
Packageorg.xmlpush.v3
Main activityorg.xmlpush.v3.StartVersion

Sample certificate

SubjectCN='MITAS Ltd.'
Signature Alg.rsassa_pkcs1v15
Validity2017-05-27 - 2023-05-26
IssuerCN='MITAS Ltd.'
Hash Alg.sha256
MD5b99ac605872a55e609854176413e603c
SHA-17c6e4f2e84ebaa8d25040f63d840e14f6f822125
SHA-2568052584eacfd199602b348ef60e20c246ec929d62bc5b85fd0e60ba3205b05a2

For this analysis we use the following tools:

We share the following assets on our GitHub repository:

  • java_parser.py to extract obfuscated from Java code
  • string_decoder.py to decode obfuscated strings
  • table.ods containing TLV types and decoded strings
  • FinSpy.yar Yara rules detecting FinSpy variants

Tiny tools

Yara rules

rule FinSpy_ConfigInAPK : android apkhideconfig finspy
{
	meta:
		description = "Detect FinFisher FinSpy configuration in APK file. Probably the original FinSpy version."
		date = "2020/08/05"
		reference = "https://github.com/devio/FinSpy-Tools"
		author = "Esther Onfroy a.k.a U+039b - *@0x39b.fr (https://twitter.com/u039b)"

	strings:
		$re = /\x50\x4B\x01\x02[\x00-\xff]{32}[A-Za-z0-9+\/]{6}/

	condition:
		uint32(0) == 0x04034b50 and $re and (#re > 50)
}

rule FinSpy_DexDen : android dexhideconfig finspy
{
	meta:
		description = "Detect FinFisher FinSpy configuration in DEX file. Probably a newer FinSpy variant."
		date = "2020/08/05"
		author = "Esther Onfroy a.k.a U+039b - *@0x39b.fr (https://twitter.com/u039b)"

	strings:
		$config_1 = { 90 5b fe 00 }
		$config_2 = { 70 37 80 00 }
		$config_3 = { 40 38 80 00 }
		$config_4 = { a0 33 84 }
		$config_5 = { 90 79 84 00 }

	condition:
		uint16(0) == 0x6564 and
		#config_1 >= 2 and 
		#config_2 >= 2 and 
		#config_3 >= 2 and 
		#config_4 >= 2 and 
		#config_5 >= 2
}

rule FinSpy_TippyTime: finspyTT
{
	meta:
		description = "Detect FinFisher FinSpy 'TippyTime' variant."
		date = "2020/08/05"
		author = "Esther Onfroy a.k.a U+039b - *@0x39b.fr (https://twitter.com/u039b)"
	strings:
		$config_1 = { 90 5b fe 00 }
		$config_2 = { 70 37 80 00 }
		$config_3 = { 40 38 80 00 }
		$config_4 = { a0 33 84 }
		$config_5 = { 90 79 84 00 }
		$timestamp = { 95 E9 D1 5B }

	condition:
		uint16(0) == 0x6564 and
		$timestamp and
		$config_1 and 
		$config_2 and 
		$config_3 and 
		$config_4 and 
		$config_5
}

rule FinSpy_TippyPad: finspyTP
{
	meta:
		description = "Detect FinFisher FinSpy 'TippyPad' variant."
		date = "2020/08/05"
		author = "Esther Onfroy a.k.a U+039b - *@0x39b.fr (https://twitter.com/u039b)"
	strings:
		$pad_1 = "0123456789abcdef"
		$pad_2 = "fedcba9876543210"

	condition:
		uint16(0) == 0x6564 and
		#pad_1 > 50 and
		#pad_2 > 50
}

Script to plot CFG

import networkx as nx
from androguard.misc import AnalyzeAPK
from graphviz import Digraph as dg

apk = '<path to you APK>'
a, d, dx = AnalyzeAPK(apk)
call_graph = dx.get_call_graph()
graph = nx.empty_graph()


def clean_name(name):
    return name[0:name.rfind(')')+1]


graphs = {
    'audio': [
        {
            'class': 'Landroid/media/AudioRecord',
            'method': 'startRecording'
        },
        {
            'class': 'Landroid/media/AudioManager',
            'method': 'setMicrophoneMute'
        },
    ],
    'read_sms_configuration': [
        {
            'class': 'Landroid/telephony/SmsMessage',
            'method': 'getPdu'
        },
        {
            'class': 'Landroid/telephony/SmsMessage',
            'method': 'getMessageBody'
        },
        {
            'class': 'Landroid/telephony/SmsMessage',
            'method': 'getUserData'
        },
        {
            'class': 'Lorg/xmlpush/v3/q/c',
            'method': '<init>'
        },
        {
            'class': 'Lorg/xmlpush/v3/q/c',
            'method': 'a',
            'starts_with': 'Lorg/xmlpush/v3/q/c;->a([Ljava'
        },
    ],
}

for g in graphs:
    fg = dg(engine='dot',
            format='png',
            graph_attr={'overlap': 'orthoxy',
                        'diredgeconstraints': 'true',
                        'splines': 'ortho'},
            node_attr={'shape': 'box',
                       'style': 'filled',
                       'fontcolor': '#212529',
                       'fontsize': '10',
                       'fontname': 'sans-serif'})

    methods = []
    for search in graphs[g]:
        for m in dx.find_methods(methodname=search['method'], classname=search['class']):
            if 'starts_with' in search:
                cm = clean_name(str(m.get_method()))
                if cm.startswith(search['starts_with']):
                    methods.append(m)
            else:
                methods.append(m)

    for m in methods:
        fg.node(clean_name(str(m.get_method())), color='#985e6d', fontcolor='white')
        ancestors = nx.ancestors(call_graph, m.get_method())
        ancestors.add(m.get_method())
        graph = call_graph.subgraph(ancestors)
        for n, d in graph.in_degree():
            if d == 0:
                fg.node(clean_name(str(n)), color='#494e6b', fontcolor='white')
        for u, v in graph.edges:
            fg.edge(clean_name(str(u)), clean_name(str(v)))

    fg.render(g)

A suspected new FinSpy version

FinSpy capabilities and technical aspects are widely documented online. In this section we focus on what we suspect to be clues of a new version of FinSpy for Android.

To do so, we investigate on the following parameters:

  • location of the FinSpy configuration
  • string obfuscation
  • local socket address generation
  • unknown TLV types

Configuration storage

As far as we know, FinSpy stores its configuration into APK metadata. It was well documented and extraction tools are available online:

  • https://github.com/devio/FinSpy-Tools
  • https://github.com/SpiderLabs/malware-analysis/blob/master/Ruby/FinSpy/

The sample we investigate on shows that the FinSpy configuration is stored into the DEX file.

FinSpy configuration stored into the DEX

FinSpy configuration stored into the DEX

Even if existing extraction tools failed to extract the configuration from the DEX, parsing tools succeeded to parse it. The structure of the configuration remains the same, only its storage location has changed.

We name this FinSpy variant DexDen.

String obfuscation

As far as we know, FinSpy strings defined in its code are not obfuscated. The sample we analyze is different, all Java strings are obfuscated. Each Java class using strings implements the following 2 Java methods:

  • String OOOoOoiIoIIiO0o01I1I00(final int index) returning the obfuscated string as bytes at the given index.
  • byte[] i1IlIil011Iiil(final byte[] array, final byte[] array2) decoding an obfuscated string.
Example of obfuscated strings and the two decoding TippyPads

Example of obfuscated strings and the two decoding TippyPads

Example of the Java method decoding obfuscated strings

Example of the Java method decoding obfuscated strings

Strings are decoded by XORing of the obfuscated one with one of the two pads. The pad is selected according to the index mod 2. Pads are the same for all Java classes using strings:

  • 0123456789abcdef
  • fedcba9876543210

We have developed a Python script parsing the entire Java code to retrieve obfuscated strings java_parser.py and one to decode them string_decoder.py.

We denote this kind of string obfuscation TippyPad for short.

Local socket address generation

FinSpy uses Unix socket to communicate between threads. The local socket address is generated by hashing the values of the following system properties:

  • ro.product.model
  • ro.product.brand
  • ro.product.name
  • ro.product.device
  • ro.product.manufacturer
  • ro.build.fingerprint

An utility method meant to encode data and generate local socket address uses the timestamp 1540483477 corresponding to Thu 25 October 2018 16:04:37 UTC. Java method generating local socket address is listed below.

Java method generating the local socket address

Java method generating the local socket address

We denote this kind of address generation TippyTime for short.

Unknown TLV types

After leaks about FinFisher and FinSpy, community has reversed the different TLV values used in data marshaling/unmarshaling to ensure a common data format between C2s and implants. These values are available online: https://github.com/devio/FinSpy-Tools/blob/master/Android/finspyCfgParse.py

The FinSpy version we analyze seems to be using unknown TLV values. To get some meaning about the different unknown TLV values, we reversed existing values. We were able to detect semantic groups based on the binary representation of these values.

The Python script we developed recovers groups based on existing values. Then parses the sample Smali code to extract unknown TLV values. We used a patched version of Smalisca to do so. We have extracted the following suspected unknown TLV values. The entire list of TLV and groups is available in the GitHub repository.

To determine the group the TLV value belongs to just mask that value with 0xFFFFF800.

Group IDGroup nameTLV valueKnown TLVTLV name
64drives all get131488✔TlvTypeGetAllDrivesRequest
64drives all get131744✔TlvTypeGetAllDrivesReply
66contents folder get135328✔TlvTypeGetFolderContentsRequest
66contents folder get135584✔TlvTypeGetFolderContentsReply
66contents folder get135840✔TlvTypeGetFolderContentsNext
66contents folder get136096✔TlvTypeGetFolderContentsEnd
68download file139424✔TlvTypeDownloadFileRequest
68download file139680✔TlvTypeCancelDownloadFileRequest
68download file139936✔TlvTypeDownloadFileReply
68download file140192✔TlvTypeDownloadFileNext
68download file140448✔TlvTypeDownloadFileEnd
68download file140704✔TlvTypeCancelDownloadFileReply
70upload file143520✔TlvTypeUploadFileRequest
70upload file143776✔TlvTypeCancelUploadFileRequest
70upload file144032✔TlvTypeUploadFileReply
70upload file144288✔TlvTypeUploadFileNext
70upload file144544✔TlvTypeUploadFileEnd
70upload file144800✔TlvTypeUploadFileCompleted
70upload file145056✔TlvTypeCancelUploadFileReply
72delete file147616✔TlvTypeDeleteFileRequest
72delete file147872✔TlvTypeDeleteFileReply
74search file151968✔TlvTypeSearchFileRequest
74search file152224✔TlvTypeSearchFileReply
74search file152480✔TlvTypeSearchFileNext
74search file152736✔TlvTypeSearchFileEnd
74search file152992✔TlvTypeCancelSearchFileRequest
74search file153248✔TlvTypeCancelSearchFileReply
78fs159888✔TlvTypeFSFileDataChunk
78fs160128✔TlvTypeFSDiskDrive
78fs160384✔TlvTypeFSFullPath
78fs160640✔TlvTypeFSFilename
78fs160896✔TlvTypeFSFileExtension
78fs161088✔TlvTypeFSDiskDriveType
78fs161408✔TlvTypeFSFileSize
78fs161584✔TlvTypeFSIsFolder
79fs161840✔TlvTypeFSReadOnly
79fs162096✔TlvTypeFSHidden
79fs162352✔TlvTypeFSSystem
79fs162688✔TlvTypeFSFileCreationTime
79fs162944✔TlvTypeFSFileLastAccessTime
79fs163200✔TlvTypeFSFileLastWriteTime
79fs163472✔TlvTypeFSFullPathM
79fs163632×unknown
82system config file168096✔TlvTypeGetFileSystemConfigRequest
82system config file168352✔TlvTypeFileSystemConfigReply
82system config file168608✔TlvTypeSetFileSystemConfigRequest
128line cmd262560✔TlvTypeStartCmdLineSessionRequest
128line cmd262816✔TlvTypeStartCmdLineSessionReply
128line cmd263072✔TlvTypeStopCmdLineSessionRequest
128line cmd263328✔TlvTypeCmdLineSessionStoppedReply
128line cmd263584✔TlvTypeCmdLineExecute
128line cmd263840✔TlvTypeCmdLineExecutionResult
130line cmd execute266352✔TlvTypeCmdLineExecuteCommand
130line cmd execute266560✔TlvTypeCmdLineExecuteAnswerID
130line cmd execute266864✔TlvTypeCmdLineExecuteAnswerData
146line config cmd299168✔TlvTypeGetCmdLineConfigRequest
146line config cmd299424✔TlvTypeCmdLineConfigReply
146line config cmd299680✔TlvTypeSetCmdLineConfigRequest
160config scheduler328096✔TlvTypeGetSchedulerConfigRequest
160config scheduler328352✔TlvTypeSchedulerConfigReply
160config scheduler328608✔TlvTypeSetSchedulerConfigRequest
162task scheduler331920✔TlvTypeSchedulerTask
162task scheduler332192✔TlvTypeSchedulerTaskRecordByTime
162task scheduler332448✔TlvTypeSchedulerTaskRecordScreenWhenAppRuns
162task scheduler332704✔TlvTypeSchedulerTaskRecordMicWhenAppUsesIt
162task scheduler332960✔TlvTypeSchedulerTaskRecordWebCamWhenAppUsesIt
176sch360592✔TlvTypeSCHTaskConfiguration
176sch360752✔TlvTypeSCHTaskEnabled
176sch361344✔TlvTypeSCHTaskStartDateTime
176sch361600✔TlvTypeSCHTaskStopDateTime
176sch362112✔TlvTypeSCHApplicationName
176sch362288✔TlvTypeSCHApplicationWindowOnly
512microphone1048992✔TlvTypeStartMicrophoneRequest
512microphone1049248✔TlvTypeStartMicrophoneReply
512microphone1049504✔TlvTypeMicrophoneFrame
512microphone1049760✔TlvTypeStopMicrophoneRequest
512microphone1050016✔TlvTypeMicrophoneStoppedReply
512microphone1050272✔TlvTypeStartMicrophoneRecording
5141052736✔TlvTypeMICFrameID
5141053072✔TlvTypeMICFrameData
5141053312✔TlvTypeAudioSessionType
5141053568✔TlvTypeAudioEncodingType
518audio config1061024✔TlvTypeGetAudioConfigRequest
518audio config1061280✔TlvTypeAudioConfigReply
518audio config1061536✔TlvTypeSetAudioConfigRequest
520type video1066112✔TlvTypeVideoSessionType
520type video1066368✔TlvTypeVideoEncodingType
544screen1114528✔TlvTypeStartScreenRequest
544screen1114784✔TlvTypeStartScreenReply
544screen1115040✔TlvTypeScreenFrame
544screen1115296✔TlvTypeStopScreenRequest
544screen1115552✔TlvTypeScreenStoppedReply
544screen1115808✔TlvTypeStartScreenRecording
548cam web1122720✔TlvTypeStartWebCamRequest
548cam web1122976✔TlvTypeStartWebCamReply
548cam web1123232✔TlvTypeWebCamFrame
548cam web1123488✔TlvTypeStopWebCamRequest
548cam web1123744✔TlvTypeWebCamStoppedReply
548cam web1124000✔TlvTypeStartWebCamRecording
550config video1126560✔TlvTypeGetVideoConfigRequest
550config video1126816✔TlvTypeVideoConfigReply
550config video1127072✔TlvTypeSetVideoConfigRequest
5521130560✔TlvTypeVDFrameID
5521130896✔TlvTypeVDFrameData
5521131136✔TlvTypeOriginalVideoResolution
5521131392✔TlvTypeVideoResolution
5521132160✔TlvTypeAutomaticRecordingUID
576key logging1180064✔TlvTypeStartKeyLoggingRequest
576key logging1180320✔TlvTypeStartKeyLoggingReply
576key logging1180576✔TlvTypeKeyLoggingFrame
576key logging1180832✔TlvTypeStopKeyLoggingRequest
576key logging1181088✔TlvTypeKeyLoggingStoppedReply
582config keylogger1192096✔TlvTypeGetKeyloggerConfigRequest
582config keylogger1192352✔TlvTypeKeyloggerConfigReply
582config keylogger1192608✔TlvTypeSetKeyloggerConfigRequest
584kl frame data1196416✔TlvTypeKLFrameData
640skype1311136✔TlvTypeSkypeAudioMetaInfo
640skype1311376✔TlvTypeSkypeAudioRecording
640skype1311648✔TlvTypeSkypeTextRecording
640skype1311904✔TlvTypeSkypeFileMetaInfo
640skype1312144✔TlvTypeSkypeFileRecording
640skype1312416✔TlvTypeSkypeContactsRecording
640skype1312640✔TlvTypeSkypeContactsUserData
646config skype1323168✔TlvTypeGetSkypeConfigRequest
646config skype1323424✔TlvTypeSkypeConfigReply
646config skype1323680✔TlvTypeSetSkypeConfigRequest
646config skype1324336✔TlvTypeConfigSkypeAudioEnable
646config skype1324592✔TlvTypeConfigSkypeTextEnable
646config skype1324848✔TlvTypeConfigSkypeFileEnable
647config contacts enable list skype1325104✔TlvTypeConfigSkypeContactsListEnable
648skype1327232✔TlvTypeSkypeAudioEncodingType
648skype1327488✔TlvTypeSkypeLoggedInUserAccountName
648skype1327744✔TlvTypeSkypeConversationPartnerAccountName
648skype1328000✔TlvTypeSkypeConversationPartnerDisplayName
648skype1328256✔TlvTypeSkypeChatMembers
648skype1328512✔TlvTypeSkypeTextMessage
648skype1328768✔TlvTypeSkypeChatID
648skype1329024✔TlvTypeSkypeSenderAccountName
649skype1329280✔TlvTypeSkypeSenderDisplayName
649skype1329536✔TlvTypeSkypeIncoming
649skype1329792✔TlvTypeSkypeSessionType
704changed file1442208✔TlvTypeChangedFileMetaInfo
704changed file1442432✔TlvTypeChangedFileChangeTime
704changed file1442688✔TlvTypeChangedFileChangeEvent
704changed file1442960✔TlvTypeChangedFileRecording
710config changed1454240✔TlvTypeGetChangedConfigRequest
710config changed1454496✔TlvTypeChangedConfigReply
710config changed1454752✔TlvTypeSetChangedConfigRequest
710config changed1454912✔TlvTypeConfigChangedEvents
7361507744✔TlvTypeAccessedFileMetaInfo
7361507968✔TlvTypeAccessedFileAccessTime
7361508224✔TlvTypeAccessedFileAccessEvent
7361508496✔TlvTypeAccessedFileRecording
7361508736✔TlvTypeAccessedApplicationName
7361508912✔TlvTypeConfigRecordImagesFromExplorer
742accessed config1519776✔TlvTypeGetAccessedConfigRequest
742accessed config1520032✔TlvTypeAccessedConfigReply
742accessed config1520288✔TlvTypeSetAccessedConfigRequest
742accessed config1520448✔TlvTypeConfigAccessedEvents
768print1573280✔TlvTypePrintFileMetaInfo
768print1573520✔TlvTypePrintFrame
772print1581184✔TlvTypePrintApplicationName
772print1581440✔TlvTypePrintFilename
772print1581696✔TlvTypePrintEncodingType
774print config1585312✔TlvTypeGetPrintConfigRequest
774print config1585568✔TlvTypePrintConfigReply
774print config1585824✔TlvTypeSetPrintConfigRequest
800deleted1638816✔TlvTypeDeletedFileMetaInfo
800deleted1639296✔TlvTypeDeletedFileDeletionTime
800deleted1639552✔TlvTypeDeletedFileRecycleBin
800deleted1639808✔TlvTypeDeletedMethod
800deleted1640064✔TlvTypeDeletedApplicationName
800deleted1640336✔TlvTypeDeletedFileRecording
806config deleted1650848✔TlvTypeGetDeletedConfigRequest
806config deleted1651104✔TlvTypeDeletedConfigReply
806config deleted1651360✔TlvTypeSetDeletedConfigRequest
1024application upload forensics2097568✔TlvTypeUploadForensicsApplicationRequest
1024application upload forensics2097824✔TlvTypeUploadForensicsApplicationReply
1024application upload forensics2098080✔TlvTypeUploadForensicsApplicationChunk
1024application upload forensics2098336✔TlvTypeUploadForensicsApplicationDoneRequest
1024application upload forensics2098592✔TlvTypeUploadForensicsApplicationDoneReply
1026application remove forensics2101664✔TlvTypeRemoveForensicsApplicationRequest
1026application remove forensics2101920✔TlvTypeRemoveForensicsApplicationReply
1028app forensics execute2105760✔TlvTypeForensicsAppExecuteRequest
1028app forensics execute2106016✔TlvTypeForensicsAppExecuteReply
1028app forensics execute2106272✔TlvTypeForensicsAppExecuteResult
1028app forensics execute2106528✔TlvTypeForensicsAppExecuteResultChunk
1028app forensics execute2106784✔TlvTypeForensicsAppExecuteResultDone
1028app forensics execute2107040✔TlvTypeForensicsCancelAppExecuteRequest
1028app forensics execute2107296✔TlvTypeForensicsCancelAppExecuteReply
1030config forensics2109600✔TlvTypeGetForensicsConfigRequest
1030config forensics2109856✔TlvTypeForensicsConfigReply
1030config forensics2110112✔TlvTypeSetForensicsConfigRequest
1032application config info forensics2113680✔TlvTypeConfigForensicsApplicationInfoGeneric
1032application config info forensics2113952✔TlvTypeConfigForensicsApplicationInfo
1034forensics2117760✔TlvTypeConfigForensicsApplicationName
1034forensics2117952✔TlvTypeConfigForensicsApplicationSize
1034forensics2118208✔TlvTypeConfigForensicsApplicationID
1034forensics2118528✔TlvTypeConfigForensicsApplicationCmdline
1034forensics2118784✔TlvTypeConfigForensicsApplicationOutput
1034forensics2118976✔TlvTypeConfigForensicsApplicationTimeout
1034forensics2119232✔TlvTypeConfigForensicsApplicationVersion
1034forensics2119552✔TlvTypeForensicsFriendlyName
1035output application config forensics2119808✔TlvTypeConfigForensicsApplicationOutputPrepend
1035output application config forensics2120064✔TlvTypeConfigForensicsApplicationOutputContentType
1056vo meta info ip2163104✔TlvTypeVoIPMetaInfo
1058vo ip2166912✔TlvTypeVoIPEncodingType
1058vo ip2167168✔TlvTypeVoIPSessionType
1058vo ip2167424✔TlvTypeVoIPApplicationName
1058vo ip2167696✔TlvTypeVoIPAppScreenshot
1058vo ip2167952✔TlvTypeVoIPAudioRecording
1058vo ip2168112✔TlvTypeConfigVoIPScreenshotEnabled
1062vo config ip2175136✔TlvTypeGetVoIPConfigRequest
1062vo config ip2175392✔TlvTypeVoIPConfigReply
1062vo config ip2175648✔TlvTypeSetVoIPConfigRequest
1088clicks mouse2228640✔TlvTypeMouseClicksMetaInfo
1088clicks mouse2228896✔TlvTypeMouseClicksFrame
1090clicks mouse2232448✔TlvTypeMouseClicksEncodingType
1090clicks mouse2232896✔TlvTypeConfigMouseClicksRectangle
1090clicks mouse2233152✔TlvTypeConfigMouseClicksSensitivity
1090clicks mouse2233408✔TlvTypeConfigMouseClicksType
1094clicks config mouse2240672✔TlvTypeGetMouseClicksConfigRequest
1094clicks config mouse2240928✔TlvTypeMouseClicksConfigReply
1094clicks config mouse2241184✔TlvTypeSetMouseClicksConfigRequest
2112sms4325792✔TlvTypeMobileSMSMetaInfo
2112sms4326016✔TlvTypeMobileSMSData
2112sms4326256✔TlvTypeSMSSenderNumber
2112sms4326512✔TlvTypeSMSRecipientNumber
2112sms4326528✔TlvTypeSMSInformation
2112sms4326768✔TlvTypeSMSDirection
2112sms4327040×unknown
2144address book mobile4391328✔TlvTypeMobileAddressBookMetaInfo
2144address book mobile4391552✔TlvTypeMobileAddressBookData
2152address book checksum mobile4407360✔TlvTypeMobileAddressBookChecksum
2176mobile blackberry4456864✔TlvTypeMobileBlackberryMessengerMetaInfo
2176mobile blackberry4457088✔TlvTypeMobileBlackberryMessengerData
2176mobile blackberry4457328✔TlvTypeMobileBlackberryMsChatID
2176mobile blackberry4457600✔TlvTypeMobileBlackberryMsConversationPartners
2208mobile tracking4522400✔TlvTypeMobileTrackingStartRequest
2208mobile tracking4522656✔TlvTypeMobileTrackingStopRequest
2208mobile tracking4523376✔TlvTypeMobileTrackingDataV10
2214mobile config tracking4535200✔TlvTypeMobileTrackingConfig
2214mobile config tracking4535440✔TlvTypeMobileTrackingConfigRaw
2216mobile tracking4538432✔TlvTypeMobileTrackingTimeInterval
2216mobile tracking4538688✔TlvTypeMobileTrackingDistance
2216mobile tracking4538928✔TlvTypeMobileTrackingSendOnAnyChannel
2240mobile call phone4587936✔TlvTypeMobilePhoneCallLogsMetaInfo
2240mobile call phone4588192✔TlvTypeMobilePhoneCallLogsData
2240mobile call phone4588400✔TlvTypeMobilePhoneCallLogsType
2240mobile call phone4588672✔TlvTypeMobilePhoneCallAdditionalInformation
2240mobile call phone4588912✔TlvTypeMobilePhoneCallLogsCallerNumber
2240mobile call phone4589168✔TlvTypeMobilePhoneCallLogsCalleeNumber
2240mobile call phone4589440✔TlvTypeMobilePhoneCallLogsCallerName
2241name call phone logs mobile callee4589696✔TlvTypeMobilePhoneCallLogsCalleeName
2242last call phone entry mobile endtime log4591680✔TlvTypeMobilePhoneCallLogLastEntryEndtime
3072mobile logging6291872✔TlvTypeMobileLoggingMetaInfo
3072mobile logging6292096✔TlvTypeMobileLoggingData
3616master agent7405984✔TlvTypeMasterAgentLogin
3616master agent7406240✔TlvTypeMasterAgentLoginAnswer
3616master agent7406752✔TlvTypeMasterAgentTargetList
3616master agent7407008✔TlvTypeMasterAgentTargetOnlineList
3616master agent7407264✔TlvTypeMasterAgentTargetInfoReply
3616master agent7407520✔TlvTypeMasterAgentUserList
3617master agent list7407776✔TlvTypeMasterAgentUserListReply
3617master agent list7408032✔TlvTypeMasterAgentTargetArchivedList
3617master agent list7408288✔TlvTypeMasterAgentTargetListEx
3617master agent list7408544✔TlvTypeMasterAgentTargetOnlineListEx
3617master agent list7408800✔TlvTypeMasterAgentMobileTargetArchivedList
3617master agent list7409056✔TlvTypeMasterAgentMobileTargetList
3617master agent list7409312✔TlvTypeMasterAgentMobileTargetOnlineList
36187409824✔TlvTypeMasterAgentQueryFirst
36187410080✔TlvTypeMasterAgentQueryNext
36187410336✔TlvTypeMasterAgentQueryLast
36187410592✔TlvTypeMasterAgentQueryAnswer
36187410848✔TlvTypeMasterAgentRemoveRecord
36187411104✔TlvTypeMasterAgentTargetInfoExReply
36187411344✔TlvTypeTargetInfoExProperty
36187411616✔TlvTypeTargetInfoExPropertyValue
36197411840✔TlvTypeTargetInfoExPropertyValueName
36197411968✔TlvTypeTargetInfoExPropertyValueData
36197412384✔TlvTypeMasterAgentAlarm
3620master agent7413920✔TlvTypeMasterAgentRetrieveData
3620master agent7414176✔TlvTypeMasterAgentRetrieveDataAnswer
3620master agent7414432✔TlvTypeMasterAgentRemoveUser
3620master agent7414688✔TlvTypeMasterAgentRemoveTarget
3620master agent7414944✔TlvTypeMasterAgentRetrieveDataComments
3620master agent7415200✔TlvTypeMasterAgentUpdateDataComments
3620master agent7415712✔TlvTypeMasterAgentRetrieveActivityLogging
3621master agent7415968✔TlvTypeMasterAgentRetrieveMasterLogging
3621master agent7416224✔TlvTypeMasterAgentRetrieveAgentActivityLogging
3621master agent7417248✔TlvTypeMasterAgentSendUserGUIConfig
3621master agent7417504✔TlvTypeMasterAgentGetUserGUIConfigRequest
3621master agent7417760✔TlvTypeMasterAgentGetUserGUIConfigReply
3622master agent7418016✔TlvTypeMasterAgentProxyList
3622master agent7418272✔TlvTypeMasterAgentProxyInfoReply
3622master agent7419040✔TlvTypeMasterAgentNameValuePacket
3622master agent7419248✔TlvTypeMasterAgentValueName
3622master agent7419392✔TlvTypeMasterAgentValueData
3622master agent7419808✔TlvTypeMasterAgentRetrieveTargetHistory
3623install master agent7421088✔TlvTypeMasterAgentInstallMasterLicense
3623install master agent7421344✔TlvTypeMasterAgentInstallSoftwareUpdate
3623install master agent7421600✔TlvTypeMasterAgentInstallSoftwareUpdateChunk
3623install master agent7421856✔TlvTypeMasterAgentInstallSoftwareUpdateDone
3624master agent7422112✔TlvTypeMasterAgentSoftwareUpdateInfo
3624master agent7422368✔TlvTypeMasterAgentSoftwareUpdateInfoReply
3624master agent7422624✔TlvTypeMasterAgentSoftwareUpdate
3624master agent7422880✔TlvTypeMasterAgentSoftwareUpdateReply
3624master agent7423136✔TlvTypeMasterAgentSoftwareUpdateNext
3624master agent7423392✔TlvTypeMasterAgentAddTimeSchedule
3624master agent7423648✔TlvTypeMasterAgentAddScreenSchedule
3624master agent7423904✔TlvTypeMasterAgentAddLockedSchedule
3625master agent7424160✔TlvTypeMasterAgentRemoveSchedule
3625master agent7424416✔TlvTypeMasterAgentGetSchedulerList
3625master agent7424672✔TlvTypeMasterAgentSchedulerTimeAction
3625master agent7424928✔TlvTypeMasterAgentSchedulerScreenAction
3625master agent7425184✔TlvTypeMasterAgentSchedulerLockedAction
3625master agent7425440✔TlvTypeMasterAgentProjectSoftwareUpdateInfo
3625master agent7425696✔TlvTypeMasterAgentProjectSoftwareUpdateInfoReply
3625master agent7425952✔TlvTypeMasterAgentProjectSoftwareUpdate
3626master agent7426112✔TlvTypeMasterAgentSchedulerID
3626master agent7426368✔TlvTypeMasterAgentSchedulerStartTime
3626master agent7426624✔TlvTypeMasterAgentSchedulerStopTime
3626master agent7427488✔TlvTypeMasterAgentAddRecordedDataAvailableSchedule
3626master agent7427744✔TlvTypeMasterAgentSchedulerRecordedDataAvailableAction
3627master agent data7428256✔TlvTypeMasterAgentRetrieveRemoteMasterData
3627master agent data7428512✔TlvTypeMasterAgentRetrieveRemoteMasterDataReply
3627master agent data7428768✔TlvTypeMasterAgentDeleteRemoteMasterData
3627master agent data7429024✔TlvTypeMasterAgentRetrieveOfflineMasterData
3627master agent data7429280✔TlvTypeMasterAgentRetrieveOfflineMasterDataReply
3627master agent data7429536✔TlvTypeMasterAgentDeleteOfflineMasterData
3628master agent7430304✔TlvTypeMasterAgentQueryFirstEx
3628master agent7430560✔TlvTypeMasterAgentQueryNextEx
3628master agent7430816✔TlvTypeMasterAgentQueryLastEx
3628master agent7431072✔TlvTypeMasterAgentQueryAnswerEx
3628master agent7431328✔TlvTypeMasterAgentSendUserPreferences
3628master agent7431584✔TlvTypeMasterAgentGetUserPreferencesRequest
3628master agent7431840✔TlvTypeMasterAgentGetUserPreferencesReply
3628master agent7432096✔TlvTypeMasterAgentListMCFilesRequest
3629master agent mc7432608✔TlvTypeMasterAgentDeleteMCFiles
3629master agent mc7432864✔TlvTypeMasterAgentSendMCFiles
3629master agent mc7433120✔TlvTypeMasterAgentMCStatisticsRequest
3629master agent mc7433376✔TlvTypeMasterAgentMCStatisticsReply
3629master agent mc7433616✔TlvTypeMasterAgentMCStatisticsValues
3630master agent7434400✔TlvTypeMasterAgentTrojanKeyRequest
3630master agent7434656✔TlvTypeMasterAgentTrojanKeyReply
3630master agent7434912✔TlvTypeMasterAgentEvProtectionX509Request
3630master agent7435168✔TlvTypeMasterAgentEvProtectionX509Reply
3630master agent7435424✔TlvTypeMasterAgentEvProtectionImportCert
3630master agent7435680✔TlvTypeMasterAgentEvProtectionImportCertCompleted
3630master agent7435936✔TlvTypeMasterAgentConfigurationRequest
3630master agent7436192✔TlvTypeMasterAgentConfigurationReply
3631master agent configuration7436448✔TlvTypeMasterAgentConfigurationUpdateRequest
3631master agent configuration7436704✔TlvTypeMasterAgentConfigurationUpdateRequestCompleted
3631master agent configuration7436944✔TlvTypeMasterAgentConfiguration
3631master agent configuration7437216✔TlvTypeMasterAgentConfigurationValue
3631master agent configuration7437424✔TlvTypeMasterAgentConfigurationValueName
3631master agent configuration7437568✔TlvTypeMasterAgentConfigurationValueData
3631master agent configuration7437984✔TlvTypeMasterAgentConfigurationTransferDone
3632master agent7438496✔TlvTypeMasterAgentRetrieveTargetFile
3632master agent7438752✔TlvTypeMasterAgentRetrieveTargetFileAnswer
3632master agent7438912✔TlvTypeMasterAgentAlarmEntryID
3632master agent7439168✔TlvTypeMasterAgentAlarmEntryVersion
3632master agent7439424✔TlvTypeMasterAgentAlarmTriggerFlags
3632master agent7439776✔TlvTypeMasterAgentGetAlarmList
3632master agent7440032✔TlvTypeMasterAgentAddAlarmEntry
3632master agent7440288✔TlvTypeMasterAgentRemoveAlarmEntry
3633master agent7440544✔TlvTypeMasterAgentAlarmEntry
3633master agent7440800✔TlvTypeMasterAgentSystemStatus
3633master agent7441056✔TlvTypeMasterAgentSystemStatusRequest
3633master agent7441312✔TlvTypeMasterAgentSystemStatusReply
3633master agent7441552✔TlvTypeMasterAgentLicenseValues
3633master agent7441824✔TlvTypeMasterAgentLicenseValuesRequest
3633master agent7442080✔TlvTypeMasterAgentLicenseValuesReply
3634master agent7442592✔TlvTypeMasterAgentGetNetworkConfigurationRequest
3634master agent7442848✔TlvTypeMasterAgentSetNetworkConfigurationRequest
3634master agent7443104✔TlvTypeMasterAgentSetNetworkConfigurationReply
3634master agent7443360✔TlvTypeMasterAgentRetrieveAllowedModulesList
3634master agent7443616✔TlvTypeMasterAgentRetrieveAllowedModulesListAnswer
3636master agent7446688✔TlvTypeMasterAgentRemoveAllTargetData
3636master agent7446944✔TlvTypeMasterAgentForceDownloadRecordedData
3636master agent7447200✔TlvTypeMasterAgentTargetCreateNotification
3636master agent7447456✔TlvTypeMasterAgentMobileTargetInfoReply
3636master agent7447696✔TlvTypeMasterAgentMobileTargetInfoValues
3638master agent alert7450784✔TlvTypeMasterAgentAlert
3640master agent7454880✔TlvTypeMasterAgentAddUser
3640master agent7455392✔TlvTypeMasterAgentAddUserReply
3640master agent7455648✔TlvTypeMasterAgentModifyUser
3640master agent7455904✔TlvTypeMasterAgentSetUserPermission
3640master agent7456160✔TlvTypeMasterAgentSetTargetPermission
3640master agent7456400✔TlvTypeMasterAgentUserPermission
3640master agent7456656✔TlvTypeMasterAgentTargetPermission
3641master agent7456928✔TlvTypeMasterAgentUserPermissionValuePacket
3641master agent7457184✔TlvTypeMasterAgentTargetPermissionValuePacket
3641master agent7457344✔TlvTypeMasterAgentUserPermissionValueName
3641master agent7457600✔TlvTypeMasterAgentTargetPermissionValueName
3641master agent7457856✔TlvTypeMasterAgentUserPermissionValueData
3641master agent7458112✔TlvTypeMasterAgentTargetPermissionValueData
3641master agent7458464✔TlvTypeMasterAgentModifyPassword
3641master agent7458656✔TlvTypeMasterAgentMobileTargetPermissionValueName
3642master agent7458976✔TlvTypeMasterAgentUploadFile
3642master agent7459232✔TlvTypeMasterAgentUploadFileChunk
3642master agent7459488✔TlvTypeMasterAgentUploadFileDone
3642master agent7459744✔TlvTypeMasterAgentUploadFilesTransferDone
3642master agent7460000✔TlvTypeMasterAgentGetTargetModuleConfigRequest
3642master agent7460256✔TlvTypeMasterAgentRemoveFile
3642master agent7460512✔TlvTypeMasterAgentMobileProxyList
3642master agent7460768✔TlvTypeMasterAgentSMSProxyList
3643master agent7461024✔TlvTypeMasterAgentSMSProxyInfoReply
3643master agent7461280✔TlvTypeMasterAgentCallPhoneNumberList
3643master agent7461536✔TlvTypeMasterAgentCallPhoneNumberInfoReply
3643master agent7461792✔TlvTypeMasterAgentGetMobileTargetModuleConfigRequest
3643master agent7462048✔TlvTypeMasterAgentSendSMS
3647master agent7469984✔TlvTypeMasterAgentEncryptionRequired
3647master agent7470240✔TlvTypeMasterAgentFileCompleted
3647master agent7470496✔TlvTypeMasterAgentRequestCompleted
3647master agent7470752✔TlvTypeAgentMasterComm
3647master agent7471008✔TlvTypeMasterAgentRequestStatus
3648master7471424✔TlvTypeProxyMasterCommSig
3648master7471520✔TlvTypeMasterTargetConn
3648master7471776✔TlvTypeProxyMasterComm
3648master7472032✔TlvTypeMasterProxyComm
3648master7472288✔TlvTypeProxyMasterHeartBeatAnswer
3648master7472544✔TlvTypeProxyMasterDisconnect
3648master7472704✔TlvTypeProxyMasterNotification
3648master7473056✔TlvTypeProxyMasterRequest
3649master7473312✔TlvTypeMasterProxyCommNotification
3649master7473568✔TlvTypeMasterCheckTargetDisconnect
3680target proxy7536960✔TlvTypeProxyTargetCommSig
3680target proxy7537312✔TlvTypeProxyTargetComm
3680target proxy7537568✔TlvTypeProxyMasterTargetComm
3680target proxy7537728✔TlvTypeProxyTargetRequestCrypto
3680target proxy7538064✔TlvTypeProxyTargetAnswerCrypto
3744target7668128✔TlvTypeMasterTargetComm
3744target7668384✔TlvTypeTargetCloseAllLiveStreaming
3776relay7733664✔TlvTypeRelayProxyComm
3776relay7734176✔TlvTypeRelayDummyHeartbeat
4032test type meta8257792✔TlvTypeTestMetaTypeInvalid
4032test type meta8258608✔TlvTypeTestMetaTypeBool
4032test type meta8258880✔TlvTypeTestMetaTypeUInt
4032test type meta8259152✔TlvTypeTestMetaTypeInt
4032test type meta8259440✔TlvTypeTestMetaTypeString
4033test8259712✔TlvTypeTestMetaTypeUnicode
4033test8259984✔TlvTypeTestMetaTypeRaw
4033test8260256✔TlvTypeTestMetaTypeGroup
4033test8260416✔TlvTypeTestMemberIdentifier
4033test8260736✔TlvTypeTestMemberName
4096target8389008✔TlvTypeTargetData
4096target8389280✔TlvTypeTargetHeartBeat
4096target8389680✔TlvTypeTargetKeepSessionAlive
4096target8390000✔TlvTypeTargetLocalIP
4096target8390256✔TlvTypeTargetGlobalIP
4096target8390448✔TlvTypeTargetState
4097agent master8390784✔TlvTypeTargetID
4097agent master8391072✔TlvTypeGetInstalledModulesRequest
4097agent master8391328✔TlvTypeInstalledModulesReply
4097agent master8391488✔TlvTypeTrojanUID
4097agent master8391808✔TlvTypeTrojanID
4097agent master8392000✔TlvTypeTrojanMaxInfections
4097agent master8392240✔TlvTypeScreenSaverOn
4097agent master8392496✔TlvTypeScreenLocked
4098agent master8392752✔TlvTypeRecordedDataAvailable
4098agent master8393024✔TlvTypeDownloadedRecordedDataTimeStamp
4098agent master8393280✔TlvTypeInstallationMode
4098agent master8393552✔TlvTypeTargetRemoveNotification
4098agent master8393792✔TlvTypeTargetPlatformBits
4098agent master8394032✔TlvTypeRemoveItselfMaxInfectionReached
4098agent master8394288✔TlvTypeRemoveItselfAtMasterRequest
4098agent master8394544✔TlvTypeRemoveItselfAtAgentRequest
4099agent master8394912✔TlvTypeRemoveItselfAtAgentReqRequest
4099agent master8395072✔TlvTypeRecordedFilesDownloadTotal
4099agent master8395328✔TlvTypeRecordedFilesDownloadProgress
4099agent master8395632✔TlvTypeTargetLicenseInfo
4099agent master8395840✔TlvTypeRemoveTargetLicenseInfo
4099agent master8396176✔TlvTypeTargetAllConfigurations
4100target error8396960✔TlvTypeTargetError
4102target config8401056✔TlvTypeGetTargetConfigRequest
4102target config8401312✔TlvTypeTargetConfigReply
4102target config8401568✔TlvTypeSetTargetConfigRequest
4102target config8402304✔TlvTypeConfigTargetID
4102target config8402496✔TlvTypeConfigTargetHeartbeatInterval
4102target config8402800✔TlvTypeConfigTargetProxy
4103agent master8403008✔TlvTypeConfigTargetPort
4103agent master8403584✔TlvTypeConfigAutoRemovalDateTime
4103agent master8403776✔TlvTypeConfigAutoRemovalIfNoProxy
4103agent master8404032✔TlvTypeInternalAutoRemovalElapsedTime
4104active hiding config8405040✔TlvTypeConfigActiveHiding
4106target module8409248✔TlvTypeTargetLoadModuleRequest
4106target module8409504✔TlvTypeTargetLoadModuleReply
4106target module8409760✔TlvTypeTargetUnLoadModuleRequest
4106target module8410016✔TlvTypeTargetUnLoadModuleReply
4106target module8410272✔TlvTypeTargetUploadModuleRequest
4106target module8410528✔TlvTypeTargetUploadModuleReply
4106target module8410784✔TlvTypeTargetUploadModuleChunk
4106target module8411040✔TlvTypeTargetUploadModuleDoneRequest
4107target module8411296✔TlvTypeTargetUploadModuleDoneReply
4107target module8411552✔TlvTypeTargetRemoveModuleRequest
4107target module8411808✔TlvTypeTargetRemoveModuleReply
4107target module8412064✔TlvTypeTargetOfflineUploadModuleRequest
4107target module8412320✔TlvTypeTargetOfflineUploadModuleReply
4107target module8412576✔TlvTypeTargetOfflineUploadModuleChunk
4107target module8412832✔TlvTypeTargetOfflineUploadModuleDoneRequest
4107target module8413088✔TlvTypeTargetOfflineUploadModuleDoneReply
4108target error8413344✔TlvTypeTargetOfflineError
4108target error8413600✔TlvTypeTargetUploadError
4109files reply master list agent mc8415392✔TlvTypeMasterAgentListMCFilesReply
4110target recorded8417440✔TlvTypeTargetGetRecordedFilesRequest
4110target recorded8417696✔TlvTypeTargetRecordedFilesReply
4110target recorded8417952✔TlvTypeTargetRecordedFileDownloadRequest
4110target recorded8418208✔TlvTypeTargetRecordedFileDownloadReply
4110target recorded8418464✔TlvTypeTargetRecordedFileDownloadChunk
4110target recorded8418720✔TlvTypeTargetRecordedFileDownloadCompleted
4110target recorded8418976✔TlvTypeTargetRecordedFileDeleteRequest
4110target recorded8419232✔TlvTypeTargetRecordedFileDeleteReply
4111target recorded ex8419488✔TlvTypeTargetGetRecordedFilesRequestEx
4111target recorded ex8419744✔TlvTypeTargetRecordedFilesReplyEx
4111target recorded ex8420000✔TlvTypeTargetRecordedFileDeleteRequestEx
4111target recorded ex8420256✔TlvTypeTargetRecordedFilesDownloadRequestEx
4128data8454544✔TlvTypeProxyData
4128data8454800✔TlvTypeRelayData
4130proxy8458400✔TlvTypeProxyTargetDisconnect
4130proxy8458656✔TlvTypeProxyMobileTargetDisconnect
4130proxy8458912✔TlvTypeProxyDummyHeartbeat
4130proxy8459168✔TlvTypeProxyMobileDummyHeartbeat
4160master8520080✔TlvTypeMasterData
4160master8520768✔TlvTypeMasterMode
4160master8521024✔TlvTypeMasterToken
4160master8521344✔TlvTypeMasterQueryResult
4161string master alarm8522368✔TlvTypeMasterAlarmString
4192agent8585616✔TlvTypeAgentData
4192agent8585808✔TlvTypeAgentQueryID
4192agent8586048✔TlvTypeAgentQueryModSubmodID
4192agent8586304✔TlvTypeAgentQueryFromDate
4192agent8586560✔TlvTypeAgentQueryToDate
4192agent8586816✔TlvTypeAgentQuerySortOrder
4192agent8587136✔TlvTypeAgentQueryValueFilter
4193uid agent8587328✔TlvTypeAgentUID
4224mobile8651152✔TlvTypeMobileTargetData
4224mobile8651376✔TlvTypeMobileTargetHeartBeatV10
4224mobile8651632✔TlvTypeMobileTargetExtendedHeartBeatV10
4224mobile8651888✔TlvTypeMobileHeartBeatReplyV10
4225installed reply modules mobile8653472✔TlvTypeMobileInstalledModulesReply
4225installed reply modules mobile8652912×unknown
4226module upload mobile target8655008✔TlvTypeMobileTargetOfflineUploadModuleRequest
4226module upload mobile target8656032✔TlvTypeMobileTargetUploadModuleRequest
4226module upload mobile target8656288✔TlvTypeMobileTargetUploadModuleReply
4226module upload mobile target8656544✔TlvTypeMobileTargetUploadModuleChunk
4226module upload mobile target8656800✔TlvTypeMobileTargetUploadModuleDoneRequest
4227target mobile8657056✔TlvTypeMobileTargetUploadModuleDoneReply
4227target mobile8657312✔TlvTypeMobileTargetRemoveModuleRequest
4227target mobile8657568✔TlvTypeMobileTargetRemoveModuleReply
4227target mobile8657824✔TlvTypeMobileTargetOfflineUploadModuleReply
4227target mobile8658080✔TlvTypeMobileTargetOfflineUploadModuleChunk
4227target mobile8658336✔TlvTypeMobileTargetOfflineUploadModuleDoneRequest
4227target mobile8658592✔TlvTypeMobileTargetOfflineUploadModuleDoneReply
4227target mobile8658848✔TlvTypeMobileTargetOfflineError
4228mobile target8659104✔TlvTypeMobileTargetError
4228mobile target8659360✔TlvTypeMobileTargetGetRecordedFilesRequest
4228mobile target8659616✔TlvTypeMobileTargetRecordedFilesReply
4228mobile target8659872✔TlvTypeMobileTargetRecordedFileDownloadRequest
4228mobile target8660128✔TlvTypeMobileTargetRecordedFileDownloadReply
4228mobile target8660384✔TlvTypeMobileTargetRecordedFileDownloadChunk
4228mobile target8660640✔TlvTypeMobileTargetRecordedFileDownloadCompleted
4228mobile target8660896✔TlvTypeMobileTargetRecordedFileDeleteRequest
4229target reply delete mobile recorded file8661152✔TlvTypeMobileTargetRecordedFileDeleteReply
4230mobile config target8663968✔TlvTypeMobileTargetOfflineConfig
4230mobile config target8664224✔TlvTypeMobileTargetEmergencyConfigAsTLV
4230mobile config target8664432✔TlvTypeMobileTargetEmergencyConfig
4234load module mobile target8671392✔TlvTypeMobileTargetLoadModuleRequest
4234load module mobile target8671648✔TlvTypeMobileTargetLoadModuleReply
4234load module mobile target8671904✔TlvTypeMobileTargetUnLoadModuleRequest
4234load module mobile target8672160✔TlvTypeMobileTargetUnLoadModuleReply
4236target error8675472✔TlvTypeMobileTargetHeartbeatEvents
4236agent master files mc reply list8675648✔TlvTypeMobileTargetHeartbeatInterval
4236recorded target8675984✔TlvTypeMobileTargetHeartbeatRestrictions
4236recorded target8676208✔TlvTypeConfigSMSPhoneNumber
4236recorded target8676496✔TlvTypeMobileTargetPositioning
4236recorded target8676672✔TlvTypeMobileTrojanUID
4236recorded target8676976✔TlvTypeMobileTrojanID
4236recorded target8677296✔TlvTypeMobileTargetLocationChangedRange
4237config8677440✔TlvTypeConfigMobileAutoRemovalDateTime
4237config8677808✔TlvTypeConfigOverwriteProxyAndPhones
4237config8678000✔TlvTypeConfigCallPhoneNumber
4238ex recorded target8679488✔TlvTypeLocationAreaCode
4238ex recorded target8679744✔TlvTypeCellID
4238ex recorded target8680048✔TlvTypeMobileCountryCode
4238data8680304✔TlvTypeMobileNetworkCode
4238data8680560✔TlvTypeIMSI
4238proxy8680816✔TlvTypeIMEI
4238proxy8681072✔TlvTypeGPSLatitude
4238proxy8681328✔TlvTypeGPSLongitude
4239proxy8681520✔TlvTypeFirstHeartbeat
4239master8681872✔TlvTypeInstalledModules
4240gps valid values8683568✔TlvTypeValidGPSValues
4288mobile proxy comm target8782176✔TlvTypeProxyMobileTargetCommSig
4288mobile proxy comm target8782496✔TlvTypeProxyMobileTargetComm
4288mobile proxy comm target8782752✔TlvTypeProxyMasterMobileTargetComm
4384master mobile8978752✔TlvTypeMobileProxyMasterCommSig
4384master mobile8978848✔TlvTypeMasterMobileTargetConn
4384master mobile8979104✔TlvTypeMobileProxyMasterComm
4384master mobile8979360✔TlvTypeMobileMasterProxyComm
4384master mobile8979616✔TlvTypeProxyMasterMobileHeartBeatAnswer
4384master mobile8979872✔TlvTypeMobileMasterProxyCommNotification
8128agent16646544✔TlvTypePlaintext
8128agent uid16646800✔TlvTypeCompression
8128mobile16647056✔TlvTypeEncryption
8128mobile16647232✔TlvTypeTargetUID
8128mobile16647536✔TlvTypeIPAddress
8128mobile16647808✔TlvTypeUserName
8128installed reply modules mobile16648064✔TlvTypeComputerName
8129installed reply modules mobile16648304✔TlvTypeLoginName
8129module upload mobile target16648560✔TlvTypePassphrase
8129module upload mobile target16648832✔TlvTypeRecordID
8129module upload mobile target16649088✔TlvTypeOwner
8129module upload mobile target16649344✔TlvTypeMetaData
8129module upload mobile target16649536✔TlvTypeModuleID
8129mobile target16649856✔TlvTypeOSName
8129mobile target16650048✔TlvTypeModuleSubID
8130mobile target16650320✔TlvTypeErrorCode
8130mobile target16650560✔TlvTypeOffset
8130mobile target16650816✔TlvTypeLength
8130mobile target16651088✔TlvTypeRequestID
8130mobile target16651328✔TlvTypeRequestType
8130mobile target16651584✔TlvTypeVersion
8130mobile target16651840✔TlvTypeMachineID
8130mobile target16652096✔TlvTypeMajorNumber
8131mobile target16652352✔TlvTypeMinorNumber
8131mobile target16652656✔TlvTypeGlobalIPAddress
8131mobile target16652912✔TlvTypeASCII_Filename
8131mobile target16653120✔TlvTypeFilesize
8131mobile target16653392✔TlvTypeFilecount
8131mobile target16653712✔TlvTypeFiledata
8131target reply recorded delete file mobile16653968✔TlvTypeMD5Sum
8131mobile target config16654144✔TlvTypeProxyPort
8132mobile target config16654400✔TlvTypeStatus
8132mobile target config16654656✔TlvTypeUserID
8132module load mobile target16654912✔TlvTypeGroupID
8132module load mobile target16655168✔TlvTypePermissions
8132module load mobile target16655424✔TlvTypeRequestCode
8132module load mobile target16655680✔TlvTypeDataSize
813216655936✔TlvTypeKeyType
813216656240✔TlvTypeEmail
813316656432✔TlvTypeEnabled
813316656688✔TlvTypeLicensed
813316656960✔TlvTypeAudioFrequency
813316657216✔TlvTypeAudioBitsPerSample
813316657472✔TlvTypeAudioChannels
813316657728✔TlvTypeStartTime
8133config16657984✔TlvTypeStopTime
8133config16658240✔TlvTypeBitMask
8134config16658560✔TlvTypeTimeZone
813416658816✔TlvTypeDateTime
813416659072✔TlvTypeStartSessionDateTime
813416659328✔TlvTypeStopSessionDateTime
813416659520✔TlvTypeDateTimeRef
813416659776✔TlvTypeScheduleRepeat
813416660032✔TlvTypeUnixMasterDateTime
813416660288✔TlvTypeUnixUTCDateTime
813516660544✔TlvTypeDurationInSeconds
813516660864✔TlvTypeMasterRefTime
813516661120✔TlvTypeMasterRefTimeStart
8135values gps valid16661376✔TlvTypeMasterRefTimeEnd
813516661568✔TlvTypeCounter
813516661888✔TlvTypeWhiteListEntry
813516662144✔TlvTypeBlackListEntry
813516662336✔TlvTypeBlackWhiteListingMode
8136config16662576✔TlvTypeConfigEnabled
8136config16662848✔TlvTypeConfigMaxRecordingSize
8136config16663104✔TlvTypeConfigAudioQuality
8136config16663344✔TlvTypeConfigVideoBlackAndWhite
8136config16663616✔TlvTypeConfigVideoResolution
8136config16663872✔TlvTypeConfigCaptureFrequency
8136config16664128✔TlvTypeConfigVideoQuality
8136config16664384✔TlvTypeConfigFilesStandardFilter
8137config16664704✔TlvTypeConfigFilesCustomFilter
8137config16664896✔TlvTypeConfigStandardLocation
8137config16665216✔TlvTypeConfigCustomLocation
8137config16665408✔TlvTypeConfigFileChunkSize
8137config16665664✔TlvTypeConfigFileTransferSpeed
8137config16665904✔TlvTypeConfigUploadFileOverwrite
8137config16666160✔TlvTypeConfigDeleteOverReboot
8137config16666496✔TlvTypeConfigCustomLocationException
8138master mobile16666752✔TlvTypeExtraData
8138master mobile16667008✔TlvTypeSignature
813816667264✔TlvTypeComments
813816667520✔TlvTypeDescription
813816667776✔TlvTypeFilenameExtension
813816668032✔TlvTypeSessionType
813816668224✔TlvTypePeriod
813816668512✔TlvTypeMobileTargetUID
813916668784✔TlvTypeMobileTargetID
813916669072✔TlvTypeMobilePlaintext
813916669328✔TlvTypeMobileCompression
813916669584✔TlvTypeMobileEncryption
813916669824✔TlvTypeEncodingType
813916670576✔TlvTypePhoneNumber
8140custom config location mode16670784✔TlvTypeConfigCustomLocationMode
8140custom config location mode16672080×unknown
8140custom config location mode16671792×unknown
8142network interface16674928✔TlvTypeNetworkInterface
8142network interface16675136✔TlvTypeNetworkInterfaceMode
8142network interface16675440✔TlvTypeNetworkInterfaceAddress
8142network interface16675696✔TlvTypeNetworkInterfaceNetmask
8142network interface16675952✔TlvTypeNetworkInterfaceGateway
8142network interface16676208✔TlvTypeNetworkInterfaceDNS_1
8142network interface16676464✔TlvTypeNetworkInterfaceDNS_2
814316677440✔TlvTypeLoginTime
814316677696✔TlvTypeLogoffTime
814316678720✔TlvTypeGeneric_Type
814416678976✔TlvTypeChecksum
814416679280✔TlvTypeCity
814416679536✔TlvTypeCountry
814416679792✔TlvTypeCountryCode
814616683072✔TlvTypeTargetType
814616683392✔TlvTypeDurationString
814616683904×unknown
814616684848×unknown
816016712000✔TlvTypeTargetConnectionBroken
816016712256✔TlvTypeAgentConnectionBroken
816016712512✔TlvTypeTargetOffline
817616744768✔TlvTypeProxyConnectionBroken
42428688960×unknown
42428689296×unknown
42428689568×unknown
27525636992×unknown
27525637504×unknown
27525637760×unknown
27525636464×unknown
27525636736×unknown
27525637248×unknown
27535638256×unknown
27535638768×unknown
27545641600×unknown
27545640608×unknown
27545641120×unknown
27545640864×unknown
27545640352×unknown
22184542832×unknown
22184542624×unknown
814716685104×unknown
814716685392×unknown
26585444000×unknown
26585444512×unknown
26565440320×unknown
26565439904×unknown
26605447840×unknown
27225575072×unknown
27225575328×unknown
2722config5575840×unknown
2560config5243552×unknown
2560config5243296×unknown
4244config8693104×unknown
4244config8692080×unknown
4244config8692336×unknown
4244config8692592×unknown
4244config8692848×unknown
4244config8693360×unknown
4244config8691872×unknown
2690config5509536×unknown
2690config5510048×unknown
2692config5513376×unknown
2688config5505856×unknown
2688config5505440×unknown
2592config5309088×unknown
26025329824×unknown
26025330592×unknown
26025329568×unknown
26025330080×unknown
25965317536×unknown
25965317792×unknown
25965318048×unknown
25965317280×unknown
25945313440×unknown
25945312928×unknown
25945313184×unknown
26005325216×unknown
25985321376×unknown
25985322144×unknown
2784mode location custom config5703584×unknown
2784mode location custom config5703328×unknown
2784mode location custom config5702816×unknown
2784interface network5702032×unknown
2784interface network5702304×unknown
2785interface network5703808×unknown
2785interface network5704064×unknown
1757interface network3600000×unknown
2696interface network5521552×unknown
2696interface network5521568×unknown
27205570960×unknown
27205571232×unknown
27565644432×unknown
27565644704×unknown
28485833104×unknown
28485833376×unknown
31046357392×unknown
31046357664×unknown
26645456016×unknown
26645456288×unknown
42438690064×unknown
42438690336×unknown
42438689712×unknown
23044719008×unknown
23044719232×unknown
31066361200×unknown
1642533639248×unknown
4878199903492×unknown
4160985215461×unknown
44949203775×unknown
2558652401552×unknown
2121443446532×unknown
2779356920439×unknown
2699255281185×unknown
4430890744648×unknown

Conclusion

SHA256DexDenConf. in APKTippyTimeTippyPadCert not beforeVT submissionSuspected build date
c2ce202e6e08c41e8f7a0b15e7d07817
04e17f8ed52d1b2ad7212ac29926436e
×✔××2016/10/102017/07/27approx. 2017/06/01
2f881b98088bbe91dc8fd003eed17f41
a35182a27663e6e103b2b6673b592350
×✔✔×2014/10/212019/10/12
269227c4c4770e109e53c6cf87bd9bde
367843c4806f5975c5aa317f318e28a9
×✔✔×2018/06/202019/03/24> 2017/12/07
1221bb41b315b5d6dc336a931eb4fb6f
eca7fe80e8dc42647c16686629767ec8
×✔✔✔2017/05/292017/09/13> 2017/05/29
269227c4c4770e109e53c6cf87bd9bde
367843c4806f5975c5aa317f318e28a9
×✔✔×2018/06/202019/03/24> 2018/06/20
a504ba88c39c325589079afd7822cc4b
431182c8ec0304f21316e964b6e9eb7f
×✔✔×2017/11/162018/07/31> 2017/11/16
854774a198db490a1ae9f06d5da5fe6a
1f683bf3d7186e56776516f982d41ad3
✔×✔✔2017/05/272019/11/27> 2017/05/27

Our analysis based on 3 different parameters: configuration location, string obfuscation and local socket address generation tends to demonstrate that the sample we have analyzed is (as far as we know) the only known FinSpy for Android sample storing its configuration directly into the DEX file (DexDen). Reports FinSpy Dokumentation yaraby Thorsten Schröder & Linus Neumann - CCC (Jan. 2020), AccessNow: FinFisher changes tactics to hooks critics (May 2018) and Hacking FinSpy by Sophos (2015) explain how the FinSpy configuration is stored in the APK file metadata. A retro-hunt on VT has found 0 samples (our sample excluded) storing the configuration the DEX. Changing the configuration location is a strong structural change indicating a suspected new version of FinSpy for Android.

A trend emerges when we focus on how the local socket address is generated and how strings are obfuscated. Old samples do not use a “magic” timestamp (TippyTime) in the generation algorithm nor pad-obfuscated strings (TippyPad). By analyzing briefly samples shared by CCC, we observed that since 2017, FinSpy seems to use TippyTime. However, only one sample use TippyPad string obfuscation.

Regarding unknown or undocumented TLV types, we have no clue indicating they are new or not since we have not analyzed other samples in deep and no unknown TLV types have ever been reported.

Sample behavioral analysis

The sample we analyze is heavily obfuscated:

  • strings are encoded at the class level;
  • Java methods are obfuscated (shortened);
  • control flow graph is broken by the heavy use of threads and IPC;
  • dummy calls are inserted between almost all the “useful” ones.

To analyze the sample, we firstly do a fast behavioral recon with Aether by extracting control flow graphs in which:

  • sinks are Java methods of interest;
  • sources are detected entry-points (i.e. services, threads, activities, …).

Secondly we extract TLV types involved in the different control flow graphs and then correlate the meaning of TLV with the meaning of actions done on the OS.

Configuration parsing

CFG locating the DEX file

CFG locating the DEX file

As we have seen before FinSpy stores its configuration into the DEX file. Thus, the first step for it is to locate the DEX file. On Android, the Java method android.content.Context.getPackageCodePath() returns the location of the APK which contains the original DEX (not the optimized one). Once located, the DEX file is copied at a randomly generated path into the cache directory. Once copied, the DEX loaded (or self-loaded since it is loaded by itself) using the Java method dalvik.system.DexClassLoader.loadClass().

CFG loading the DEX file

CFG loading the DEX file

Finally, FinSpy parses its configuration stored into the loaded DEX using a large switch-case statement.

CFG parsing the configuration

CFG parsing the configuration

The configuration stored into the current sample looks like:

  • TlvTypeMobileTargetID = “WIFI”
  • TlvTypeMobileTargetHeartbeatInterval = 120
  • TlvTypeMobileTargetPositioning = b’\x82\x87\x86\x81\x83'
  • TlvTypeConfigTargetProxy = “[redacted]”
  • TlvTypeConfigTargetProxy = “[redacted]”
  • TlvTypeConfigTargetPort = [redacted]
  • TlvTypeConfigSMSPhoneNumber = “[redacted]”
  • TlvTypeMobileTrojanID = “WIFI”
  • TlvTypeMobileTrojanUID = b’\xfc\x14\xb0\r'
  • TlvTypeUserID = 1000
  • TlvTypeTrojanMaxInfections = 9
  • TlvTypeConfigMobileAutoRemovalDateTime = Thu Jan 1 01:00:00 1970
  • TlvTypeConfigAutoRemovalIfNoProxy = 168
  • TlvTypeMobileTargetHeartbeatEvents = 173
  • TlvTypeMobileTargetHeartbeatRestrictions = b’\xd0\x00'
  • TlvTypeMobileTrackingDistance = 1000
  • TlvTypeMobileTrackingTimeInterval = 300
  • TlvTypeInstalledModules =
    • Logging: Off
    • Spy Call: Off
    • Call Interception: Off
    • SMS: On
    • Address Book: On
    • Tracking: On
    • Phone Logs: On

Note: Trojan UID is the AES sub-key used to encrypt/decrypt payloads exchange with the C2.

Emergency reconfiguration

FinSpy can be reconfigured by SMS, the Java method org.xmlpush.v3.q.c.a() is dedicated to that. FinSpy uses a lot of threads, probably not for performance purposes but to circumvent automatic reverse engineering of CFG. The following CFG shows the break in the CFG.

FinSpy reconfiguration

FinSpy reconfiguration

When an SMS corresponding to TlvTypeMobileTargetEmergencyConfig is received, FinSpy reconfigures itself by parsing the SMS payload. The following attributes can be reconfigured:

  • TlvTypeConfigTargetPort: port for C2 proxy
  • TlvTypeConfigSMSPhoneNumber: phone number for SMS based C2 communications
  • TlvTypeMobileTrojanID: unknown purpose
  • TlvTypeMobileTrojanUID: AES sub-key
  • TlvTypeUserID: unknown purpose
  • TlvTypeTrojanMaxInfections: unknown purpose
  • TlvTypeConfigMobileAutoRemovalDateTime: implant self-destruct past this date
  • TlvTypeConfigAutoRemovalIfNoProxy: implant self-destruct if C2 proxy is unavailable
  • TlvTypeMobileTargetHeartbeatRestrictions: conditions to avoid callbacks
  • TlvTypeMobileTargetHeartbeatEvents: events to trigger callbacks to the C2
  • TlvTypeMobileTargetLocationChangedRange: trigger updates based on location changes
  • TlvTypeInstalledModules: list of implant features and their configuration (SMS log, call log, etc.)
  • and other unknown parameters

Privilege escalation

Runtime command execution

Runtime command execution

FinSpy needs super user privileges to do things like access data of other applications. When started, the implant checks if su is available and then check if the user id is 0. We found no evidence of vulnerability exploitation (DirtyCow or SELinux abuse) like the ones mentioned in other publicly available reports. We did not find ELF hidden into the APK, DEX or into natives libraries packaged in the APK.

Either we have missed something or this sample is tailored to be implanted after exploitation.

Communication with C2

HTTP based exfiltration

HTTP based exfiltration

SMS based exfiltration

SMS based exfiltration

The implant can use both SMS and HTTP requests to send collected data to the command and control server. Both SMS and HTTP communications use the same marshaling schema based on TLV types describing data. Payload are encrypted before being sent. The encryption mechanism is the same as the one described in AccessNow: FinFisher changes tactics to hooks critics.

Self-destruction capability

FinSpy self-destruct script generation

FinSpy self-destruct script generation

Since FinSpy has the ability to remove itself, it generates a shell script /system/etc/xrebuild.sh listed below.

#!/system/bin/sh
mount -o rw,remount /system
am force-stop <package name>
dd if=/dev/zero of=<apk path> bs=1024 count=8192
find <path> | while read line; do dd if=/dev/zero of=$line bs=1024 count=8192; done

Then it makes the script executable and reboots the device.

The script writes zeros over the APK file and does the same for all files located into the application data directory. FinSpy can be configured to remove itself at a given date and time, when the C2 is not reachable for a given amount of time or when the implant receive a specific command. By filling all files with zeros, FinSpy prevents forensic investigation. The script generation takes in account the fact that the implant can be a system application or a regular application.

Data collection

FinSpy content changes tracking

FinSpy content changes tracking

Java class org.xmlpush.v3.Services registers the following content observers on:

  • changes on phone contact list
  • changes on SIM contact list
  • changes on SMS log
  • changes on calendar

Java class org.xmlpush.v3.eventbased.ReceiverService listens to the following events:

  • new outgoing phone call
  • new data SMS received
  • SIM card has been changed

Numerous threads are started to periodically check device location and messenger applications files. Every time a change occurs on observed data or an event occurs, FinSpy collects data related to that change/event and sends it to the C2 either over HTTP or SMS.

Data collected and sent by default

The FinSpy code shows that all payloads sent to C2s contain at least:

  • trojan UID
  • phone number
  • timezone
  • current date and time
  • mobile operator name
  • country code based on mobile network
  • location area code
  • mobile cell ID

Messenger applications data exfiltration

FinSpy is designed to exfiltrate contacts, messages, groups, location and files of the following applications:

  • com.viber.voip
  • jp.naver.line.android
  • com.skype.raider
  • com.facebook.orca
  • com.futurebits.instamessage.free
  • jp.naver.line.android
  • com.viber.voip
  • com.skype.raider
  • com.futurebits.instamessage.free
  • com.bbm
  • ch.threema.app
  • org.telegram.messenger

FinSpy looks at the content of each application data directory (i.e. /data/data/com.futurebits.instamessage.free/). This capability has already been documented in many public reports.

Call log exfiltration

FinSpy exfiltrates the following information each time a call is placed:

  • caller’s phone number
  • callee’s phone number
  • caller’s name
  • callee’s name
  • call duration is seconds

SMS log exfiltration

FinSpy exfiltrates the following information each time a SMS received:

  • date and time
  • sender’s phone number
  • recipient’s phone number
  • SMS content

Calendar events exfiltration

FinSpy exfiltrates the following information each time a new event is added/edited:

  • attendees’ names
  • attendees’ emails
  • event title
  • event description
  • event location
  • event start and end date

Address book exfiltration

FinSpy exfiltrates the following information each time a modification is done on the address book:

  • work phone number
  • mobile phone number
  • home phone number
  • all other available phone numbers
  • display name
  • location
  • email addresses
  • postal addresses

FinSpy collects contacts stored in the phone memory and in the SIM card.

SIM information exfiltration

SIM information retrieval

SIM information retrieval

Each time the SIM card is changed, FinSpy sends the following data to the C2:

  • phone number
  • SIM serial number
  • IMEI
  • IMSI
  • network operator name

Location tracking

GPS based location tracking

GPS based location tracking

Network based location tracking

Network based location tracking

FinSpy periodically collects and sends the device location. It collects both GPS based location and network based location by using cells.