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

脱壳技术

2010-1-12 20:27| 发布者: admin| 查看: 185| 评论: 0|原作者: 墨元

【脱文作者】weiyi75[Dfcg]

【作者邮箱】weiyi75@sohu.com

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

【使用工具】Ollydbg1.10b,ImportREC1.6F,LoadPe

【破解平台】Win2000/XP

【软件名称】PE文件分析器

【下载地址】原程序

http://tongtian.net/pediybbs/download.php?id=1514

【下载地址】加密程序

http://tongtian.net/pediybbs/download.php?id=1513

【软件简介】ASProtect1.23RC4Registered版本加密的一个PE文件分析器。

【软件大小】453K

【加壳方式】ASProtect1.23RC4-1.3.08.24->AlexeySolodovnikov

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

【破解目的】模拟跟踪寻找StolenCode具体内容或Oep入口。

前言,这个软件是我用ASProtect1.23RC4Registered版本加密的,使用了所有反跟踪选项。

先OD载入原程序看看

004B7220>$55PUSHEBP//典型Dephi语言入口点

004B7221.8BECMOVEBP,ESP

004B7223.83C4F0ADDESP,-10

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

附一张入口点截图,大家看到什么没有



寄存器EBP=0012FFF0//这是程序停在入口点EBP的值,其它Dephi语言或编程语言这里的EBP值全部相同,这又说明什么,当Asprotect运行到这里或StolenCode时EBP的值就为EBP=0012FFF0,我们来具体试试。

OD异常设置不忽略内存异常,其余全部忽略,载入程序,用插件隐藏OD。

00401000>6801F04E00PUSHPej.004EF001//加壳程序入口点,F9运行

00DB3A1C833800CMPDWORDPTRDS:[EAX],0

00DB3A1F7402JESHORT00DB3A23

00DB3A21FF30PUSHDWORDPTRDS:[EAX]

00DB3A23FF75F0PUSHDWORDPTRSS:[EBP-10]

00DB3A26FF75ECPUSHDWORDPTRSS:[EBP-14]

00DB3A29C3RETN//这里下断点,Shift F9中断后取消断点。

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

我这次没有用内存镜像断点到OEP,下面的这个方法可以发现StolenCode(如果有) Oep二合一。

仍然是命令行断点

tcebp==12fff0//当前EBP内容为12fff0就被中断,略微看看就可以找到StolenCode(如果有)或Oep

00DC6348/EB02JMPSHORT00DC634C//一会就来到这里,呵呵,C 语言就开始有StolenCode,而且略有变形,往下全部用F7步过,转标签1

00DC634A|CD20INT20

00DC634C\F2:PREFIXREPNE://这样的语句其实是一些变形Jmp;多余的前缀

00DC634DEB01JMPSHORT00DC6350

00DC634F-E965EB01E9JMPE9DE4EB9

00DC63546891AA7FAEPUSHAE7FAA91

00DC63596A2APUSH2A

00DC635B897C2404MOVDWORDPTRSS:[ESP 4],EDI

00DC635FF2:PREFIXREPNE:;多余的前缀

00DC6360EB01JMPSHORT00DC6363

00DC63629A8D642404F3E>CALLFAREBF3:0424648D;远距呼叫

00DC636902CDADDCL,CH

00DC636B20F2ANDDL,DH

00DC636DEB01JMPSHORT00DC6370

00DC636FC7???;未知命令

00DC63700FCFBSWAPEDI

00DC6372EB02JMPSHORT00DC6376

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

00DC63B6F2:PREFIXREPNE:;多余的前缀

00DC63BA8D6424F7LEAESP,DWORDPTRSS:[ESP-9]

00DC63BE66:8135C763DC0>XORWORDPTRDS:[DC63C7],0AA91

00DC63C77AABJPESHORT00DC6374

00DC63C7/EB01JMPSHORT00DC63CA

00DC63CA8D642442LEAESP,DWORDPTRSS:[ESP 42]

00DC63CE8D6424C3LEAESP,DWORDPTRSS:[ESP-3D]

00DC63D266:8135DB63DC0>XORWORDPTRDS:[DC63DB],0D71A

00DC63DBF3:PREFIXREP:;多余的前缀

00DC63E055PUSHEBP//StolenCode第一句。

00DC63E166:8135EB63DC0>XORWORDPTRDS:[DC63EB],80A3

00DC63EAF2:PREFIXREPNE:;多余的前缀

00DC63EE8F442400POPDWORDPTRSS:[ESP];0012FFF0

00DC63F28BECMOVEBP,ESP执行完它后,EBP=ESP=12FFC0,打破了从跟踪到这里EBP的值一直为12fff0的情况,同时也让我们也可以知道入口代码就在附近。StolenCode第二句。

00DC63F481EC10000000SUBESP,10StolenCode第三句,这句要改为ADDESP,10标准化。

00DC63FAF2:PREFIXREPNE:;多余的前缀

00DC63FE/65:EB01JMPSHORT00DC6402;多余的前缀

00DC640251PUSHECX

00DC6403/EB04JMPSHORT00DC6409

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

后面有无数条小跳转,全部都是垃圾,我跟踪了40分钟,还没走完,已经吐血了。

所以Dephi程序最好先确定StolenCode数目。

004B7220>$55PUSHEBP

004B7221.8BECMOVEBP,ESP

004B7223.83C4F0ADDESP,-10

004B7226.B8A86F4B00MOVEAX,Pe.004B6FA8

这个程序一共抽掉11字节。

前面三句我们已经得到,现在的问题是MOVEAX,xxxxxxxx

EAX的值是多少?

ALT M打开内存镜像。

内存镜像,项目12

地址=00401000//对401000Code段下内存断点。

大小=000B7000(749568.)

Owner=Pej00400000

区段=

Contains=code

类型=Imag01001002

访问=R

初始访问=RWE

004065D8-FF2558C24B00JMPDWORDPTRDS:[4BC258]//中断在这里,清除内存断点。

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

IAT修复,关闭OD,打开加壳程序,呵呵OEP填1000,ImportREC把Size认为000000A8太小了,改为1000,点获得输入表。显示无效,先用等级1方式跟踪,然后用Asprtect1.22插件再减轻一下压力。还剩591个指针没修复。

现在的问题是,这591个指针是有用的吗?ImpRec1.6会告诉你

点击showinvalid并右键单击选择其中的一个,让我们来修复它

00BC214<-右键单击选择Deasm\HexView查看:

ImpRec1.6提示你,readerror!好,够了,只要有这个提示的一律可以安全的Cut。

如果这个指针有效,里面会显示汇编指令。

找了一会,发现00BC370处的指针是唯一一个没识别的指针。

右键单击选择Deasm\HexView查看,究竟它是Kernel32.dll中的哪个函数呢,按PageDown两次,看到

00DB1D2Ecall00DA5158//=kernel32.dll/00B3/FindResourceA

第一个看到的Api函数就是要修复的指针。

呵呵,修复它吧,双击00BC370这行,填入Api函数FindResourceA。

拿起剪刀,将剩下590个垃圾指针全部Cut,IAT全部修复,爽啊。修正Oep为B7220最后修复文件,无法运行!

经过调试N个Dephi文件,发现Asprotect1.23rc4的Dephi程序,入口处脱壳有反脱壳代码,只能在最后一次异常处脱壳,不然即使修复IAT和补上代码也不能运行。

于是在最后一次异常处用LoadPe脱壳,IAT修复和StolenCode过程问题如上所述面,最后正常运行。

【破解总结】发现Dephi语言的Asprotect1.23Rc4的壳开始用StolenCode,并且有变形指令,反脱壳代码,最麻烦,tcebp==12fff0还不错吧,好累啊,全文完。





最新评论

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

GMT+8, 2024-9-29 11:39 , Processed in 0.180310 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部