Assembly 实用恶意软件分析-7_01,无理由推送
在阅读《实用恶意软件分析》一书时,我正在做7_01练习。这是代码和答案的链接- 有两个命令我无法真正理解它们在主函数中的作用(代码从IDA复制):Assembly 实用恶意软件分析-7_01,无理由推送,assembly,compiler-construction,stack,compiler-optimization,malware,Assembly,Compiler Construction,Stack,Compiler Optimization,Malware,在阅读《实用恶意软件分析》一书时,我正在做7_01练习。这是代码和答案的链接- 有两个命令我无法真正理解它们在主函数中的作用(代码从IDA复制): 第二个函数是上面链接中显示的函数sub_401040,它不获取任何参数,也没有理由推送这两个零。有人能解释一下吗?如果我不得不猜测,我会说编译器出于任何原因将这些推送放在那里,但我不知道为什么,我认为,这个应用程序必须作为服务运行,但您可以通过将指令指针直接设置为主函数sub_401040来强制它运行。我认为,这个应用程序必须作为服务运行,但是您可以
第二个函数是上面链接中显示的函数sub_401040,它不获取任何参数,也没有理由推送这两个零。有人能解释一下吗?如果我不得不猜测,我会说编译器出于任何原因将这些推送放在那里,但我不知道为什么,我认为,这个应用程序必须作为服务运行,但您可以通过将指令指针直接设置为主函数sub_401040来强制它运行。我认为,这个应用程序必须作为服务运行,但是您可以通过设置直接指向主函数sub_401040的指令指针来强制它运行。具体是哪个函数?我在那里看到的那些确实带有参数。我为main添加了代码,我没有看到它不在链接中,但我根据在IDA中反汇编时看到的内容编写了它。链接仅包含sub401040的一小部分,它可能仍然使用参数。如果使用参数调用函数,编译器将提供这些参数。函数是否使用参数无关紧要。链接中的第二张图片显示了sub_401040的开头,看起来函数没有使用任何参数(至少根据IDA)。如果函数不接受它们,那么这些被推的零看起来是无用的。哪个函数特别有用?我在那里看到的那些确实带有参数。我为main添加了代码,我没有看到它不在链接中,但我根据在IDA中反汇编时看到的内容编写了它。链接仅包含sub401040的一小部分,它可能仍然使用参数。如果使用参数调用函数,编译器将提供这些参数。函数是否使用参数无关紧要。链接中的第二张图片显示了sub_401040的开头,看起来函数没有使用任何参数(至少根据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