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

 

007EB7A9    8B45 08         MOV     EAX, DWORD PTR SS:[EBP+8]
007EB7AC    50              PUSH    EAX
007EB7AD    FF15 24CC8300   CALL    DWORD PTR DS:[83CC24]           
; ezcddax.007DC062
007EB7B3    83C4 04         ADD     ESP, 4
007EB7B6    8945 FC         MOV     DWORD PTR SS:[EBP-4], EAX
007EB7B9    8B45 FC         MOV     EAX, DWORD PTR SS:[EBP-4]
**************************************************************
{修改的代码是}
007EB7BC    90                 NOP                                      ; 下面是修改的代码
007EB7BD    90                 NOP
007EB7BE    36:A1 108F8200     MOV     EAX, DWORD PTR SS:[828F10]      
; 取CC发生时的地址
007EB7C4    8B00               MOV     EAX, DWORD PTR DS:[EAX]
007EB7C6    8078 FF 0F         CMP     BYTE PTR DS:[EAX-1], 0F         
; 比较是不是长跳转标志
007EB7CA    74 06              JE      SHORT ezcddax.007EB7D2          
; 短跳转写入
007EB7CC    C640 FF 74         MOV     BYTE PTR DS:[EAX-1], 74
007EB7D0    EB 20              JMP     SHORT ezcddax.007EB7F2          
; 长跳转写入,注意是写在CC发生时的地址而不是CC地址
007EB7D2    C600 84            MOV     BYTE PTR DS:[EAX], 84
007EB7D5    90                 NOP
007EB7D6    33C0               XOR     EAX, EAX
******************************************************************
007EB7D8    90              NOP
007EB7D9    90              NOP
007EB7DA    90              NOP
007EB7DB    90              NOP
007EB7DC    90              NOP
007EB7DD    90              NOP
007EB7DE    90              NOP
007EB7DF    90              NOP
007EB7E0    90              NOP
007EB7E1    90              NOP
007EB7E2    90              NOP
007EB7E3    90              NOP
007EB7E4    90              NOP
007EB7E5    90              NOP
007EB7E6    90              NOP
007EB7E7    90              NOP
007EB7E8    90              NOP
007EB7E9    90              NOP
007EB7EA    90              NOP
007EB7EB    90              NOP
007EB7EC    90              NOP
007EB7ED    90              NOP
007EB7EE    90              NOP
007EB7EF    90              NOP
007EB7F0    90              NOP
007EB7F1    90              NOP
007EB7F2    90              NOP
007EB7F3    90              NOP
007EB7F4    90              NOP
007EB7F5    90              NOP
007EB7F6    90              NOP
007EB7F7    90              NOP
007EB7F8    90              NOP
007EB7F9    90              NOP
007EB7FA    90              NOP
007EB7FB    90              NOP
007EB7FC    90              NOP
007EB7FD    90              NOP
007EB7FE    90              NOP
007EB7FF    90              NOP
007EB800    90              NOP
007EB801    90              NOP
007EB802    90              NOP
007EB803    90              NOP
007EB804    90              NOP
007EB805    90              NOP
007EB806    90              NOP
007EB807    90              NOP
007EB808    90              NOP
007EB809    90              NOP
007EB80A    90              NOP
007EB80B    90              NOP
007EB80C    90              NOP
007EB80D    90              NOP
007EB80E    90              NOP
007EB80F    8945 F4         MOV     DWORD PTR SS:[EBP-C], EAX
007EB812    8B0D 94838300   MOV     ECX, DWORD PTR DS:[838394]
007EB818    330D 98838300   XOR     ECX, DWORD PTR DS:[838398]
007EB81E    D1E1            SHL     ECX, 1
007EB820    894D F8         MOV     DWORD PTR SS:[EBP-8], ECX
007EB823    837D F4 00      CMP     DWORD PTR SS:[EBP-C], 0
007EB827    74 09           JE      SHORT ezcddax.007EB832
007EB829    8B55 F8         MOV     EDX, DWORD PTR SS:[EBP-8]
007EB82C    83CA 01         OR      EDX, 1
007EB82F    8955 F8         MOV     DWORD PTR SS:[EBP-8], EDX
007EB832    8B45 F8         MOV     EAX, DWORD PTR SS:[EBP-8]
007EB835    50              PUSH    EAX
007EB836    FF15 C0CB8300   CALL    DWORD PTR DS:[83CBC0]            ; ezcddax.007DBFB0
007EB83C    83C4 04         ADD     ESP, 4
007EB83F    5F              POP     EDI
007EB840    5E              POP     ESI
007EB841    5B              POP     EBX
007EB842    8BE5            MOV     ESP, EBP
007EB844    5D              POP     EBP
007EB845    C3              RETN

55 8B EC 83 EC 0C 53 56 57 8B 45 08 50 FF 15 24 CC 83 00 83 C4 04 89 45 FC 8B 45 FC 90 90 36 A1
10 8F 82 00 8B 00 80 78 FF 0F 74 06 C6 40 FF 74 EB 20 C6 00 84 90 33 C0 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 89 45 F4 8B 0D 94 83 83 00 33 0D 98 83 83 00 D1 E1
89 4D F8 83 7D F4 00 74 09 8B 55 F8 83 CA 01 89 55 F8 8B 45 F8 50 FF 15 C0 CB 83 00 83 C4 04 5F
5E 5B 8B E5 5D C3


00439895    8B15 ECEB6C00   MOV     EDX, DWORD PTR DS:[6CEBEC]
0043989B    85D2            TEST    EDX, EDX
0043989D    0F84 AE030000   JE      ezcddax.00439C51                   //修复后的代码,是个长je类型
004398A3    66:C785 1CFDFFF>MOV     WORD PTR SS:[EBP-2E4], 218

===================================================================


例2:00439989

00806075    FF148D 0C888300    CALL    DWORD PTR DS:[ECX*4+83880C]      ; 模拟处理EFLAGS寄存器值来判断标志寄存器的标志位的函数入口


入口:DS:[00838A54]=007F720B (ezcddax.007F720B),F7进入:

007F72E0    FF55 F8            CALL    DWORD PTR SS:[EBP-8]             ; 模拟处理EFLAGS寄存器值来判断标志寄存器的标志位的函数真正入口

堆栈 SS:[0012DC5C]=007E6809 (ezcddax.007E6809)


入口是:=007E6809  F7再次进入:

007E6809    55                 PUSH    EBP
007E680A    8BEC               MOV     EBP, ESP
007E680C    83EC 0C            SUB     ESP, 0C
007E680F    53                 PUSH    EBX
007E6810    56                 PUSH    ESI
007E6811    57                 PUSH    EDI
007E6812    8B45 08            MOV     EAX, DWORD PTR SS:[EBP+8]
007E6815    50                 PUSH    EAX
007E6816    FF15 28CC8300      CALL    DWORD PTR DS:[83CC28]            ; ezcddax.007DC1BD
007E681C    83C4 04            ADD     ESP, 4
007E681F    8945 FC            MOV     DWORD PTR SS:[EBP-4], EAX
007E6822    8B45 FC            MOV     EAX, DWORD PTR SS:[EBP-4]        ; 取Context域中EFLAGS寄存器值,看看壳怎么利用这个值,注意EAX
007E6825    53                 PUSH    EBX                              ; 取CC发生时的地址,注意这个地址是CC的下一个字节
007E6826    BB 80000000        MOV     EBX, 80
007E682B    EB 05              JMP     SHORT ezcddax.007E6832
007E682D    BB 04000000        MOV     EBX, 4                           ; 写入到CC地址中,所以要-1
007E6832    BB 32000000        MOV     EBX, 32
007E6837    F7D3               NOT     EBX
007E6839    0FC8               BSWAP   EAX
007E683B    F7D3               NOT     EBX
007E683D    43                 INC     EBX
007E683E    43                 INC     EBX
007E683F    83C3 08            ADD     EBX, 8
007E6842    4B                 DEC     EBX
007E6843    51                 PUSH    ECX
007E6844    B9 04000000        MOV     ECX, 4
007E6849    03D9               ADD     EBX, ECX
007E684B    43                 INC     EBX
007E684C    59                 POP     ECX
007E684D    0FC8               BSWAP   EAX
007E684F    23C3               AND     EAX, EBX

//////////////////////////////////////////////////////////////////////
EBX=00000040
EAX=00000246
这句才是关键,EFLAGS寄存器值and 40
分析看看,十六进制的40是二进制值10000000 受影响的是第七位ZF位,测试条件是ZF=1
相关知识请看:http://www.pediy.com/tutorial/chap2/Chap2-3.htm
这样就可以判断这个跳转类型是jz/je 判断是短跳转就在CC地址写入类型的代码74;长跳转则在CC发生时的地址写入84
//////////////////////////////////////////////////////////////////////

007E6851    5B                 POP     EBX
007E6852    F7D8               NEG     EAX
007E6854    1BC0               SBB     EAX, EAX
007E6856    F7D8               NEG     EAX

/////////////////////////////////////////////////
测试ZF位是否为1
/////////////////////////////////////////////////

007E6858    5A                 POP     EDX
007E6859    8945 F4            MOV     DWORD PTR SS:[EBP-C], EAX
007E685C    8B0D 98838300      MOV     ECX, DWORD PTR DS:[838398]
007E6862    330D 9C838300      XOR     ECX, DWORD PTR DS:[83839C]
007E6868    D1E1               SHL     ECX, 1
007E686A    894D F8            MOV     DWORD PTR SS:[EBP-8], ECX
007E686D    837D F4 00         CMP     DWORD PTR SS:[EBP-C], 0
007E6871    74 09              JE      SHORT ezcddax.007E687C
007E6873    8B55 F8            MOV     EDX, DWORD PTR SS:[EBP-8]
007E6876    83CA 01            OR      EDX, 1
007E6879    8955 F8            MOV     DWORD PTR SS:[EBP-8], EDX
007E687C    8B45 F8            MOV     EAX, DWORD PTR SS:[EBP-8]
007E687F    50                 PUSH    EAX
007E6880    FF15 C4CB8300      CALL    DWORD PTR DS:[83CBC4]            ; ezcddax.007DC114
007E6886    83C4 04            ADD     ESP, 4
007E6889    5F                 POP     EDI
007E688A    5E                 POP     ESI
007E688B    5B                 POP     EBX
007E688C    8BE5               MOV     ESP, EBP
007E688E    5D                 POP     EBP
007E688F    C3                 RETN

这是一个同例一的相同类型,所以直接修改代码为:

007E6809    55                 PUSH    EBP
007E680A    8BEC               MOV     EBP, ESP
007E680C    83EC 0C            SUB     ESP, 0C
007E680F    53                 PUSH    EBX
007E6810    56                 PUSH    ESI
007E6811    57                 PUSH    EDI
007E6812    8B45 08            MOV     EAX, DWORD PTR SS:[EBP+8]
007E6815    50                 PUSH    EAX
007E6816    FF15 28CC8300      CALL    DWORD PTR DS:[83CC28]            ; ezcddax.007DC1BD
007E681C    83C4 04            ADD     ESP, 4
007E681F    8945 FC            MOV     DWORD PTR SS:[EBP-4], EAX
007E6822    8B45 FC            MOV     EAX, DWORD PTR SS:[EBP-4]        ; 取Context域中EFLAGS寄存器值,看看壳怎么利用这个值,注意EAX
007E6825    90                 NOP                                      ; 取CC发生时的地址,注意这个地址是CC的下一个字节

007E6826    E9 914F0000        JMP     ezcddax.007EB7BC                //跳到上一个修改的代码处理

007E682B    90                 NOP
007E682C    90                 NOP
007E682D    90                 NOP
007E682E    90                 NOP
007E682F    90                 NOP
007E6830    90                 NOP
007E6831    90                 NOP
007E6832    90                 NOP
007E6833    90                 NOP
007E6834    90                 NOP
007E6835    90                 NOP
007E6836    90                 NOP
007E6837    90                 NOP
007E6838    90                 NOP
007E6839    90                 NOP
007E683A    90                 NOP
007E683B    90                 NOP
007E683C    90                 NOP
007E683D    90                 NOP
007E683E    90                 NOP
007E683F    90                 NOP
007E6840    90                 NOP
007E6841    90                 NOP
007E6842    90                 NOP
007E6843    90                 NOP
007E6844    90                 NOP
007E6845    90                 NOP
007E6846    90                 NOP
007E6847    90                 NOP
007E6848    90                 NOP
007E6849    90                 NOP
007E684A    90                 NOP
007E684B    90                 NOP
007E684C    90                 NOP
007E684D    90                 NOP
007E684E    90                 NOP
007E684F    90                 NOP
007E6850    90                 NOP
007E6851    90                 NOP
007E6852    90                 NOP
007E6853    90                 NOP
007E6854    90                 NOP
007E6855    90                 NOP
007E6856    90                 NOP
007E6857    90                 NOP
007E6858    90                 NOP
007E6859    8945 F4            MOV     DWORD PTR SS:[EBP-C], EAX
007E685C    8B0D 98838300      MOV     ECX, DWORD PTR DS:[838398]
007E6862    330D 9C838300      XOR     ECX, DWORD PTR DS:[83839C]
007E6868    D1E1               SHL     ECX, 1
007E686A    894D F8            MOV     DWORD PTR SS:[EBP-8], ECX
007E686D    837D F4 00         CMP     DWORD PTR SS:[EBP-C], 0
007E6871    74 09              JE      SHORT ezcddax.007E687C
007E6873    8B55 F8            MOV     EDX, DWORD PTR SS:[EBP-8]
007E6876    83CA 01            OR      EDX, 1
007E6879    8955 F8            MOV     DWORD PTR SS:[EBP-8], EDX
007E687C    8B45 F8            MOV     EAX, DWORD PTR SS:[EBP-8]
007E687F    50                 PUSH    EAX
007E6880    FF15 C4CB8300      CALL    DWORD PTR DS:[83CBC4]            ; ezcddax.007DC114
007E6886    83C4 04            ADD     ESP, 4
007E6889    5F                 POP     EDI
007E688A    5E                 POP     ESI
007E688B    5B                 POP     EBX
007E688C    8BE5               MOV     ESP, EBP
007E688E    5D                 POP     EBP
007E688F    C3                 RETN

修复后的代码为:

0043995F    85C0            TEST    EAX, EAX
00439961    74 13           JE      SHORT ezcddax.00439976              //修复后的代码,是个断je类型
00439963    8B4D FC         MOV     ECX, DWORD PTR SS:[EBP-4]
00439966    8B81 E8070000   MOV     EAX, DWORD PTR DS:[ECX+7E8]
0043996C    33D2            XOR     EDX, EDX
0043996E    8B08            MOV     ECX, DWORD PTR DS:[EAX]


例3:

00806075    FF148D 0C888300    CALL    DWORD PTR DS:[ECX*4+83880C]      ; 模拟处理EFLAGS寄存器值来判断标志寄存器的标志位的函数入口

入口:DS:[00838B24]=007FA56D (ezcddax.007FA56D)  F7进入:

007FA63F    FF55 F8            CALL    DWORD PTR SS:[EBP-8]             ; ezcddax.007E381A

真正入口:SS:[0012DC5C]=007E381A (ezcddax.007E381A)  F7进入:

007E381A  /.  55              PUSH    EBP
007E381B  |.  8BEC            MOV     EBP, ESP

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

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