文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页精文荟萃破解文章 → Win2K下寻找ASProtect OEP的一种方法

Win2K下寻找ASProtect OEP的一种方法

时间:2004/10/15 0:50:00来源:本站整理作者:蓝点我要评论(0)

 

正好在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

    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程