学习VolX的ASPr脚本的简单笔记 一、声明: 为了测试的方便,同一目标程序加了两个壳,分别是Packed.exe和Packed.Unregistered.exe 二、加壳设置: Packed.Unregistered.exe的加密设置 没有使用“保护原始入口”设置,主要是为了方便测试 lang=EN-US> Packed.exe的选项里的设置是一样的,就是没有用模式 三、用脚本对Packed.exe的试练
1、
OD载入Packed.exe,使用volx的2.2s脚本,一下子就到了OEP,IAT都修复好了,太强了!大家来膜拜下Volx大侠吧:)。。。。。。膜拜中。。。。。。,
脱壳修复发现跑不起来(脚本怎么使用?----)见volx的使用说明) 2、问题的解决 OD载入,脱壳后修复的程序 如下图所示设置异常 Shift+F9运行,看堆栈提示 选中第1行,右键—》反汇编中跟随 看看0053F270长什么样吧 很明显了,这里被偷的代码没有修复还原,下面介绍两种解决方法 1、本程序是Microsoft Visual
C++ 7.0 [Debug]写的,同样找个此种语言写的程序,通过下bpx RaiseException断点,找到类似的位置,发现这里的代码应该是这样的 2、既然它是指向壳的2220000,那么就可以在脚本跑到OEP的时候,Dump下加壳程序的2220000所在区段,把他修补到脱壳修复后程序中去 好了,手动还原代码吧 再另存为一份 程序就可以运行了! BTW:这里体现了脚本的问题,不过本人用不同的设置加了几个试了下,有的有问题,有的没问题,估计是不一样的加密设置造成的。出现的都是此类小问题,大家可以自行修复。 四、进入正题,跳过注册 OD载入Packed.Unregistered.exe,忽略所有异常 bp
MessageBoxA,Shift+F9运行,出现注册框,点Cancel,中断下来 取消断点,Alt+F9返回 0103FF 0103FF 0103FF6E 8B00
mov eax,dword ptr ds:[eax] 0103FF70 8BD0
mov edx,eax 看堆栈,一直往下拉吧,找到这里 大家可能要说,为什么找到了这里呢? 其实大家自己去试下就知道了“返回到 0082C456。。。”是从上面下拉的过程中第1个返回到程序领空的位置,这个可以做为一个标记,让我们快速的找到关键位置 至于为什么,大家自行揣摩下吧 OK,Ctrl+G:0106018D 010600AA A1 282B0601 mov
eax,dword ptr ds:[1062B28] 010600AF 8B53 01
mov edx,dword ptr ds:[ebx+1] 010600B2 8910
mov dword ptr ds:[eax],edx 010600B 010600B9 8B00
mov eax,dword ptr ds:[eax] 010600BB E8 010600CE 8B09
mov ecx,dword ptr ds:[ecx] 010600D0 8B15 010600D6 8B12
mov edx,dword ptr ds:[edx] 010600D8 8D43 09
lea eax,dword ptr ds:[ebx+9] 010600DB E8 7825FCFF call
01022658 010600E0 EB 09
jmp short 010600EB 010600E 010600E7 33D2
xor edx,edx 010600E9 8910
mov dword ptr ds:[eax],edx 010600EB A1 242B0601 mov
eax,dword ptr ds:[1062B24] 010600FB 85DB
test ebx,ebx
;非0值导致 010600FD 01060103 8D4424 04
lea eax,dword ptr ss:[esp+4] 01060107 50
push eax 01060108 8D 01060111 8B00
mov eax,dword ptr ds:[eax] 01060113 8BD3
mov edx,ebx 01060115 E8 AA53FFFF call
01060121 E8 6E09FEFF call
01060126 8B15 B82B0601 mov edx,dword ptr
ds:[1062BB8] 0106012E A1 B82B0601 mov
eax,dword ptr ds:[1062BB8] 01060133 8B00
mov eax,dword ptr ds:[eax] 01060135 E8 4621FEFF call
01042280 01060141 8B 01060145 8B1424
mov edx,dword ptr ss:[esp] 01060148 E8 2724FEFF call
01042574 0106014D 01060151 8B15 0106015E E8 1D24FEFF call
01042580 01060163 EB 01060165 68 CC010601 push
10601CC
; ASCII "170" 01060174 8B00
mov eax,dword ptr ds:[eax] 01060176 33D2
xor edx,edx 01060178 E8 0106017D A1 B82B0601 mov
eax,dword ptr ds:[1062BB8] 01060182 8B00
mov eax,dword ptr ds:[eax] 01060184 B1 01
mov cl,1 01060186 33D2
xor edx,edx 01060188 E8 B713FEFF call
01041544
;这里就是调用注册框的位置 0106018D 8B0424
mov eax,dword ptr ss:[esp] ;
G到这里来的,往上翻 调用注册框、过期提示的位置找到了,那么我们接下来就需要找控制这个位置的跳转了,OK,Ctrl
+ F2,直接中断在 010600FB 85DB
test ebx,ebx 010600FD 清0之后,F9运行看看,呵呵 程序界面出来了,没有注册框了!^_^ 需要注意的是上面只需给eax清0,不需要改动代码;如果你想通过改动代码来达到使eax为0,那么之后你必须把代码改回去,否则,程序异常! 接下来你有2种选择:)
1、
手动脱壳 由于手脱的教程甚多,我也不想多说了,但是,这里给大家指个步骤 1)、从上述过程当中,找到了 2)、设置OD除了INT3、指定异常外的所有异常 3)、F9,int3中断下来,找#85特征,按照各位大侠的方法处理好IAT 4)、上面把IAT处理好了,由于硬件断点的缘故,F9会中断在 5)、接下来可以把硬件执行断点删除,按照各位大侠的方法补代码修复变形Call 6)、收工(上面的前4个步骤里 手脱ASProtect是件痛苦而漫长的过程,在此过程中,你会想到Volx大侠的牛B。他给我们带来了福利呀:)
2、
脚本来脱 把volx大侠的脚本稍微做下修改,就可以脱了 载入Packed.Unregistered,使用修改后的脚本很快就到了OEP,强大的脚本此时已经帮你Dump下来了,修复—》同样修复哪个脚本尚未修复的地方—》Over! 说明:文章中附带的脚本只是针对 后记:由于本人没有ASPr的历届版本,如果大家有,可以加一个需要注册的目标程序给我,最好是注明版本,这样我就可以搜集到需要定位的特征码,从而修改一个通用的脚本给大家玩玩:)Email:wynney@126.com,感谢你看完:)
---------By Pass ASProtect.2.3.0626(跳过注册、过期)
作者:wynney
工具:ASProtect.2.3.06.26
Thanks: Volx;winndy
前言:今年是ASProtect的倒霉年,玩它的文章不计其数,用它来保护的软件真是不胜枚举了,更有甚者加成注册,我呢,看见注册框就烦躁,此文是介绍如何去掉注册框、过期提示之后来完成脱壳的。当然,此法对于其他版本通用,大家自己去举一反三吧。在此要感谢Volx为我们提供了无比的便利,他的脚本基本和脱壳机无异!但是,针对2.3.06.26在我这里有点小麻烦。