找回密码
 注册
搜索
热搜: 回贴

手动脱壳进阶第九篇Acprotect1.09(图),ACProtect,脱壳技术

2010-1-30 18:20| 发布者: admin| 查看: 65| 评论: 0|原作者: 夙玉


手动脱壳进阶第九篇Acprotect1.09(图),ACProtect,脱壳技术
2008年06月23日 星期一 下午 04:46
【脱文作者】 weiyi75[Dfcg]



【作者邮箱】 weiyi75@sohu.com



【作者主页】 Dfcg官方大本营



【使用工具】 Ollydbg1.09反Kill版,Imprec1.42



【破解平台】 Win2000/XP



【软件名称】 Acprotect1.09加壳的Win98的记事本,选择了所有的Antidbg选项。



【下载地址】 本地下载



【软件简介】:ACProtect is an application that allows you to protect Windows executable files against piracy,using public keys encryption algorithms (RSA) to create and verify the registration keys and unlock some RSA key locked code,it has embedded cryptor against dump and unpacker.it also has many anti debug tricks. And you can use it to create evaluation and trial application versions. with specialized API system, mutual communication between loader and application is also can be achieved.



截图









【软件大小】 125k



【加壳方式】 UltraProtect 1.x -> RISCO Software Inc.



【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)



--------------------------------------------------------------------------------



【破解内容】

Od设置不忽略内存异常,其余异常全部忽略。



载入程序,插件隐藏Od。



0040D000 > 60 PUSHAD 入口。

0040D001 FC CLD

0040D002 87FE XCHG ESI,EDI

0040D004 66:C1CE A5 ROR SI,0A5 ; 移动常数超出 1..31 的范围

0040D008 66:13F0 ADC SI,AX

0040D00B 7E 03 JLE SHORT NOTEPAD.0040D010

0040D00D 7F 01 JG SHORT NOTEPAD.0040D010

0040D00F - EB BF JMP SHORT NOTEPAD.0040CFD0

0040D011 C7 ??? ; 未知命令

0040D012 F2: PREFIX REPNE: ; 多余的前缀X REP

0040D013 EB 5E JMP SHORT NOTEPAD.0040D073

0040D015 E8 01000000 CALL NOTEPAD.0040D01B

0040D01A - 76 83 JBE SHORT NOTEPAD.0040CF9F

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



基本思路,利用Seh最后一次异常找OEP,这里经过多次试验决定选择不忽略内存异常。

最后一次内存异常



0041308E CD 01 INT 1

00413090 40 INC EAX

00413091 40 INC EAX

00413092 0BC0 OR EAX,EAX

00413094 0F85 B6000000 JNZ NOTEPAD.00413150

0041309A 60 PUSHAD

0041309B 8DBD 36B74100 LEA EDI,DWORD PTR SS:[EBP 41B736]

004130A1 4F DEC EDI

004130A2 8D8D 70BE4100 LEA ECX,DWORD PTR SS:[EBP 41BE70]

004130A8 83C1 02 ADD ECX,2

004130AB 2BCF SUB ECX,EDI

004130AD C1E9 02 SHR ECX,2

004130B0 E8 49D8FFFF CALL NOTEPAD.004108FE

004130B5 AB STOS DWORD PTR ES:[EDI]

004130B6 ^ E2 F8 LOOPD SHORT NOTEPAD.004130B0

004130B8 61 POPAD

004130B9 60 PUSHAD

004130BA E8 92DAFFFF CALL NOTEPAD.00410B51

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



可以单步跟踪到入口点,很慢的。这里我选择了内存Code段镜像断点。



Alt M



下401000处Code段内存访问断点,见截图,F9运行后中断。









004010D2 56 PUSH ESI 到这里,这里是什么地方?我们知道记事本的Oep是4010cc,好Ctrl G 4010cc看看

004010D3 FF15 E4634000 CALL DWORD PTR DS:[4063E4] ; NOTEPAD.0040D1BA

004010D9 8BF0 MOV ESI,EAX

004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]

004010DD 3C 22 CMP AL,22

004010DF 75 1B JNZ SHORT NOTEPAD.004010FC

004010E1 56 PUSH ESI

004010E2 FF15 F4644000 CALL DWORD PTR DS:[4064F4] ; NOTEPAD.0040D4C6

004010E8 8BF0 MOV ESI,EAX

004010EA 8A00 MOV AL,BYTE PTR DS:[EAX]

004010EC 84C0 TEST AL,AL

004010EE 74 04 JE SHORT NOTEPAD.004010F4

004010F0 3C 22 CMP AL,22

004010F2 ^ 75 ED JNZ SHORT NOTEPAD.004010E1

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

004010CC B3 BB MOV BL,0BB

004010CE 93 XCHG EAX,EBX

004010CF 44 INC ESP

004010D0 8578 56 TEST DWORD PTR DS:[EAX 56],EDI

004010D3 FF15 E4634000 CALL DWORD PTR DS:[4063E4] ; NOTEPAD.0040D1BA

004010D9 8BF0 MOV ESI,EAX

004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]

004010DD 3C 22 CMP AL,22

004010DF 75 1B JNZ SHORT NOTEPAD.004010FC

004010E1 56 PUSH ESI

004010E2 FF15 F4644000 CALL DWORD PTR DS:[4064F4] ; NOTEPAD.0040D4C6

004010E8 8BF0 MOV ESI,EAX

004010EA 8A00 MOV AL,BYTE PTR DS:[EAX]

004010EC 84C0 TEST AL,AL

004010EE 74 04 JE SHORT NOTEPAD.004010F4

004010F0 3C 22 CMP AL,22

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

这个是没有加壳的记事本程序



004010CC >/$Content$nbsp; 55 push ebp

004010CD |. 8BEC mov ebp, esp

004010CF |. 83EC 44 sub esp, 44

004010D2 |. 56 push esi

004010D3 |. FF15 E4634000 call dword ptr ds:[<&kernel32.GetCommand>; [GetCommandLineA

004010D9 |. 8BF0 mov esi, eax

004010DB |. 8A00 mov al, byte ptr ds:[eax]

004010DD |. 3C 22 cmp al, 22

004010DF |. 75 1B jnz short unpack11.004010FC

004010E1 |> 56 /push esi ; /pCurrentChar

004010E2 |. FF15 F4644000 |call dword ptr ds:[<&user32.CharNextA>] ; \CharNextA

004010E8 |. 8BF0 |mov esi, eax

004010EA |. 8A00 |mov al, byte ptr ds:[eax]

004010EC |. 84C0 |test al, al

004010EE |. 74 04 |je short unpack11.004010F4

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



原来用ACProtect相同选项加壳的某些程序入口处的6个字节被替换了,某些程序却又正常,难怪我的杀不死的Peid0.91查不出它的OEP. 被替换的字节暂时没有什么好方法,也很少见。经过测试几个加壳程序,这个找Oep方法不错,很快。

那就手动修改4010cc到4010d1处的六个字节。



004010CC 55 PUSH EBP 修改后入口的代码,用插件修改入口为10cc直接脱壳。

004010CD 8BEC MOV EBP,ESP

004010CF 83EC 44 SUB ESP,44

004010D2 56 PUSH ESI

004010D3 FF15 E4634000 CALL DWORD PTR DS:[4063E4] ; NOTEPAD.0040D1BA

004010D9 8BF0 MOV ESI,EAX

004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]

004010DD 3C 22 CMP AL,22

004010DF 75 1B JNZ SHORT NOTEPAD.004010FC

004010E1 56 PUSH ESI

004010E2 FF15 F4644000 CALL DWORD PTR DS:[4064F4] ; NOTEPAD.0040D4C6

004010E8 8BF0 MOV ESI,EAX

004010EA 8A00 MOV AL,BYTE PTR DS:[EAX]

004010EC 84C0 TEST AL,AL

004010EE 74 04 JE SHORT NOTEPAD.004010F4

004010F0 3C 22 CMP AL,22

004010F2 ^ 75 ED JNZ SHORT NOTEPAD.004010E1



修复IAT

关闭OD

打开加壳的记事本程序,ImportREC用等级3修复,正常运行。






我是一个菜鸟,菜菜菜菜菜菜。。。。。。



最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 21:22 , Processed in 0.151782 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部