在恶意软件中发现的令人困惑的语法

逆向工程 二元分析
2021-06-13 07:39:05

我对以下命令的作用感到困惑:

00401234  mov     dword [esp+0x35], sub_408678

对于上下文,我正在反转一段恶意软件并使用 Binary Ninja,据我所知,它通常使用以下语法用于低级 IL 命令:

mov    dest, src

第一个命令是否执行src参数 (sub_408678) 中指定的子程序并将该命令的结果存储在 [esp + 35] 中?或者只是移动地址以备后用?我以前从未见过这种语法,我想知道是否有其他人看到过这样的程序/可以告诉我以这种方式编写它的目的是什么。谢谢!

1个回答

src sub_408678 可能是你的工具给地址 408678 的标签

[esp+0x35] 目标是一个指向 32 位值的指针

它可以从 0x0 到 0xffffffff

所以在执行这条指令后00401234 mov dword [esp+0x35], sub_408678[esp+0x35 将指向 0x408678

在高级构造中,这将是

<sometype *>foo ; // here sometype can be int,long,in your cse function_ptr etc 
foo = &blah 

示例代码和反汇编

unsigned long global = 0xdeadbeef;
int main (void) {
    unsigned long *foo;
    foo = &global;
    return *foo;
}

拆卸

:\>cdb -c "uf ptr!main;q" ptr.exe | awk "/Reading/,/quit/"
0:000> cdb: Reading initial command 'uf ptr!main;q'
ptr!main:
01381000 55              push    ebp
01381001 8bec            mov     ebp,esp
01381003 51              push    ecx
01381004 c745fc00903c01  mov     dword ptr [ebp-4],offset ptr!global (013c9000) <<<<<<<
0138100b 8b45fc          mov     eax,dword ptr [ebp-4]
0138100e 8b00            mov     eax,dword ptr [eax]
01381010 8be5            mov     esp,ebp
01381012 5d              pop     ebp
01381013 c3              ret
quit: