老文章档案 · 2003 年

Win2K下寻找ASProtect OEP的一种方法

赢政天下 [WINZHENG.COM] · 网络学院 · 2003-06-12 · 作者:blowfish 人气: · 出处:嬴政天下整理收藏)

正好在Fravia论坛上看到有人问这个问题,试着跟了一下Tag & Rename v1.96(主程序751,616 字节),发现其OEP为5569EC,和zombieys得到的556a00不同。

方法如下:

1、利用ASProtect的API重定向/模拟特性。对于Tag & Rename来说,下面几个API被模拟,利用下面的几个API中的某一个作为断点(不要用使用频率太高的,比如不要用被频繁调用的GetModuleHandleA作为断点),比如用bpx GetVersion,两次中断之后就到了:

001B:00F7C7BA 8BC0 MOV EAX,EAX

001B:00F7C7BC 6A00 PUSH 00

001B:00F7C7BE E8897CFFFF CALL KERNEL32!GetModuleHandleA

001B:00F7C7C3 A34C36F800 MOV [00F8364C],EAX

001B:00F7C7C8 E8977CFFFF CALL KERNEL32!GetVersion

001B:00F7C7CD A34436F800 MOV [00F83644],EAX

001B:00F7C7D2 68AC35F800 PUSH 00F835AC

001B:00F7C7D7 E8907CFFFF CALL KERNEL32!GetVersionExA

001B:00F7C7DC E83B7CFFFF CALL KERNEL32!GetCurrentProcess

001B:00F7C7E1 A34836F800 MOV [00F83648],EAX

001B:00F7C7E6 E8397CFFFF CALL KERNEL32!GetCurrentProcessId

001B:00F7C7EB A35036F800 MOV [00F83650],EAX

001B:00F7C7F0 E81F7CFFFF CALL KERNEL32!GetCommandLineA

001B:00F7C7F5 A34036F800 MOV [00F83640],EAX

001B:00F7C7FA C3 RET

2、执行完上面的ret指令之后,紧跟着的就是20多个精心构造的SEH结构。每个SEH结构大致如下。由于EAX为0,所以xor指令会引发异常。

.......................................

001B:00F800EA 648920 MOV FS:[EAX],ESP //准备ERR结构

001B:00F800ED 3100 XOR [EAX],EAX

001B:00F800EF EB01 JMP 00F800F2

3、按F8单步执行上面的xor指令,会进入KiUserExceptionDispatcher:

ntdll!KiUserExceptionDispatcher

001B:77F9FB8C 8B4C2404 MOV ECX,[ESP+04]

001B:77F9FB90 8B1C24 MOV EBX,[ESP]

001B:77F9FB93 51 PUSH ECX

001B:77F9FB94 53 PUSH EBX

001B:77F9FB95 E886B3FEFF CALL 77F8AF20

001B:77F9FB9A 0AC0 OR AL,AL

001B:77F9FB9C 740C JZ 77F9FBAA

001B:77F9FB9E 5B POP EBX

001B:77F9FB9F 59 POP ECX

001B:77F9FBA0 6A00 PUSH 00

001B:77F9FBA2 51 PUSH ECX

001B:77F9FBA3 E8EE2BFFFF CALL ntdll!NtContinue

001B:77F9FBA8 EB0B JMP 77F9FBB5

001B:77F9FBAA 5B POP EBX

001B:77F9FBAB 59 POP ECX

001B:77F9FBAC 6A00 PUSH 00

001B:77F9FBAE 51 PUSH ECX

001B:77F9FBAF 53 PUSH EBX

001B:77F9FBB0 E83D65FEFF CALL ntdll!NtRaiseException

4、继续进入NtContinue,会调用系统服务:

ntdll!NtContinue

001B:77F92796 B81C000000 MOV EAX,0000001C

001B:77F9279B 8D542404 LEA EDX,[ESP+04]

001B:77F9279F CD2E INT 2E

001B:77F927A1 E9467A0000 JMP 77F9A1EC

5、按F8指行上面的INT指令,进入系统服务分发程序,最终进入下面的call:

0008:8053167C C1E902 SHR ECX,02

0008:8053167F 8BFC MOV EDI,ESP

0008:80531681 3B35E89E5380 CMP ESI,[ntoskrnl!MmUserProbeAddress]

0008:80531687 0F83E4010000 JAE 80531871

0008:8053168D F3A5 REPZ MOVSD

0008:8053168F FFD3 CALL EBX

6、进去之后一直按F10,看见系统调用会用iretd指令返回:

0008:8053191A 66837D6C08 CMP WORD PTR [EBP+6C],08

0008:8053191F 740C JZ 8053192D

0008:80531921 8D6530 LEA ESP,[EBP+30]

0008:80531924 0FA9 POP GS

0008:80531926 07 POP ES

0008:80531927 1F POP DS

0008:80531928 8D6550 LEA ESP,[EBP+50]

0008:8053192B 0FA1 POP FS

0008:8053192D 8D6554 LEA ESP,[EBP+54]

0008:80531930 5F POP EDI

0008:80531931 5E POP ESI

0008:80531932 5B POP EBX

0008:80531933 5D POP EBP

0008:80531934 66817C24088000 CMP WORD PTR [ESP+08],0080

0008:8053193B 7749 JA 80531986

0008:8053193D 83C404 ADD ESP,04

0008:80531940 CF IRETD

7、清除所有断点,在上面的iretd处设个断点(也可以在int 2E上设断点,总之是以不变应万变,即不管什么类型的应用程序异常都会在这里集中处理。iretd处可能是全部系统调用的出口,不仅仅包括NtContinue系统调用,还有其它的系统调用也经过这里)。之后按F5执行,由于有26个左右的SEH结构,所以会在上面的iretd处中断近26次。

8、26次之后在上述断点处改按F8,会继续执行ASProtect加的壳。此后再经过几次ret之后,紧跟着的基本上是几个大的循环。每个循环的标志大致如下。只要在循环的出口处(即JNZ下面的那条指令处)设个断点就可以把循环跳过。

......................

001B:00F93608 0FBFF1 MOVSX ESI,CX

001B:00F9360B 83EA01 SUB EDX,01

001B:00F9360E 80C3C3 ADD BL,C3

001B:00F93611 4A DEC EDX

001B:00F93612 4A DEC EDX

001B:00F93613 4A DEC EDX

001B:00F93614 51 PUSH ECX

001B:00F93615 B374 MOV BL,74

001B:00F93617 5E POP ESI

001B:00F93618 81FAF0FFFFFF CMP EDX,FFFFFFF0

001B:00F9361E 0F851D000000 JNZ 00F93641 //循环

001B:00F93624 66BB6E0A MOV BX,0A6E

001B:00F93628 E929000000 JMP 00F93656

9、最终到达入口处:

001B:00F93655 855B58 TEST [EBX+58],EBX

001B:00F93658 0524BCDA0E ADD EAX,0EDABC24

001B:00F9365D 5C POP ESP

001B:00F9365E 03C3 ADD EAX,EBX

001B:00F93660 8944241C MOV [ESP+1C],EAX

001B:00F93664 61 POPAD

001B:00F93665 FFE0 JMP EAX //跳到OEP去

标 题:补充一下:最初设断点可以不用GetVersion等 (273字)

发信人:blowfish

时 间:2001-9-25 15:39:54

详细信息:

最通用的是CreateFileA,因为ASProtect的壳一般都加上了自校验功能,所以要用CreateFileA去打开自己的exe,故可以用这个做断点。之后再经过16次左右的IRETD指令,就快到入口了。

附:

ReGet Deluxe 2.0 (build 93)

OEP = 004A38DE

http://download.reget.com/dl/jr/regetdx_093.exe (出处:嬴政天下整理收藏)

相关文章:

·怎样脱用 Aspack2.12 加的壳(适合初学者)

·EZIP1.0脱壳手记

·脱pecompact1.71加的壳

·PEPack1.0脱壳手记

·手动脱壳的教程(由petite v2.2加壳)

·论 彩票快车白金版v90 的脱壳+爆破

·Aspack的壳

·对PECompact.exe v1.34的手动脱壳

·Petite 脱壳“标准”解决方法

·Petite 2.x 脱壳

相关软件:

·NetConch(网络贝壳) 1.1

·甲壳虫进销存 V3.16 医药版

·甲壳虫医药版 V3.80

·甲壳虫服装鞋帽版 V3.90

·甲壳虫超市版 V3.68

·花生壳(PeanutHull) V2.0 正式版

·甲壳虫XP插件版 2.0.5

→ 特别推荐

→ 热点TOP10

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史