VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: o70078

[原创] [原创][源码]病毒感染EXE实验程序-第2回

[复制链接]
 楼主| 发表于 2012-8-4 03:26:45 | 显示全部楼层
eaaca1234 发表于 2012-8-3 20:52
你直接用偏移量load api不行吗?一定要用导入表,如果是加壳程序还真不好搞,因为加壳程序的导入表是加密的

偏移量load api?那是啥?教我教我教我教我教我教我教我教我

点评

to楼下,虽然vista7每次开机DLL基地址会变化,但是如果是系统DLL(在HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs中),那么他在所有进程中基地址相同  发表于 2012-8-6 11:14
回楼下,不一定吧,传说Vista/晕7的DLL地址是随机化的  发表于 2012-8-5 14:25
系统的某些API在任何进程中加载的相对地址是固定的,你可以硬编码或从自己程序进程读取  发表于 2012-8-4 18:11
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 03:43:31 | 显示全部楼层
@wtywtykk
求详解...我看不出导入表哪点加密了...

点评

无所谓,编译器冒出个警告而已  发表于 2012-8-5 14:24
AP君...你这算是病句吗?@acme_pjz  发表于 2012-8-5 00:53
你看那个200字节的exe看看?  发表于 2012-8-4 13:47
回复 支持 反对

使用道具 举报

发表于 2012-8-4 14:15:35 | 显示全部楼层
o70078 发表于 2012-8-4 03:26
偏移量load api?那是啥?教我教我教我教我教我教我教我教我

有2个方法?
靠谱的方法是自己遍历系统dll的导入表获取api的地址然后call这个地址(相关资料请搜索myGetProcAddress或者yc壳) 都有相关代码的实现……
不靠谱的方法是使用事先把各个系统的api的偏移量提前获取……或者是自己调用KiFastSystemCall自己实现ntdll的功能,这个同样要硬编……(这个方法太不靠谱了……因为每个系统都不同……)

点评

[quote]靠谱的方法是自己遍历系统dll的导入表获取api的地址然后call这个地址[/quote]我的山寨壳准备实现,还有Import By Hash  发表于 2012-8-4 14:30
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-5 01:05:56 | 显示全部楼层
eaaca1234 发表于 2012-8-4 14:15
有2个方法?
靠谱的方法是自己遍历系统dll的导入表获取api的地址然后call这个地址(相关资料请搜索myGet ...

我之前想不明白的:
没有API如何去读写硬盘?
不能读写硬盘如何载入DLL文件?

我对你们说的话的理解:
系统在执行一个EXE文件的时候一定会把系统自带的几个DLL也装载进去.无需导入表提醒.
这几个DLL不管在什么版本的WINDOWS系统,装载的地址一定是一样的.


是这样吗?

点评

@acme_pjz也就是说...在最开始的时候POP EAX那么EAX的地址一定是在K32里面?向前搜索就能得到K32的MZ头?  发表于 2012-8-6 13:49
传说main()函数的返回地址是在kernel32.dll内部,所以你用汇编读取返回地址之后向前搜索MZ头就可以找到kernel32.dll的基地址  发表于 2012-8-5 14:26
回复 支持 反对

使用道具 举报

发表于 2012-8-5 02:24:04 | 显示全部楼层
o70078 发表于 2012-8-5 01:05
我之前想不明白的:
没有API如何去读写硬盘?
不能读写硬盘如何载入DLL文件?

LoadLibrary   就载入Dll 了啊。。 网上资料好多呢 不过都是C++的。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-5 18:58:56 | 显示全部楼层
19900603 发表于 2012-8-5 02:24
LoadLibrary   就载入Dll 了啊。。 网上资料好多呢 不过都是C++的。。

我一直疑惑的就是这点:在载入DLL前何来LoadLibrary?以前脑袋一直在这里死循环.....
回复 支持 反对

使用道具 举报

发表于 2012-8-5 18:59:40 | 显示全部楼层
o70078 发表于 2012-8-5 18:58
我一直疑惑的就是这点:在载入DLL前何来LoadLibrary?以前脑袋一直在这里死循环.....

汇编获取啊。。。要不汇编干啥用的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-5 19:03:31 | 显示全部楼层
本帖最后由 o70078 于 2012-8-5 19:04 编辑
19900603 发表于 2012-8-5 18:59
汇编获取啊。。。要不汇编干啥用的


拷贝LoadLibrary的机器码?来QQ私聊~

点评

拷贝LoadLibrary的机器码是没用的,不过你可以先通过main函数的返回地址获得kernel32.dll的基址,然后手工分析导出表获得LoadLibrary的地址,这是病毒常用方法  发表于 2012-8-6 00:00
回复 支持 反对

使用道具 举报

发表于 2012-8-5 19:04:46 | 显示全部楼层
本帖最后由 19900603 于 2012-8-5 19:07 编辑

http://blog.csdn.net/long_xing/article/details/760111
http://blog.csdn.net/pengkaitsj/article/details/7664916
看人家写的 Asm 代码 哎
回复 支持 反对

使用道具 举报

发表于 2012-8-6 00:01:58 | 显示全部楼层
o70078 发表于 2012-8-5 19:03
拷贝LoadLibrary的机器码?来QQ私聊~

试试这段代码(我自己还没测试过):
  1. start:

  2. ;get return address
  3. pop ebp

  4. ;find kernel32 base address
  5. mov ebx,ebp
  6. shr ebx,16
  7. @@:
  8. mov eax,ebx
  9. shl eax,16
  10. mov eax,[eax]
  11. test ax,'MZ'
  12. jz @f
  13. dec ebx
  14. jmp @b
  15. @@:
复制代码
完了之后ebx<<16就是kernel32.dll的基地址

点评

对的,解析导出表的代码我写好了  发表于 2012-8-6 15:04
我也想到了……然后解析导出表,就可以获得API的地址?  发表于 2012-8-6 11:18
经试验出现错误……  发表于 2012-8-6 01:25
回复 支持 反对

使用道具 举报

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

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-5 11:01

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表