服务型态的挂马在反组译上比较麻烦,因为大部分都会附加在svchost.exe上。如果它在服 务的属性设置之路径型式为C:\WINDOWS\system32\svchost.exe -k netsvcs,则可以先由procmon找到已存在的pid,attach到此process,设置中断点于呼叫ServiceMain()处;若找不到此pid,表示此服务群组尚未执行,则需于机码中设置启动选项,指示svchost运行时马上启动debugger,启动后设置中断点于呼叫ServiceMain()处。
晚近病毒及挂马为了提高隐藏成功的机率,在函数呼叫上会动许多手脚。正常的函数呼叫会遵循esp/ebp/call/ret的约定,ida pro等静态分析程式也是利用这个性质来分析函数的范围;而恶意程式则会蓄意破坏静态分析的逻辑,例如以不返回的call进行本质上的jmp,利用push/pop等直接对stack进行写入,以mov及ret指令更改esp,配合ret跳至stack中预先写入的位置,以罕见的运算设置状态旗标直接产生所需要的位置或数值以pushf写入stack。
利用ollydbg的trace功能,我们可以将程式的执行过程log下来,以了解程式中执行的流程,并且对重要的位址设定硬体中断,因此能了解实际上进行写入或存取的指令位址。
沒有留言:
張貼留言