首页 | 业界新闻 | 黑客教程 | 安全漏洞 | 安全文章 | 破解技术 | 技术文摘 | 黑客文化 | 本站原创 | 安全贴吧 | 在线留言 | IP查询 | 软件下载 | 繁体中文 |
您现在的位置: 黑色反击 >> 技术资讯 >> 破解技术 >> 破解实例 >> 正文
手工修复Armadillo壳中的CC方法
时间:2006-3-21 0:32:44 出处:看雪论坛 作者:未知 编辑:mervin 点击数:
准备--必须有完成了代码和iat表修复后的dump文件
工具--修改后的OD 等

试验对象:Easy CD-DA Extractor
下载地址:http://www.hanzify.org/?Go=Show::List&ID=7377
试验中使用machenglin提供的dump文件


让我们开始:

1.获得修复CC环境

已知主程序ezcddax.exe是Armadillo壳,且使用了CC保护方式。OD加载主程序ezcddax.exe 在Command窗口中:bp GetThreadContext 运行。
第一次中断后,F9继续,被中断在函数GetThreadContext中:

7C838EEB >  8BFF            MOV     EDI, EDI
7C838EED    55              PUSH    EBP
7C838EEE    8BEC            MOV     EBP, ESP
7C838EF0    FF75 0C         PUSH    DWORD PTR SS:[EBP+C]
7C838EF3    FF75 08         PUSH    DWORD PTR SS:[EBP+8]
7C838EF6    FF15 F814807C   CALL    DWORD PTR DS:[<&ntdll.NtGetConte>; ntdll.ZwGetContextThread
7C838EFC    85C0            TEST    EAX, EAX
7C838EFE    0F8C 57B60000   JL      kernel32.7C84455B
7C838F04    33C0            XOR     EAX, EAX
7C838F06    40              INC     EAX
7C838F07    5D              POP     EBP
7C838F08    C2 0800         RETN    8

Alt+F9到:

00805E47   .  50            PUSH    EAX
00805E48   .  F7D0          NOT     EAX
00805E4A   .  0FC8          BSWAP   EAX
00805E4C   .  58            POP     EAX
00805E4D   .  73 00         JNB     SHORT ezcddax.00805E4F
00805E4F   >  9C            PUSHFD
00805E50   .  60            PUSHAD
00805E51   .  EB 2B         JMP     SHORT ezcddax.00805E7E

在OD中删除分析,还原壳的代码,分析这段处理CC的代码。
请参考:http://bbs.pediy.com//showthread ... 0&threadid=6991
这里就不再分析了:

00805E26    83C4 0C         ADD     ESP, 0C
00805E29    C785 7CEBFFFF 0>MOV     DWORD PTR SS:[EBP-1484], 10001
00805E33    8D85 7CEBFFFF   LEA     EAX, DWORD PTR SS:[EBP-1484]
00805E39    50              PUSH    EAX
00805E3A    8B8D 50EEFFFF   MOV     ECX, DWORD PTR SS:[EBP-11B0]
00805E40    51              PUSH    ECX
00805E41    FF15 E0808300   CALL    DWORD PTR DS:[<&KERNEL32.GetThre>; kernel32.GetThreadContext
00805E47    50              PUSH    EAX
00805E48    F7D0            NOT     EAX
00805E4A    0FC8            BSWAP   EAX

{处理代码}

00806201    66:92           XCHG    AX, DX
00806203    8BC0            MOV     EAX, EAX
00806205    8D95 7CEBFFFF   LEA     EDX, DWORD PTR SS:[EBP-1484]
0080620B    52              PUSH    EDX
0080620C    8B85 50EEFFFF   MOV     EAX, DWORD PTR SS:[EBP-11B0]
00806212    50              PUSH    EAX
00806213    FF15 DC808300   CALL    DWORD PTR DS:[<&KERNEL32.SetThre>; kernel32.SetThreadContext
00806219    60              PUSHAD
0080621A    33C0            XOR     EAX, EAX
0080621C    75 02           JNZ     SHORT ezcddax.00806220
0080621E    EB 15           JMP     SHORT ezcddax.00806235
00806220    EB 33           JMP     SHORT ezcddax.00806255

2.通过这段代码,大概查找CC的范围

通过分析知道:

00805EC3    8B95 34ECFFFF   MOV     EDX, DWORD PTR SS:[EBP-13CC]
00805EC9    52              PUSH    EDX
00805ECA    8B85 48EEFFFF   MOV     EAX, DWORD PTR SS:[EBP-11B8]

 

这段代码中的:

00805EC3    8B95 34ECFFFF   MOV     EDX, DWORD PTR SS:[EBP-13CC]

是把Context域的CC发生时的下一字节地址传送的EDX中,在

00805E9F    52              PUSH    EDX

设置[条件记录断点]

表达式:[EDX]
暂停程序:从不
记录表达式数据:永远

设置[记录]到文件,输入文件名保存,取消断点GetThreadContext 。

设置好后运行程序,最好运行程序的所有功能,关闭OD得到一个CC地址表:

00805E9F  COND: 00439891
7C838EEB  断点位于 kernel32.GetThreadContext
00805E9F  COND: 0043989E
00805E9F  COND: 00439962
00805E9F  COND: 00439989
00805E9F  COND: 004399A3
00805E9F  COND: 004399AD
00805E9F  COND: 00439B5A
00805E9F  COND: 00439B84
00805E9F  COND: 00439B92
00805E9F  COND: 00439C2D
00805E9F  COND: 00439B9C
00805E9F  COND: 00439BA4
00805E9F  COND: 00439BE2
00805E9F  COND: 00439C2D
00805E9F  COND: 00439B9C
00805E9F  COND: 00439BA4
00805E9F  COND: 00439BE2
00805E9F  COND: 00439C2D
00805E9F  COND: 00439C52
00805E9F  COND: 0046C5D4
00805E9F  COND: 0046C604
00805E9F  COND: 0046C786
00805E9F  COND: 0046C82B

00805E9F  COND: 004E3251
00805E9F  COND: 004E3262
00805E9F  COND: 004E3280
00805E9F  COND: 004E32B1
00805E9F  COND: 004E33D1
00805E9F  COND: 004E34F1
00805E9F  COND: 004E35A7
00805E9F  COND: 0046DB82
00805E9F  COND: 0046DBC7
00805E9F  COND: 0046DC19
00400000  卸载 C:\Program Files\Easy CD-DA Extractor 9\ezcddax.exe

操作完成

由于只是演示方法,所以这个表可能不完整。

从上面的记录中可以看到CC的大概范围,用OD打开dump下的文件,到内存窗口中把text段的二进制代码保存到一个文件code.txt中待用。

3.查找CC地址

OD重新加载主程序,bp GetThreadContext 运行,第二次依然来得:

[1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页

精彩推荐
今天你泄露了吗 网络个
黑反归来,重要通知!
hack菜鸟入门
VB 从零开始编外挂(完
IPC入侵全接触
QQ跨站漏洞巧利用,强
WinXP中CPU占用100%原
黑客新技术 灰鸽子巧妙
实例讲解 黑客入侵论坛
BMP文件格式分析
热门软件
网 友 评 论
关于我们 - 联系方式 - 招聘信息 - 合作伙伴 - 网站地图 - 广告服务 - 我要投稿 - 设为首页 - 加入收藏
黑色反击 力倡网络安全,崇尚互联共享,欢迎各种媒体转载我们的原创作品 [转载请注明出处]。
报障QQ:281873518,479748258 EMAIL:hf110.com@gmail.com 备案:苏ICP备05010002号