在阅读“实用恶意软件分析”一书时,我正在进行7_01练习。这是代码和答案的链接 - https://jmprsp.wordpress.com/2016/03/03/practical-malware-analysis-analyzing-malicious-windows-programs-lab-7-01/
有两个命令我无法真正理解它们在main函数中的作用(从IDA复制的代码):
ServiceStartTable= SERVICE_TABLE_ENTRYA ptr -10h
var_8= dword ptr -8
var_4= dword ptr -4
argc= dword ptr 4
argv= dword ptr 8
envp= dword ptr 0Ch
sub esp, 16
lea eax, [esp+10h+ServiceStartTable]
mov [esp+10h+ServiceStartTable.lpServiceName], offset aMalservice
push eax
mov [esp+14h+ServiceStartTable.lpServiceProc], offset second_function
mov [esp+14h+var_8], 0
mov [esp+14h+var_4], 0
call ds:StartServiceCtrlDispatcherA
push 0
push 0
call second_function
add esp, 24
retn
second_function是上面链接中显示的函数sub_401040,它没有得到任何参数,并且没有理由将这2次推送归零。有人可以解释一下吗?如果我不得不猜测我会说编译器出于某种原因推出那些推送,但我不知道为什么
答案 0 :(得分:0)
我认为,此应用程序必须作为服务运行,但您可以通过将指令指针直接设置为主函数sub_401040来强制它运行。