恶意代码分析实战 — Lab 16-03

首先main函数,将字符入栈

之后调用strncmp比较str1和str2

OD设置断点,运行可以看到比较的字符为qgr和Lab16-03

修改程序名称并运行,依然不行,看来不是简单的字符串比较

在strncmp比较之前有个call sub_4011e0操作

设置此处断点,运行,观察栈空间值,为main函数入栈的程序名ocl.exe

Idapro进入此函数分析,两次调用了QueryPerformanceCounter,获取精确的执行时间

第二次获取时间值减去第一次值,然后与1200ms比较

在OD中将地址0x401290修改为jmp,去掉计时器影响

当执行到strncmp时,比较字符变为peo.exe

保存修改的文件为peo.exe,执行,在ApateDNS中可以观察到dns请求

在两段计时器中间,有如下一系列操作,其中存在除零异常

OD载入peo.exe,设置断点调试此段代码

执行到0x401243处时,栈空间值如下

下一条语句div ecx,触发除零异常时,程序跳转到ntdll模块

如果在调试器中,会花费更多时间,以此来与命令行普通执行时间进行区分

获取域名信息,在0x4015db设断点

执行,程序断在了eip = 0x4015b4处,GetTickCount获取两次时间,然后与1ms比较,中间还调用了一个call sub_401000

此函数与之前一样是个除零异常,将jbe改为jmp

在gethostbyname之前有个sub_401300

此函数两次调用rdtsc,计算系统启动来的时钟数,中间继续用除零异常,然后做差比较与500000ms

大于500000时,调用sub_4010E0

启动cmd.exe,del删除自身并退出

直接将此处call给nop掉

您可能还喜欢...