# T1140 - Deobfuscate/Decode Files or Information

## Description from ATT&CK

> Adversaries may use [Obfuscated Files or Information](https://attack.mitre.org/techniques/T1027) to hide artifacts of an intrusion from analysis. They may require separate mechanisms to decode or deobfuscate that information depending on how they intend to use it. Methods for doing that include built-in functionality of malware or by using utilities present on the system.
> 
> One such example is the use of [certutil](https://attack.mitre.org/software/S0160) to decode a remote access tool portable executable file that has been hidden inside a certificate file.(Citation: Malwarebytes Targeted Attack against Saudi Arabia) Another example is using the Windows <code>copy /b</code> or <code>type</code> command to reassemble binary fragments into a malicious payload.(Citation: Carbon Black Obfuscation Sept 2016)(Citation: Sentinel One Tainted Love 2023)
> 
> Sometimes a user's action may be required to open it for deobfuscation or decryption as part of [User Execution](https://attack.mitre.org/techniques/T1204). The user may also be required to input a password to open a password protected compressed/encrypted file that was provided by the adversary.(Citation: Volexity PowerDuke November 2016)

[Source](https://attack.mitre.org/techniques/T1140)

## Atomic Tests

- [Atomic Test #1: Deobfuscate/Decode Files Or Information](#atomic-test-1-deobfuscatedecode-files-or-information)
- [Atomic Test #2: Certutil Rename and Decode](#atomic-test-2-certutil-rename-and-decode)
- [Atomic Test #3: Base64 decoding with Python](#atomic-test-3-base64-decoding-with-python)
- [Atomic Test #4: Base64 decoding with Perl](#atomic-test-4-base64-decoding-with-perl)
- [Atomic Test #5: Base64 decoding with shell utilities](#atomic-test-5-base64-decoding-with-shell-utilities)
- [Atomic Test #6: Base64 decoding with shell utilities (freebsd)](#atomic-test-6-base64-decoding-with-shell-utilities-freebsd)
- [Atomic Test #7: FreeBSD b64encode Shebang in CLI](#atomic-test-7-freebsd-b64encode-shebang-in-cli)
- [Atomic Test #8: Hex decoding with shell utilities](#atomic-test-8-hex-decoding-with-shell-utilities)
- [Atomic Test #9: Linux Base64 Encoded Shebang in CLI](#atomic-test-9-linux-base64-encoded-shebang-in-cli)
- [Atomic Test #10: XOR decoding and command execution using Python](#atomic-test-10-xor-decoding-and-command-execution-using-python)
- [Atomic Test #11: Expand CAB with expand.exe](#atomic-test-11-expand-cab-with-expandexe)

### Atomic Test #1: Deobfuscate/Decode Files Or Information

Encode/Decode executable
Upon execution a file named T1140_calc_decoded.exe will be placed in the temp folder

**Supported Platforms:** Windows

**auto_generated_guid:** `dc6fe391-69e6-4506-bd06-ea5eeb4082f8`

#### Inputs

| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| executable | name of executable | path | C:&#92;Windows&#92;System32&#92;calc.exe|

#### Attack Commands: Run with `command_prompt`!

```cmd
certutil -encode #{executable} %temp%\T1140_calc.txt
certutil -decode %temp%\T1140_calc.txt %temp%\T1140_calc_decoded.exe
```

#### Cleanup Commands

```cmd
del %temp%\T1140_calc.txt >nul 2>&1
del %temp%\T1140_calc_decoded.exe >nul 2>&1
```
### Atomic Test #2: Certutil Rename and Decode

Rename certutil and decode a file. This is in reference to latest research by FireEye [here](https://www.fireeye.com/blog/threat-research/2018/09/apt10-targeting-japanese-corporations-using-updated-ttps.html)

**Supported Platforms:** Windows

**auto_generated_guid:** `71abc534-3c05-4d0c-80f7-cbe93cb2aa94`

#### Inputs

| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| executable | name of executable/file to decode | path | C:&#92;Windows&#92;System32&#92;calc.exe|

#### Attack Commands: Run with `command_prompt`!

```cmd
copy %windir%\system32\certutil.exe %temp%\tcm.tmp
%temp%\tcm.tmp -encode #{executable} %temp%\T1140_calc2.txt
%temp%\tcm.tmp -decode %temp%\T1140_calc2.txt %temp%\T1140_calc2_decoded.exe
```

#### Cleanup Commands

```cmd
del %temp%\tcm.tmp >nul 2>&1
del %temp%\T1140_calc2.txt >nul 2>&1
del %temp%\T1140_calc2_decoded.exe >nul 2>&1
```
### Atomic Test #3: Base64 decoding with Python

Use Python to decode a base64-encoded text string and echo it to the console

**Supported Platforms:** Linux, macOS

**auto_generated_guid:** `356dc0e8-684f-4428-bb94-9313998ad608`

#### Inputs

| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| message | Message to print to the screen | string | Hello from Atomic Red Team test T1140!|
| encoded_file | File to temporarily save encoded text | path | /tmp/T1140.encoded|

#### Attack Commands: Run with `sh`!

```sh
ENCODED=$(python3 -c 'import base64;enc=base64.b64encode("#{message}".encode());print(enc.decode())')
python3 -c "import base64;dec=base64.b64decode(\"$ENCODED\");print(dec.decode())"
python3 -c "import base64 as d;dec=d.b64decode(\"$ENCODED\");print(dec.decode())"
python3 -c "from base64 import b64decode;dec=b64decode(\"$ENCODED\");print(dec.decode())"
python3 -c "from base64 import b64decode as d;dec=d(\"$ENCODED\");print(dec.decode())"
echo $ENCODED | python3 -c "import base64,sys;dec=base64.b64decode(sys.stdin.read());print(dec.decode())"
echo $ENCODED > #{encoded_file} && python3 -c "import base64;dec=base64.b64decode(open('#{encoded_file}').read());print(dec.decode())"
```


#### Dependencies: Run with `sh`!

##### Description: Python must be present

###### Check Prereq Commands

```sh
which python3
```

###### Get Prereq Commands

```sh
echo "Please install Python 3"
```

### Atomic Test #4: Base64 decoding with Perl

Use Perl to decode a base64-encoded text string and echo it to the console

**Supported Platforms:** Linux, macOS

**auto_generated_guid:** `6604d964-b9f6-4d4b-8ce8-499829a14d0a`

#### Inputs

| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| message | Message to print to the screen | string | Hello from Atomic Red Team test T1140!|
| encoded_file | File to temporarily save encoded text | path | /tmp/T1140.encoded|

#### Attack Commands: Run with `sh`!

```sh
ENCODED=$(perl -e "use MIME::Base64;print(encode_base64('#{message}'));")
perl -le "use MIME::Base64;print(decode_base64('$ENCODED'));"
echo $ENCODED | perl -le 'use MIME::Base64;print(decode_base64(<STDIN>));'
echo $ENCODED > #{encoded_file} && perl -le 'use MIME::Base64;open($f,"<","#{encoded_file}");print(decode_base64(<$f>));'
```


#### Dependencies: Run with `sh`!

##### Description: Perl must be present

###### Check Prereq Commands

```sh
which perl
```

###### Get Prereq Commands

```sh
echo "Please install Perl"
```

### Atomic Test #5: Base64 decoding with shell utilities

Use common shell utilities to decode a base64-encoded text string and echo it to the console

**Supported Platforms:** Linux, macOS

**auto_generated_guid:** `b4f