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

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

[复制链接]
玉面飞龙之王 发表于 2020-9-16 12:21:48 | 显示全部楼层
sub esi,3
等价于 sub esi,4
这样,我们可以把代码整理成更可阅读的形式,如下:
start:
mov ecx,52FD874Ch
mov edx,4D5024h
mov esi,598h
label:
xor [edx+esi],ecx
sub esi,4
jnz label
004D5028:
movsb

这是一段解密程序,ecx 是 key,edx 是数据基地址指针,esi 是循环变量。意思是从004D5024+4 至 004D5024+0x598 之间的每个双字与 key 进行异或运算,完成解密操作。为了提取解密后的代码,我们需要手动解密这里的数据。方法有多种,一是编写 IDA 脚本,二是用调试器载入,动态解密后 dump 内存,其它方法随便。这里笔者采用的是方法二。采用方法二个人感觉有两个需要注意的地方。一、调试最好在 xp 里进行。因为 win7 开启了 ASLR ,对此处的解密代码有影响。二、在 004D5028 处下断点,不能是普通断点,而必须是硬件执行断点。原因是 004D5028 及以后的内存数据会被动态修改,int 3 断点会导致错误。在 004D5028 处中断以后,就可以 dump 内存了。有效代码范围应该是 004D5000 至004D5024 + 0x598 。代码量不大,但为了简便,笔者直接dump 了004D5000开始的一页(4KB)内存。内存文件见附件中的 chrome_004D5000.mem。后边将要反汇编该文件并进行更深入地分析。4 分析病毒 Loader 用 IDA 打开 chrome_004D5000.mem 文件,在“load a new file”对话框里只有一个选项“Binary file ”。我们以二进制文件的形式反汇编这个内存 dump 文件。由于该 dump 文件中的代码是被加载到 0x004D5000 地址上执行的,所以我们需要在该对话框中指定“Loading offset”为 0x004D5000。其它选项不需要处理,直接点 OK。接着确认以 32bit 的方式反汇编。最后 IDA 打开了该 dump 文件。由于未指定入口点地址,我们需要在 004D5000 处按 C 键,将数据转换为代码(这段代码其实就是上节中分析的代码)。转换完成的部分代码如下:

seg000:004D5000 ;org 4D5000h
seg000:004D5000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing,
gs:nothing
seg000:004D5000 nop
seg000:004D5001 nop
seg000:004D5002 push 52FD874Ch
seg000:004D5007 pop ecx
seg000:004D5008 push (offset loc_4D5022+2)
seg000:004D500D pop edx

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