好友
阅读权限20
听众
最后登录1970-1-1
|
本帖最后由 x51zqq 于 2017-3-24 16:37 编辑
引言:
1.之前在分析一个PC病毒样本的时候,需要对服务的主函数进行动态调试(恶意行为都在主函数中体现),网上找了很多资料也没找到调试方法,所以现在对调试方法进行简单的总结,希望对遇到同样问题的人能有所帮助.
2.该方法只是调试服务的众多方法之一,这里写出只是个人觉得该方法相对简单一些.
3.这里假设读者对服务均有基础的理解,所以就不做基础铺垫了,直接上调试方法,之后在简单说下原理.
4.病毒链接:一款"骷髅"病毒的分析日常
流程:
1.找到启动服务StartServiceA 函数所在的地址 2.将3个参数修改为2个 3.修改StartServiceA函数地址为服务主函数地址
4.在服务主函数头部下断 5.F8运行
StartServiceA函数:
服务主函数:
开始修改:
修改后:
服务主函数头部下断:
F8运行:
原理:
因为startSevice函数的原型和ServiceMain的原型类似,所以在call startSevice函数的时候修改下参数,模拟系统调用ServiceMain,就可以对其进行调试了.
StartService函数原型:[Asm] 纯文本查看 复制代码 BOOL WINAPI StartService(
_In_ SC_HANDLE hService,
_In_ DWORD dwNumServiceArgs,
_In_opt_ LPCTSTR *lpServiceArgVectors
);
ServiceMain函数原型:[Asm] 纯文本查看 复制代码 void WINAPI ServiceMain(
DWORD dwArgc,
LPTSTR *lpArgv
);
修改:[Asm] 纯文本查看 复制代码 Push lpServiceArgVectors
Push dwNumServiceArgs
Push hService // 代码nop掉
Call StartService // 修改为ServiceMain
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|