经过一段解密代码后来到这里:
01029C3E 66:C1DF 4D RCR DI,4D
01029C42 E8 A043FFFF CALL NOTEPAD_.0101DFE7
01029C47 8B85 E4AC4100 MOV EAX,DWORD PTR SS:[EBP+41ACE4]
01029C4D 0385 31DE4000 ADD EAX,DWORD PTR SS:[EBP+40DE31]
01029C53 8985 E4AC4100 MOV DWORD PTR SS:[EBP+41ACE4],EAX
01029C59 E8 8943FFFF CALL NOTEPAD_.0101DFE7
01029C5E C685 A1AC4100 E8 MOV BYTE PTR SS:[EBP+41ACA1],0E8
01029C65 E8 7D43FFFF CALL NOTEPAD_.0101DFE7
01029C6A C785 A2AC4100 FF>MOV DWORD PTR SS:[EBP+41ACA2],25FF
01029C74 8D85 E4AC4100 LEA EAX,DWORD PTR SS:[EBP+41ACE4]
01029C7A 8985 A4AC4100 MOV DWORD PTR SS:[EBP+41ACA4],EAX
01029C80 E8 6243FFFF CALL NOTEPAD_.0101DFE7
01029C85 8DBD 80AA4100 LEA EDI,DWORD PTR SS:[EBP+41AA80]
01029C8B 8D8D 96AC4100 LEA ECX,DWORD PTR SS:[EBP+41AC96]
01029C91 2BCF SUB ECX,EDI
01029C93 C1E9 02 SHR ECX,2
01029C96 E8 EA40FFFF CALL NOTEPAD_.0101DD85 ;\这个循环解密出伪OEP处的代码
01029C9B AB STOS DWORD PTR ES:[EDI] ;|如果前面改掉的代码不及时恢复的
01029C9C ^ E2 F8 LOOPD SHORT NOTEPAD_.01029C96 ;/话,这里就会解密错误
01029C9E 61 POPAD
01029C9F EB 01 JMP SHORT NOTEPAD_.01029CA2
01029CA2 - FF25 E49C0201 JMP DWORD PTR DS:[1029CE4] ; NOTEPAD_.0100649F 飞向伪OEP!
到达伪OEP后就可以dump出程序,运行ImportREC,OEP填入伪OEP=0000649F,RAV填入前面得到的00001000,Size填入1000,Get Import,即可得到完整的API,把Invalid的FThunk全部Delete掉,按默认选项,选中Add new section ,Fix Dump,OK!
PS:有的程序在填入伪OEP后,IAT AutoSearch会可能得不到IAT的RAV
可惜的是NOTEPAD.EXE本身太小,Acpr居然没有Replace Code,我是一边脱壳一边写的,程序Dump出后,才发现没有Replace Code,实在可惜.其实,在伪OEP Dump出的程序已经包含了解密Replace Code的代码和数据表,修复IAT,Stolen code和OEP后程序就可以正常运行.当然,要把脱壳后的程序修复的接近完美的话,也可以自己手工修复所有的Replace Code
PS:Acpr的Stolen code有点儿局限,有些由Delphi和BCB写的程序的原OEP处是EB 10 JMP xxxxxxxx的跳转语句,例如OllyDbg,这时Acpr就不会Stolen code.我本来是想把OllyDbgBeta110b的主程序加壳当试练品,可Acpr没Stolen code,只好换NOTEPAD.EXE了
———————————————————————————————————
后记:
上次写破文是在5个月前,那时就怀疑自己的表达是否清楚合理,现在就更没把握了,还请各位看了不要笑话.国内软件用Acpr加壳的不多,不知道是因为没有破版放出,还是对Acpr没有信心,关于Acpr的破文就更少了.与之成鲜明对比的是Aspr,ASProtect 1.23RC4和1.30也不见有破版广泛流传(我自己就没有1.23 RC4的可用版,1.30见都没见过 555~),但用其加壳的程序比比皆是(1.30我不敢说,但加1.23 RC4的确实不少),破文更是扑天盖地.现在Acpr的破版在一月之内接连放出,不知道局面是否会有所改变
thl0057
04.04.01
于 HD
上一次由thl0057于2004-4-01 周四, 下午10:57修改,总共修改了6次
