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

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

[复制链接]
玉面飞龙之王 发表于 2020-9-19 22:04:43 | 显示全部楼层
seg000:004D526E push edi
;edi 为 arg_8,字符串表/字符串 基址
;参数 0 压栈
seg000:004D526F call dword ptr [ebx]
;这个 call 不知道调用的是什么,须用调试器了。结果证明是调用得 LoadLibraryA,参数
;为”Kernel32.dll”。同时,也可以确定 [arg_4 + 20h] + 0 的地方保存的是 LoadLibraryA 的地址,
;arg_0 + 0 的地方保存 LoadLibraryA 地址。
seg000:004D5271 mov esi, eax
;esi 为 kernel32.dll 的基址
seg000:004D5273 test esi, esi
seg000:004D5275 jz loc_4D5307
;如果 kernel32.dll 加载失败,函数直接返回 0
seg000:004D527B mov eax, [ebp+arg_4]
seg000:004D527E push dword ptr [eax+24h]
seg000:004D5281 push esi
;esi 为 kernel32.dll 模块基址
seg000:004D5282 call dword ptr [ebx+4]
; 这里又得用调试器了,发现调用的是 GetProcAddress,参数为“GetTempPathW” ;可见,[arg_4 + 20h] +4 位置保存的是 GetProcAddress 的地址
;arg_0 + 4 的地方保存 GetProcAddress 的地址
;arg_4 + 24h 处保存指向“GetTempPathW”字符串的指针
seg000:004D5285 mov edx, [ebp+arg_4]
seg000:004D5288 mov ecx, [edx+20h]
seg000:004D528B mov [ecx], eax
;[[arg_4+20h]+0] = GetProcAddress(“GetTempPathW”)
;[arg_4 + 20h] +0 的位置原来保存的是 LoadLibraryA 的地址,现在被替换为 GetTempPathW 的 ;地址
seg000:004D528D mov eax, [ebp+arg_4]
seg000:004D5290 push dword ptr [eax+28h]
seg000:004D5293 push esi
;esi 为 kernel32.dll 的基址
seg000:004D5294 call dword ptr [ebx+4]
;调用 GetProcAddress,参数为 kernel32 的基址和字符串“GetLastError”,其中“GetLastErr
;or”来自于调试结果。
seg000:004D5297 mov edx, [ebp+arg_4]
seg000:004D529A mov ecx, [edx+20h]
seg000:004D529D add ecx, 4
seg000:004D52A0 mov [ecx], eax
;[[arg_4+20h]+4] = GetProcAddress(“GetLastError”)
;[arg_4 + 20h] +4 的位置原来保存的是 GetProcAddress 的地址,现在被替换为 GetLastErro
;r 的地址
seg000:004D52A2 lea eax, [edi+0Dh]
;edi 是 arg_8,字符串/字符串表 基址,值为 004D50AC。而 0Dh 正好为字符串“kernel32.dll” ;(包括结尾的 0)的长度。所以这里 edi+0dh 是在寻址下一个字符串“GetTempPathA”

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