专业丰富的破解论坛技术交流,提供软件安全,病毒分析,脱壳破解,安卓破解,加密解密等,由无数热衷于软件爱好者共同维护
 
发新帖
查看: 653|回复: 0

[技术文章] 十七节 逆向病毒分析(实战)

[复制链接]
玉面飞龙之王 发表于 2020-9-22 13:46:35 | 显示全部楼层
本帖最后由 玉面飞龙之王 于 2020-9-22 13:47 编辑

;模块加载失败,则直接返回 0
seg000:004D53CE mov edx, [ebp+arg_C]
seg000:004D53D1 add edx, 0F5h
seg000:004D53D7 push edx
;查询字符串表,可知 edx 指向字符串Initiate
seg000:004D53D8 push eax
;eax: 刚加载模块的基址
seg000:004D53D9 call dword ptr [ebx+4]
;查询函数地址表,得知此处调用的是 1 号函数 GetProcAddress,
;明显这里要取得刚加载模块中导出函数 Initiate 的地址
seg000:004D53DC test eax, eax
seg000:004D53DE jz short loc_4D53ED
;如果获取 Initiate 函数地址失败,直接返回 0
seg000:004D53E0 push [ebp+arg_8]
;参数 0(数据段基址 arg_8)压栈
seg000:004D53E3 call eax
;调用 Initiate 函数,这里可知 Initiate 函数有个参数,即指向数据段的指针
seg000:004D53E5 test al, al
seg000:004D53E7 jz short loc_4D53ED
seg000:004D53E9 mov al, 1
;如果 Initiate 函数返回 0,则返回 0,否则返回 1
seg000:004D53EB jmp short loc_4D53EF
seg000:004D53ED
seg000:004D53ED
seg000:004D53ED loc_4D53ED: ; CODE XREF:
sub_4D53BE+Ej
seg000:004D53ED ; sub_4D53BE+20j ...
seg000:004D53ED xor eax, eax
seg000:004D53EF
seg000:004D53EF loc_4D53EF: ; CODE XREF:
sub_4D53BE+2Dj
seg000:004D53EF pop ebx
seg000:004D53F0 pop ebp
seg000:004D53F1 retn 10h
seg000:004D53F1 sub_4D53BE endp
至此,函数 sub_4D53BE 就分析完成了,明显,该函数的主要功能是加载输入缓冲区中指定的模块,并以数据段基址为唯参数调用其导出函数 Initiate。在 idb 文件中,笔者把此函数重命名为 CheckAndCallInitiate。需要指出的是,这里的数据段被用作所谓的协议数据,因为加载的模块引用了此数据段。所以,对于该数据段的最精确的分析,要在分析此函数中加载的模块的过程中进行,最后,给出此函数的伪码:
DWORD CheckAndCallInitiate ( IN LPBYTE ModuleName ,IN LPVOID DataBase)
{

快速回复 返回顶部 返回列表