首页
社区
课程
招聘
[求助]手动脱ASProtect 1.23 RC4 发现偷了部分代码不知该如何还原。
发表于: 2009-12-31 17:36 2929

[求助]手动脱ASProtect 1.23 RC4 发现偷了部分代码不知该如何还原。

2009-12-31 17:36
2929
【文章标题】: 手动脱ASProtect 1.23 RC4 - 1.3.08.24 [1] 发现偷了OEP
【作    者】: 八一小龙
【加壳方式】: ASProtect 1.23 RC4 - 1.3.08.24 [1]
【作者声明】: 只是感兴趣,没有其他目的。
--------------------------------------------------------------------------------
【详细过程】

拿到程序初查是ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov
用PEiD 的插件 VerA 1.5 查出结果 Version: ASProtect 1.23 RC4 - 1.3.08.24 [1]

载入停在。
00401000 > 68 01001502      PUSH game.02150001
00401005   E8 01000000      CALL game.0040100B
0040100A   C3               RETN
0040100B   C3               RETN
0040100C   A6               CMPS BYTE PTR DS:[ESI],BYTE PTR ES:[EDI]
0040100D   8A47 6E          MOV AL,BYTE PTR DS:[EDI+6E]
00401010   81F3 46DCA775    XOR EBX,75A7DC46
00401016   C6               ???                                      ; 未知命令
00401017   4E               DEC ESI
00401018   307E E9          XOR BYTE PTR DS:[ESI-17],BH
0040101B   CA D8AA          RETF 0AAD8                               ; 远返回
0040101E   F4               HLT                                      ; 特权命令
0040101F   5C               POP ESP
00401020   51               PUSH ECX
00401021   44               INC ESP
00401022   B2 D5            MOV DL,0D5

一段 Shift + F9 到了我们要来的地方。
029239EC   3100             XOR DWORD PTR DS:[EAX],EAX
029239EE   64:8F05 00000000 POP DWORD PTR FS:[0]
029239F5   58               POP EAX
029239F6   833D B07E9202 00 CMP DWORD PTR DS:[2927EB0],0
029239FD   74 14            JE SHORT 02923A13
029239FF   6A 0C            PUSH 0C
02923A01   B9 B07E9202      MOV ECX,2927EB0
02923A06   8D45 F8          LEA EAX,DWORD PTR SS:[EBP-8]
02923A09   BA 04000000      MOV EDX,4
02923A0E   E8 2DD1FFFF      CALL 02920B40
02923A13   FF75 FC          PUSH DWORD PTR SS:[EBP-4]
02923A16   FF75 F8          PUSH DWORD PTR SS:[EBP-8]
02923A19   8B45 F4          MOV EAX,DWORD PTR SS:[EBP-C]
02923A1C   8338 00          CMP DWORD PTR DS:[EAX],0
02923A1F   74 02            JE SHORT 02923A23
02923A21   FF30             PUSH DWORD PTR DS:[EAX]
02923A23   FF75 F0          PUSH DWORD PTR SS:[EBP-10]
02923A26   FF75 EC          PUSH DWORD PTR SS:[EBP-14]
02923A29   C3               RETN
02923A2A   5F               POP EDI
02923A2B   5E               POP ESI
02923A2C   5B               POP EBX
02923A2D   8BE5             MOV ESP,EBP
02923A2F   5D               POP EBP
02923A30   C3               RETN
02923A31   8D40 00          LEA EAX,DWORD PTR DS:[EAX]
02923A34   B8 847E9202      MOV EAX,2927E84

然后在02923A29 RETN处F2,再Shift + F9
看右下角堆栈。
0012FF5C   02935514
0012FF60   00400000  game.00400000
0012FF64   F848C6F0
0012FF68   0012FFA4
0012FF6C   02910000

就是他了0012FF68 在 命令里输入 hr 0012FF68
取消02923A29处的断点,再 F9。
太顺利了,程序停在02935633。
02935633   EB 44            JMP SHORT 02935679
02935635   EB 01            JMP SHORT 02935638
02935637   9A 51579CFC BF00 CALL FAR 00BF:FC9C5751                   ; 远调用
0293563E   0000             ADD BYTE PTR DS:[EAX],AL
02935640   00B9 00000000    ADD BYTE PTR DS:[ECX],BH
02935646   F3:AA            REP STOS BYTE PTR ES:[EDI]
02935648   9D               POPFD
02935649   5F               POP EDI
0293564A   59               POP ECX
0293564B   C3               RETN
0293564C   55               PUSH EBP
0293564D   8BEC             MOV EBP,ESP
0293564F   53               PUSH EBX
02935650   56               PUSH ESI
02935651   8B75 0C          MOV ESI,DWORD PTR SS:[EBP+C]
02935654   8B5D 08          MOV EBX,DWORD PTR SS:[EBP+8]
02935657   EB 11            JMP SHORT 0293566A
02935659   0FB703           MOVZX EAX,WORD PTR DS:[EBX]
0293565C   03C6             ADD EAX,ESI
0293565E   83C3 02          ADD EBX,2
02935661   8BD0             MOV EDX,EAX

一直F8下去。
029356E0   52               PUSH EDX                                 ; ntdll.KiFastSystemCallRet
029356E1   EB 02            JMP SHORT 029356E5
029356E3   CD 20            INT 20
029356E5   0BD3             OR EDX,EBX
029356E7   65:EB 01         JMP SHORT 029356EB                       ; 多余的前缀
029356EA   F2:              PREFIX REPNE:                            ; 多余的前缀
029356EB   1BD6             SBB EDX,ESI
029356ED   EB 02            JMP SHORT 029356F1
029356EF   CD 20            INT 20
029356F1   F3:              PREFIX REP:                              ; 多余的前缀
029356F2   EB 02            JMP SHORT 029356F6
029356F4   CD 20            INT 20
029356F6   8D96 8CDEAC04    LEA EDX,DWORD PTR DS:[ESI+4ACDE8C]
029356FC   F2:              PREFIX REPNE:                            ; 多余的前缀
029356FD   EB 01            JMP SHORT 02935700
029356FF   9A F3EB02CD 206A CALL FAR 6A20:CD02EBF3                   ; 远调用
02935706   A9 EB02CD20      TEST EAX,20CD02EB
0293570B   C74424 00 FC5693>MOV DWORD PTR SS:[ESP],29356FC
02935713   5A               POP EDX
02935714   FF52 1C          CALL DWORD PTR DS:[EDX+1C]
02935717   F3:              PREFIX REP:                              ; 多余的前缀
02935718   1E               PUSH DS
02935719   57               PUSH EDI

到了这里要F7进去
029356FF   9A F3EB02CD 206A CALL FAR 6A20:CD02EBF3                   ; 远调用

再跟一段路到了0293572B

02935722   335424 00        XOR EDX,DWORD PTR SS:[ESP]
02935726   5A               POP EDX
02935727   65:EB 01         JMP SHORT 0293572B                       ; 多余的前缀
0293572A   C7               ???                                      ; 未知命令
0293572B   55               PUSH EBP
0293572C   8BEC             MOV EBP,ESP
0293572E   6A FF            PUSH -1
02935730   68 C00E5E00      PUSH 5E0EC0
02935735   68 3CF85600      PUSH 56F83C
0293573A   64:A1 00000000   MOV EAX,DWORD PTR FS:[0]
02935740   65:EB 01         JMP SHORT 02935744                       ; 多余的前缀
02935743   C7               ???                                      ; 未知命令
02935744   50               PUSH EAX
02935745   64:8925 00000000 MOV DWORD PTR FS:[0],ESP
0293574C   83EC 58          SUB ESP,58
0293574F   65:EB 01         JMP SHORT 02935753                       ; 多余的前缀
02935752   C7               ???                                      ; 未知命令
02935753   53               PUSH EBX
02935754   65:EB 01         JMP SHORT 02935758                       ; 多余的前缀
02935757   C7               ???                                      ; 未知命令
02935758   56               PUSH ESI
02935759   65:EB 01         JMP SHORT 0293575D                       ; 多余的前缀
0293575C   C7               ???                                      ; 未知命令
0293575D   57               PUSH EDI
0293575E   8965 E8          MOV DWORD PTR SS:[EBP-18],ESP
02935761   64:EB 02         JMP SHORT 02935766                       ; 多余的前缀
02935764   CD 20            INT 20
02935766   64:EB 01         JMP SHORT 0293576A                       ; 多余的前缀
02935769   F2:              PREFIX REPNE:                            ; 多余的前缀
0293576A   68 FDF45600      PUSH 56F4FD
0293576F   68 35569302      PUSH 2935635
02935774   C3               RETN
02935775   0000             ADD BYTE PTR DS:[EAX],AL
02935777   0000             ADD BYTE PTR DS:[EAX],AL
02935779   0000             ADD BYTE PTR DS:[EAX],AL

好像就是被偷走的代码啊。继续F8往下走,很轻松就来到了0056F4FD。
0056F4FD   FF15 2CC25D00    CALL DWORD PTR DS:[5DC22C]
0056F503   33D2             XOR EDX,EDX
0056F505   8AD4             MOV DL,AH
0056F507   8915 B0F11302    MOV DWORD PTR DS:[213F1B0],EDX
0056F50D   8BC8             MOV ECX,EAX
0056F50F   81E1 FF000000    AND ECX,0FF
0056F515   890D ACF11302    MOV DWORD PTR DS:[213F1AC],ECX
0056F51B   C1E1 08          SHL ECX,8
0056F51E   03CA             ADD ECX,EDX
0056F520   890D A8F11302    MOV DWORD PTR DS:[213F1A8],ECX

向上拖一下,呵呵,开心了。

0056F4D4   5B               POP EBX
0056F4D5   C9               LEAVE
0056F4D6   C3               RETN
0056F4D7   0000             ADD BYTE PTR DS:[EAX],AL
0056F4D9   0000             ADD BYTE PTR DS:[EAX],AL
0056F4DB   0000             ADD BYTE PTR DS:[EAX],AL
0056F4DD   0000             ADD BYTE PTR DS:[EAX],AL
0056F4DF   0000             ADD BYTE PTR DS:[EAX],AL
0056F4E1   0000             ADD BYTE PTR DS:[EAX],AL
0056F4E3   0000             ADD BYTE PTR DS:[EAX],AL
0056F4E5   0000             ADD BYTE PTR DS:[EAX],AL
0056F4E7   0000             ADD BYTE PTR DS:[EAX],AL
0056F4E9   0000             ADD BYTE PTR DS:[EAX],AL
0056F4EB   0000             ADD BYTE PTR DS:[EAX],AL
0056F4ED   0000             ADD BYTE PTR DS:[EAX],AL
0056F4EF   0000             ADD BYTE PTR DS:[EAX],AL
0056F4F1   0000             ADD BYTE PTR DS:[EAX],AL
0056F4F3   0000             ADD BYTE PTR DS:[EAX],AL
0056F4F5   0000             ADD BYTE PTR DS:[EAX],AL
0056F4F7   0000             ADD BYTE PTR DS:[EAX],AL
0056F4F9   0000             ADD BYTE PTR DS:[EAX],AL
0056F4FB   0000             ADD BYTE PTR DS:[EAX],AL
0056F4FD   FF15 2CC25D00    CALL DWORD PTR DS:[5DC22C]
0056F503   33D2             XOR EDX,EDX
0056F505   8AD4             MOV DL,AH
0056F507   8915 B0F11302    MOV DWORD PTR DS:[213F1B0],EDX
0056F50D   8BC8             MOV ECX,EAX
0056F50F   81E1 FF000000    AND ECX,0FF

将0056F4D7设为新EIP,后面修复就不演示了。

现在的问题在。0056F4D7-0056F4FC这段代码怎么填呢?
授人鱼不如授人以渔嘛。所以我希望大家可以告诉我,该怎么还原,谢谢各位了。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
刚刚自己整理了一下,好像是这些,请大家帮忙看看。
0293572B   55               PUSH EBP
0293572C   8BEC             MOV EBP,ESP
0293572E   6A FF            PUSH -1
02935730   68 C00E5E00      PUSH 5E0EC0
02935735   68 3CF85600      PUSH 56F83C
0293573A   64:A1 00000000   MOV EAX,DWORD PTR FS:[0]
02935744   50               PUSH EAX
02935745   64:8925 00000000 MOV DWORD PTR FS:[0],ESP
0293574C   83EC 58          SUB ESP,58
02935753   53               PUSH EBX
02935758   56               PUSH ESI
0293575D   57               PUSH EDI
0293575E   8965 E8          MOV DWORD PTR SS:[EBP-18],ESP
0293576A   68 FDF45600      PUSH 56F4FD
0293576F   68 35569302      PUSH 2935635

这段代码还是放不进入口代码里,到底哪里是被变形过得呢?
2009-12-31 17:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
如上,重点应该是在
0293572B   55               PUSH EBP
0293572C   8BEC             MOV EBP,ESP
0293572E   6A FF            PUSH -1
02935730   68 C00E5E00      PUSH 5E0EC0
02935735   68 3CF85600      PUSH 56F83C
0293573A   64:A1 00000000   MOV EAX,DWORD PTR FS:[0]
02935744   50               PUSH EAX
02935745   64:8925 00000000 MOV DWORD PTR FS:[0],ESP
0293574C   83EC 58          SUB ESP,58
02935753   53               PUSH EBX
02935758   56               PUSH ESI
0293575D   57               PUSH EDI
0293575E   8965 E8          MOV DWORD PTR SS:[EBP-18],ESP
0293576A   68 FDF45600      PUSH 56F4FD
0293576F   68 35569302      PUSH 2935635

这三句如何简化呢?望高手赐教。
2010-1-1 12:55
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
此帖已结,代码是被偷了,但是没有修改,只是移动了一下位置。
入口代码到MOV DWORD PTR SS:[EBP-18],ESP为止。
下面两句不要了,程序可以运行,PEID检测结果,C++。
0293576A   68 FDF45600      PUSH 56F4FD
0293576F   68 35569302      PUSH 2935635
2010-1-4 08:30
0
游客
登录 | 注册 方可回帖
返回