专栏名称: 看雪学苑
致力于移动与安全研究的开发者社区,看雪学院(kanxue.com)官方微信公众帐号。
目录
相关文章推荐
安天集团  ·  端午防五毒——网安科普短片完整解说词 ·  1小时前  
AI数字世界  ·  美英联合发布《AI数据安全:用于训练和操作A ... ·  1小时前  
AI数字世界  ·  美英联合发布《AI数据安全:用于训练和操作A ... ·  1小时前  
奔腾融媒 都市全接触  ·  警方公告!电动摩托车需要注册登记! ·  2 天前  
奔腾融媒 都市全接触  ·  警方公告!电动摩托车需要注册登记! ·  2 天前  
51好读  ›  专栏  ›  看雪学苑

FlokiBot 银行木马详细分析 (二)

看雪学苑  · 公众号  · 互联网安全  · 2017-03-28 18:00

正文

请到「今天看啥」查看全文


int startup_lnk() {

int v0; // edi@1

_WORD *v1; // ecx@1

int v2; // eax@2

_WORD *v3; // ecx@2

const void *v4; // eax@2

const void *v5; // esi@3

int strStartupFolder; // [sp+8h] [bp-20Ch]@1

int v8; // [sp+210h] [bp-4h]@6

v0 = 0;

SHGetFolderPathW_wrap(0, 7, 0, 0, &strStartupFolder); // 7 = CSIDL_STARTUP

v1 = (_WORD *)PathFindFileNameW_wrap(&pFilename);

if ( v1 && (v2 = cstm_strlen(v1), sub_40FECB(v2 - 4, v3), v4) )

v5 = v4;

else

v5 = 0;

if ( v5 ) {

v8 = 0;

if ( build_lnk((int)&v8, (const char *)L"%s\\%s.lnk", &strStartupFolder, v5) > 0 )

v0 = v8;

cstm_FreeHeap(v5);

}

return v0;

}


✿ 挂钩API

概述

基于ZeuS,FlokiBot 用了同一种但又有些许不同的结构数组来存储它的钩子:

typedef struct

{

void *functionForHook;

void *hookerFunction;

void *originalFunction;

DWORD originalFunctionSize;

DWORD dllHash;

DWORD apiHash;

} HOOKWINAPI;

在我们运行完前面用来去混淆 API 调用的脚本,以及定位好钩子结构数组之后,我们就可以很轻易的用其他的 IDA 脚本来解析它,以确定和命名钩子函数(hook_* )。我们最后得到下面的表格:

Parsing hook table @ 0x41B000... Original Function Hooked          Hooker Function                         DLL Hash              API Hash ------------------------------------------------------------------------------------------------------------- NtProtectVirtualMemory_wrap       hook_NtProtectVirtualMemory_wrap        84C06AAD (ntdll)                    5C2D2E7A NtResumeThread_wrap               hook_NtResumeThread_wrap                84C06AAD (ntdll)            6273819F LdrLoadDll_wrap                   hook_LdrLoadDll_wrap                    84C06AAD (ntdll)        18364D1F NtQueryVirtualMemory_wrap         hook_NtQueryVirtualMemory_wrap          84C06AAD (ntdll)                  03F6C761 NtFreeVirtualMemory_wrap          hook_NtFreeVirtualMemory_wrap           84C06AAD (ntdll)                 E9D6FAB3 NtAllocateVirtualMemory_wrap      hook_NtAllocateVirtualMemory_wrap       84C06AAD

......代码省略

它们中的大多数都有安装在 ZeuS 和其他银行恶意软件中。尽管如此,我们还是能够注意到 NtFreeVirtualMemory 和 NtProtectVirtualMemory 的一些有趣的、新的钩子。我们将在下一部分看到它们的用途。

浏览器中间人(Man-in-the-Browser)

Floki 通过把自己注入到 Firefox 和 Chrome 进程中并拦截 LdrLoadDll 来实现浏览器中间人攻击。如果浏览器加载的 DLL 的哈希值和 nss3.dll, nspr4.dll 或 chrome.dll 任一个的哈希值匹配,API 钩子就会自动安装,让恶意软件可以实现表单抓取和网站注入。

int __stdcall hook_LdrLoadDll_wrap(int PathToFile, int Flags, int ModuleFileName, int *ModuleHandle)

{

int result; // eax@2

int filename_len; // eax@8

int dll_hash; // eax@8

[...]

if ( cstm_WaitForSingleObject() ) {

v5 = LdrGetDllHandle_wrap(PathToFile, 0, ModuleFileName, ModuleHandle);

v6 = LdrLoadDll_wrap(PathToFile, Flags, ModuleFileName, ModuleHandle);

v12 = v6;

if ( v5 = 0 && ModuleHandle && *ModuleHandle && ModuleFileName )

{

RtlEnterCriticalSection_wrap(&unk_41D9F4);

filename_len = cstm_strlen(*(_WORD **)(ModuleFileName + 4));

dll_hash = hash_filename(filename_len, v8);

if ( !(dword_41DA0C & 1) ) {

if ( dll_hash == 0x2C2B3C88 || dll_hash == 0x948B9CAB ) { // hash nss3.dll & nspr4.dll

sub_416DBD(*ModuleHandle, dll_hash);

if ( dword_41DC2C )

v11 = setNspr4Hooks(v10, dword_41DC2C);







请到「今天看啥」查看全文