• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> 软件应用 >> 病毒安全 >> 详细内容
 

推荐文章

 
 

热点文章

  • 网吧任我行
  • 诺基亚手机杀毒软件使用指南
  • 加密软件PGP教程
  • 如何防止黒客远程盗取QQ密码
  • 远程盗ADSL帐号密码竟如此简单?
  • 如何破解PCAnyWhere的密码
  • 破解 女性基础体温管理软件 v1.2
  • 破万象.免费上网
  • 使用ARP命令来绑定IP和MAC地址
  • 完全免费!国外杀毒软件AVG新版试用!
  • C语言学习系统 v3.0 破解过程
  • IE再现漏洞,立刻升级新补丁!
 
 

相关文章

 
 

百度搜索

 
 

对PECompact.exe v1.34的手动脱壳(1)

  • 阅览次数:
  • 文章来源: CodePub整理
  • 原文作者: 不详
  • 整理日期: 2006-10-05
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

目标程序:PECompact.exe 35,840 v1.34 脱壳
程序下载:http://www.cnvnet.com/download/d/pecsetup.exe
使用工具:SoftICE 4.00; ProcDump 1.6.2; IceDump 6.0.1.5; HexWorkShop;

(补充一句:以下Import table我称作输入表,可能说法不规范,不过我打习惯了,大家原谅一下)
(注:以下文中数字为十六进制)
分析:
运行ProcDump,点击Pe-Editor按钮,选中PECompact.exe,得到程序内存映象大小:Size of Image为 00031000和基地址Image Base为0040000。然后点击Sections,没有发现.idata这样容易识别的输入表Section,
看来找输入表的地址和大小也将成为重点了。

首先我们来抓取Import table
1、先装载IceDump。到IceDump目录中运行相应SoftICE版本的icedump.exe。(比如我用的SoftICE版本为4.00就到win9x/400目录下运行icedump.exe)
2、运行SoftICE的Loader,加载PECompact.exe。
3、Ctrl-D进行SoftICE,如下设置断点
bpx loadlibrarya do "dd esp->4"
(注:在没有明确的输入表地址的情况下,这不失为找输入表地址的一种好办法)
4、按F5回到Windows中,单击Loader中的Load按钮。程序中断在第一条指令处。进入了SoftICE。
(看来PECompact.exe不象受Asprotect保护的程序那样。无法用SoftICE自动中断在第一条指令处)
5、按F5运行程序。又中断在我们设下的中断Loadlibrarya处。看看数据窗口。显示如下:

0030:004171AE 4E52454B 32334C45 4C4C442E 4C000000 KERNEL32.DLL...L
0030:004171BE 4C64616F 61726269 00417972 65470000 oadLibraryA...Ge
0030:004171CE 6F725074 64644163 73736572 56000000 tProcAddress...V
0030:004171DE 75747269 6C416C61 00636F6C 69560000 irtualAlloc...Vi
0030:004171EE 61757472 6572466C 00000065 74697845 rtualFree...Exit
0030:004171FE 636F7250 00737365 72460000 694C6565 Process...FreeLi
0030:0041720E 72617262 00000079 4D746547 6C75646F brary...GetModul
0030:0041721E 6E614865 41656C64 47000000 6F4D7465 eHandleA...GetMo
0030:0041722E 656C7564 656C6946 656D614E 9D8B0041 duleFileNameA...
0030:0041723E 004020A6 20AA9D3B 01750040 0CB58BC3 . @.;.. @.u.....

6、根据经验,一般第一次是脱壳代码自己的函数库的加载。并不是我们需要的输入表。因此,按F5继续执行程序。程序又一次中断,这一次数据窗口显示如下:

0030:0040D4A0 4E52454B 32334C45 6C6C642E 49444700 KERNEL32.dll.GDI
0030:0040D4B0 642E3233 55006C6C 33524553 6C642E32 32.dll.USER32.dl
0030:0040D4C0 4441006C 49504156 642E3233 49006C6C l.ADVAPI32.dll.I
0030:0040D4D0 4547414D 2E504C48 006C6C64 646D6F63 MAGEHLP.dll.comd
0030:0040D4E0 3233676C 6C6C642E 45485300 32334C4C lg32.dll.SHELL32
0030:0040D4F0 6C6C642E 41434A00 2E31474C 006C6C64 .dll.JCALG1.dll.
0030:0040D500 696C7061 6C642E62 00F4006C 4C746547 aplib.dll...GetL
0030:0040D510 45747361 726F7272 01A70000 65766F4D astError....Move
0030:0040D520 656C6946 01160041 50746547 41636F72 FileA...GetProcA
0030:0040D530 65726464 00007373 655201CB 6F436461 ddress....ReadCo

可以看到偏移地址为40D4A0,根据我们对输入表的知识,(具体原理说明可以看看雪教学中的"脱壳高级篇"中的文章,那里面比我说得清楚多了)我们可以搜索内存映象中的字节A0,D4,00,00。(即00D4A0=40D4A0-400000)来确定输入表的位置。下指令

s 30:400000 l ffffffff A0,D4,00,00

7、搜索的结果显示

Pattern found at 0030:0040D00C (0000D00C)

我们用如下指令来定位到输入表的起始位置(当然目前还不能确定就是输入表)

dd 0040D00C-C

如下为数据窗口的显示结果。

0030:0040D000 0000D0C8 00000000 00000000 0000D4A0 ................
0030:0040D010 0000D2B4 0000D1A0 00000000 00000000 ................
0030:0040D020 0000D4AD 0000D38C 0000D1CC 00000000 ................
0030:0040D030 00000000 0000D4B7 0000D3B8 0000D260 ............`...

现在我们来看看到底是否我们要找的输入表。下指令
dd 40D0C8

显示结果如下:
0030:0040D0C8 0000D50A 0000D51A 0000D526 0000D538 ........&...8...
0030:0040D0D8 0000D548 0000D556 0000D564 0000D57A H...V...d...z...
0030:0040D0E8 0000D58C 0000D59E 0000D5B4 0000D5C2 ................
0030:0040D0F8 0000D5D2 0000D5DE 0000D5F4 0000D5FE ................

继续追踪,下指令
db 40D50A

显示结果如下:
0030:0040D50A F4 00 47 65 74 4C 61 73-74 45 72 72 6F 72 00 00 ..GetLastError..
0030:0040D51A A7 01 4D 6F 76 65 46 69-6C 65 41 00 16 01 47 65 ..MoveFileA...Ge
0030:0040D52A 74 50 72 6F 63 41 64 64-72 65 73 73 00 00 CB 01 tProcAddress....
0030:0040D53A 52 65 61 64 43 6F 6E 73-6F 6C 65 41 00 00 31 00 ReadConsoleA..1.

(以上说这么多,只是为了说明找输入表的方法的具体实现过程,原理在各位高手的"脱壳高级篇"已经说得很详细了)
OK,符合输入表的规范。看来这就是我们要找的输入表了。我们还要确定一下输入表的长度,在数据窗口中向下翻页。直到发现大量的0x00字节。确定一下长度为C40字节。(这次就不Dump窗口看了,写到这里我开始怀疑我这篇又臭又长的文章不知道要写多长,大家还没有看着看着睡着了吧 :-) )

  

上一篇:PHP编程技巧:看实例学正则表达式
下一篇:构建支持Master/Slave读写分离的数据库操作类
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号