More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  阿福台PhotosProfileFriendsMore Tools Explore the Spaces community

小狼

View spaceSend a message
Occupation:
Age:
Location:
Interests:
阿福台™ [afutai.com]
  当樱花盛放的时候,漫步在荒凉的古道上,感慨万千,也许是时候决定从此归隐山林,游戏人生...

阿福台

[活着的理由] http://www.youngcore.com | http://www.afutai.com
6/16/2008

人生

想法总是很多,现实总很无奈;只要尽你全力,人生定会精彩。
6/6/2008

Asprotect V2.X 的脱壳与修复的总结及练习

作 者: blackeyes
关于Asprotect V2.X 的脱壳与修复, loveboom的《ASPROTECT 2.x 脱壳系列》已经非常的全面与经典.
本人在此只是依葫芦画瓢, 并将有些地方再详细的解释一下, 给菜鸟们脱Asprotect V2.X时进行参考, 高手就不要看了.
先在理论上研讨一下, 由于编译器的不一样, C 与 Delphi 所编译的汇编结果有差别, Asprotect 加壳时处理的也不一样.
先假设有一程序:
OEP: 00401000
IAT: 00407000 - 00407FFF
在00401100 CALL DLL1.API1
在00401180 CALL DLL1.API2
Ospr 加壳后, 好多的API CALL 被改成 CALL 12000000
然后开始研究.
1. C/C++ Program
1.1) 未被加壳的程序
00401000 55 PUSH EBP ; 程序 OEP
00401001 8BEC MOV EBP, ESP
...
00401100 FF15 00704000 CALL DWORD PTR DS:[00407000] ; DLL1.API1
00401106 ...
00401180 FF15 04704000 CALL DWORD PTR DS:[00407004] ; DLL1.API2
00401186 ...
********* IAT 可能是这样的 ************
00407000 DD 7C571000 // DLL1.API1
00407004 DD 7C572000 // DLL1.API2
...
004070FC DD 00000000
00407100 DD 7D00XXXX // DLL2.API1
...
004071FC DD 00000000
...
00407F00 DD 7F00XXXX // DLLn.API1
...
00407FFC DD 00000000

1.2) 被 Asprotect 加壳后的程序在OEP
00401000 55 PUSH EBP ; 程序 OEP
00401001 8BEC MOV EBP, ESP
...
00401100 E8 FBEEBF11 CALL 12000000 ; 壳
00401105 ??
00401106 ...
00401180 E8 7BEEBF11 CALL 12000000 ; 壳
00401185 ??
00401186 ...
*************IAT************************
00407000 DD ???????? // 被加密的 DLL1.API1 信息
00407004 DD 7C572000 // 未加密的 DLL1.API2
ASPR 将许多的API CALL 都改成了统一的 CALL 12000000
即改 CALL DWORD PTR DS:[xxxxx] 成 CALL 12000000
作 者: blackeyes
关于Asprotect V2.X 的脱壳与修复, loveboom的《ASPROTECT 2.x 脱壳系列》已经非常的全面与经典.
本人在此只是依葫芦画瓢, 并将有些地方再详细的解释一下, 给菜鸟们脱Asprotect V2.X时进行参考, 高手就不要看了.
先在理论上研讨一下, 由于编译器的不一样, C 与 Delphi 所编译的汇编结果有差别, Asprotect 加壳时处理的也不一样.
先假设有一程序:
OEP: 00401000
IAT: 00407000 - 00407FFF
在00401100 CALL DLL1.API1
在00401180 CALL DLL1.API2
Ospr 加壳后, 好多的API CALL 被改成 CALL 12000000
然后开始研究.
1. C/C++ Program
1.1) 未被加壳的程序
00401000 55 PUSH EBP ; 程序 OEP
00401001 8BEC MOV EBP, ESP
...
00401100 FF15 00704000 CALL DWORD PTR DS:[00407000] ; DLL1.API1
00401106 ...
00401180 FF15 04704000 CALL DWORD PTR DS:[00407004] ; DLL1.API2
00401186 ...
********* IAT 可能是这样的 ************
00407000 DD 7C571000 // DLL1.API1
00407004 DD 7C572000 // DLL1.API2
...
004070FC DD 00000000
00407100 DD 7D00XXXX // DLL2.API1
...
004071FC DD 00000000
...
00407F00 DD 7F00XXXX // DLLn.API1
...
00407FFC DD 00000000

1.2) 被 Asprotect 加壳后的程序在OEP
00401000 55 PUSH EBP ; 程序 OEP
00401001 8BEC MOV EBP, ESP
...
00401100 E8 FBEEBF11 CALL 12000000 ; 壳
00401105 ??
00401106 ...
00401180 E8 7BEEBF11 CALL 12000000 ; 壳
00401185 ??
00401186 ...
*************IAT************************
00407000 DD ???????? // 被加密的 DLL1.API1 信息
00407004 DD 7C572000 // 未加密的 DLL1.API2
ASPR 将许多的API CALL 都改成了统一的 CALL 12000000
即改 CALL DWORD PTR DS:[xxxxx] 成 CALL 12000000

[转]手动脱壳ASProtect V2.X Registered

【PYG官方论坛】http://bbs.chinapyg.com
大家有空去看看

================


我是个菜鸟,想跟大家学习点技术。

第一次做动画,有什么错误的地方望高手指正。

今天和大家讨论一下

手动脱壳之ASProtect V2.X Registered -> Alexey Solodovnikov *

//////////////////////////
设置Ollydbg忽略除了“内存访问异常”之外的所有其他异常选项。
用插件去掉Ollydbg的调试器标志。

////////////////////////////////////////
OD载入后停在这里:
00401000 >  68 01B05600     PUSH csetup.0056B001  ===》壳的入口,F9运行
00401005    E8 01000000     CALL csetup.0040100B
0040100A    C3              RETN
0040100B    C3              RETN
0040100C    0D 6F2F026F     OR EAX,6F022F6F
00401011    5B              POP EBX

===============
Shift+F9按N次,注意右下角堆栈
00AFFAFF    C601 9E         MOV BYTE PTR DS:[ECX],9E
00AFFB02    BB 71FE8A67     MOV EBX,678AFE71
00AFFB07    64:8F06         POP DWORD PTR FS:[ESI]
00AFFB0A    0000            ADD BYTE PTR DS:[EAX],AL
00AFFB0C    83C4 04         ADD ESP,4
00AFFB0F    8D0C07          LEA ECX,DWORD PTR DS:[EDI+EAX]
00AFFB12    59              POP ECX

=====================

0012FF50   0012FF5C  指向下一个 SEH 记录的指针
0012FF54   00AFFA50  SE处理程序
0012FF58   00000002
0012FF5C   0012FF80  指向下一个 SEH 记录的指针
0012FF60   00AFFFE8  SE处理程序
0012FF64   0012FF78
0012FF68   00A80000
0012FF6C   00AFF62C
0012FF70   00000000
0012FF74   00B3D84C  ASCII "FECE69A1-E37D"  ====》硬盘特征指纹
0012FF78   0012FF98
0012FF7C   00ADE2D0
0012FF80   0012FFE0  指向下一个 SEH 记录的指针
0012FF84   00AFF854  SE处理程序
0012FF88   0012FF98

Shift+F9经过=23次异常后,堆栈出现硬盘特征指纹
=================
Shift+F9按5次,堆栈硬盘特征指纹消失,再按1次Shift+F9
00AFE8F9    C601 9E         MOV BYTE PTR DS:[ECX],9E
00AFE8FC    BB 71FE8A67     MOV EBX,678AFE71
00AFE901    64:8F06         POP DWORD PTR FS:[ESI]
00AFE904    0000            ADD BYTE PTR DS:[EAX],AL
00AFE906    83C4 04         ADD ESP,4
00AFE909    8D0C07          LEA ECX,DWORD PTR DS:[EDI+EAX]
00AFE90C    59              POP ECX
00AFE90D    A1 4848B000     MOV EAX,DWORD PTR DS:[B04848]
==================
向上找到这里:
00AFE8E3    C3              RETN
00AFE8E4    EB 01           JMP SHORT 00AFE8E7
00AFE8E6    9A C1D19D36 EB0>CALL FAR 01EB:369DD1C1                   ; 远调用
00AFE8ED    9A 83F1102B C96>CALL FAR 64C9:2B10F183                   ; 远调用
00AFE8F4    FF31            PUSH DWORD PTR DS:[ECX]
00AFE8F6    64:8921         MOV DWORD PTR FS:[ECX],ESP
00AFE8F9    C601 9E         MOV BYTE PTR DS:[ECX],9E

在00AFE8E3    C3              RETN按F2下断,Shift+F9断下,取消断点,F8单步

7C9237BF    64:8B25 0000000>MOV ESP,DWORD PTR FS:[0]
7C9237C6    64:8F05 0000000>POP DWORD PTR FS:[0]
7C9237CD    8BE5            MOV ESP,EBP
7C9237CF    5D              POP EBP
7C9237D0    C2 1400         RETN 14

Alt+M查看内存在00401000按F2下断,F9运行
004B02B8    55              PUSH EBP
004B02B9    8BEC            MOV EBP,ESP
004B02BB    83C4 E4         ADD ESP,-1C
004B02BE    53              PUSH EBX
004B02BF    56              PUSH ESI
004B02C0    33C0            XOR EAX,EAX
004B02C2    8945 E4         MOV DWORD PTR SS:[EBP-1C],EAX

004B02B8程序OEP脱壳之。是Borland Delphi 6.0 - 7.0
==================

脱壳之后如何修复请高手指教。

动画下载
http://free.ys168.com/?a3chenming

破解常用断点大全


断点大全

断点大全
密码常用中断
Hmemcpy (win9x专用)
GetDlgItemTextA
GetDlgItemInt
vb:
getvolumeinformationa  

vbastrcomp (trw)
Bpx __vbaStrComp (记得是两个 '_')
MSVBVM60!_vbastrcomp|sofice
MSVBVM50!           | 

VBAI4STR 

Ctrl+D
bpx msvbvm60!__vbastrcomp do "d *(esp+0c)"(softice)
按几次F5出册码出来了。
bpx regqueryvalueexa do “d esp->8”(trw) 

vbaVarTstEq 判断是否注册的函数
(0042932F 66898580FEFFFF          mov word ptr [ebp+FFFFFE80], ax
改为0042932F 66898580FEFFFF       mov word ptr [ebp+FFFFFE80], bx)

时间常用中断
GetSystemTime
GetLocalTime
GetTickCount
vb:
rtcGetPresentDate          //取得当前日期 

杀窗常用中断
Lockmytask (win9x专用)
DestroyWindow
mouse_event (鼠标中断)
postquitmessage (Cracking足彩xp,很有用^_^)
vb:
_rtcMsgBox 

ini文件内容常用中断
GetPrivateProfileStringA
GetPrivateProfileProfileInt 

key文件:
getprivateprofileint
ReadFile
CreateFileA 

注册表常用中断
RegQueryvalueA
RegQueryvalueExA 

狗加密中断
BPIO -h 278 R
BPIO -h 378 R  

其它常用函数断点
CreateFileA (读狗驱动程序),
DeviceIOControl,
FreeEnvironmentStringsA (对付HASP非常有效).
Prestochangoselector (16-bit HASP's), '7242' 查找字符串 (对付圣天诺).具体含义参考下面的范例。 

光盘破解中断
16:
getvolumeinformation
getdrivetype
int 2fh (dos)
32:
GetDriveTypeA  
GetFullPathNameA
GetWindowsDirectoryA 

读磁盘中断
GETLASTERROR 返回扩充出错代码  

限制中断
EnableMenuItem 允许、禁止或变灰指定的菜单条目
EnableWindow 允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰)  

不知道软盘中断是什么了?还有其它特殊中断,不知道其他朋友可否说一下了?
如:Lockmytask and mouse_event,这些就不是api32函数?
win9x 与 win2k进行破解,以上中断有部分已经不能用了?
不知道在win2k上,以上常用中断函数是什么了?
也就是问密码、时间、窗口、ini、key、注册表、加密狗、光盘、软盘、限制等!
了解常用的中断,对破解分析可以做到事半功倍!
请大家说一下!还有如何破解了某个软件时,一重启就打回原形?
不知道下什么中断了?可以分为三种情况:
1.比较可能在注册表中
2.比较在特殊文件(*.key *.ini *.dat等)
3.比较在程序中,没有任何错误提示或者反译也找不到明显字符(这个就是我想问的) 

还有一个是最难的,就是去掉水印!
也可以三种情况:
A.水印是位图文件(bitblt,creatBITMAP等位图函数)
B.水印是明显字符(反译分析)
C.水印不是明显字符(如:This a demo!它只是显示在另一个制作文件上,可是*.htm *.exe等)
C.才是最难搞,也是很多人想知道的!包括我在内。不知道高手们有何提示了? 

广告条:
可以分两种情况:
A.从创建窗口进手,可以用到movewindow或者其它窗口函数!
B.从位图进手,也可以用到bitblt或者其它位图函数!
最后可以借助一些现有工具(如:api27,vwindset,freespy之类的工具) 

葡萄虽无树,藤生棚中秧。
人处凡尘中,岂不惹尘埃? 

小球[CCG]
那要看是在哪作的标记,通常是在注册表中留下信息!
在softice中就要用bpx regqueryvalueexa do "d esp->8"来中断看看,
在trw中要用bpx regqueryvalueexa do "d*(esp+8)"来中断看看。
还有的是在本目录下留下注册信息,常见的有.dat .ini .dll等等,
我是用bpx readfile来中断的,还有的是在windows目录下留下注册信息。
你可以借助专用的工具帮助你查看,入filemon等!  

vb: 

1、__vbaVarTstNe              //比较两个变量是否不相等
2、rtcR8ValFromBstr            //把字符串转换成浮点数
3、rtcMsgBox  显示一信息对话框  
4、rtcBeep                    //让扬声器叫唤
5、rtcGetPresentDate          //取得当前日期  

针对字串:
__vbaStrComp
__vbaStrCmp
__vbaStrCompVar
__vbaStrLike
__vbaStrTextComp
__vbaStrTextLike
针对变量:
__vbaVarCompEq
__vbaVarCompLe
__vbaVarCompLt
__vbaVarCompGe
__vbaVarCompGt
__vbaVarCompNe  

VB的指针:
THROW  

VB DLL还调用了oleauto32.dll中的部分函数。oleauto32.dll是个通用的proxy/stub DLL,其每个函数的原型在<oleauto.h>中定义,并在MSDN中有详细描述。这也有助于理解VB DLL中的函数的作用。  

举例:  

LEA EAX, [EBP-58]
PUSH EAX
CALL [MSVBVM60!__vbaI4Var]  

执行call之前敲dd eax+8,得到的值为3;
执行完call之后,eax = 3
从而可知__vbaI4Var的作用是将一个VARIANT转换为I4(即一个长整数)。 

__vbaVarTstNe似乎是用来进行自校验的,正常情况下返回值为0。
已知适用的软件有:网络三国智能机器人、音乐贺卡厂。当这两个软件被脱壳后都回出错,网络三国智能机器人会产生非法*作,而音乐贺卡厂会告诉你是非法拷贝,通过修改__vbaVarTstNe的返回值都可让它们正常运行。
所以当您遇到一个VB软件,脱壳后无法正常运行,而又找不出其它问题时,可试试拦截这个函数,说不定会有用哦。8-) 

API不太知道,也许可以通过BIOS在98平台上读写扇区,不过在2000/NT下可以通过内黑ATAPI,HAL写扇区
machoman[CCG]
bpx WRITE_PORT_BUFFER_USHORT
NT/2000下这个断点,当edx=1f0h,时,可以看见EDI地址内数据为扇区位置数据,必须先 在winice.dat 中装入hal.sys 详细内容看ATAPI手册  

补充篇:
关于对VB程序和时间限制程序的断点
CrackerABC
先给出修改能正确反编译VB程序的W32DASM的地址:
======================
offsets 0x16B6C-0x16B6D  

修改机器码为: 98 F4
======================  

VB程序的跟踪断点:  

============
MultiByteToWideChar,
rtcR8ValFromBstr,
WideCharToMultiByte,
__vbaStrCmp
__vbaStrComp
__vbaStrCopy
__vbaStrMove
__vbaVarTstNe
rtcBeep
rtcGetPresentDate (时间API)
rtcMsgBox
=========  

时间限制断点:  

================
CompareFileTime
GetLocalTime
GetSystemTime
GetTimeZoneInformation
msvcrt.diffTime()
msvcrt.Time()
================  

一般处理

bpx hmemcpy
bpx MessageBox
bpx MessageBoxExA
bpx MessageBeep
bpx SendMessage 

bpx GetDlgItemText
bpx GetDlgItemInt
bpx GetWindowText
bpx GetWindowWord
bpx GetWindowInt
bpx DialogBoxParamA
bpx CreateWindow
bpx CreateWindowEx
bpx ShowWindow
bpx UpdateWindow 

bmsg xxxx wm_move
bmsg xxxx wm_gettext
bmsg xxxx wm_command
bmsg xxxx wm_activate   

时间相关
bpint 21 if ah==2A (DOS)
bpx GetLocalTime
bpx GetFileTime
bpx GetSystemtime   

CD-ROM 或 磁盘相关
bpint 13 if ah==2 (DOS)
bpint 13 if ah==3 (DOS)
bpint 13 if ah==4 (DOS)
bpx GetFileAttributesA
bpx GetFileSize
bpx GetDriveType
bpx GetLastError
bpx ReadFile
bpio -h (Your CD-ROM Port Address) R   

软件狗相关
bpio -h 278 R
bpio -h 378 R   

键盘输入相关
bpint 16 if ah==0 (DOS)
bpint 21 if ah==0xA (DOS)   

文件访问相关
bpint 21 if ah==3dh (DOS)
bpint 31 if ah==3fh (DOS)
bpint 21 if ah==3dh (DOS)
bpx ReadFile
bpx WriteFile
bpx CreateFile
bpx SetFilePointer
bpx GetSystemDirectory  

INI 初始化文件相关
bpx GetPrivateProfileString
bpx GetPrivateProfileInt
bpx WritePrivateProfileString
bpx WritePrivateProfileInt  

注册表相关
bpx RegCreateKey
bpx RegDeleteKey
bpx RegQueryvalue
bpx RegCloseKey
bpx RegOpenKey  

注册标志相关
bpx cs:eip if EAX==0  

内存标准相关
bpmb cs:eip rw if 0x30:0x45AA==0  

显示相关
bpx 0x30:0x45AA do "d 0x30:0x44BB"
bpx CS:0x66CC do "? EAX"

[转]ASProtect V2.X脱壳+处理附加数据+去自校验~ASProtect V2.X脱壳+处理附加数据+去自校验~

------------------------------------------------------------------
ASProtect V2.X脱壳+处理附加数据+去自校验
作者:Hmily
博客:Http://Blog.52Hmily.Cn
QQ群:39940458
-------------------------------------------------------------------
大家好,我是Hmily,今天给大家带来 Q宠保姆VC版 2.23 SP8版2007.09.13脱壳教程,需要的工具有:
PEiD,OD,Volx大侠ASProtect脚本(http://www.unpack.cn/viewthread.php?tid=9487),ImportREC,Overlay 最终版,Resource Binder......(这些网上都能下到,就不提供了)
这个是我上次脱Q宠保姆VC版 2.23 SP7版 2007.09.06的记录:http://hi.baidu.com/52hmily/blog ... 7a120b28388a04.html
好,开始,先查下壳
普通扫描:ASProtect V2.X Registered -> Alexey Solodovnikov          * Sign.By.fly [Overlay] *注意是有附加数据的
用插件VerA 0.15扫描:Version: ASProtect 2.3 SKE build 06.26 Beta [Extract]

第一步:脱壳
先OD载入吧,运行脚本,就会自动脱壳了,脱完先修复,先查看OD运行记录,再打开ImportREC,然后对照着填OEP地址,点获取输入表,再点修复转存文件。

第二步:处理附加数据
好了,现在来处理附加数据,打开Overlay,点复制Overlay,这样就处理了附加数据

第三步:去自校验
现在还是运行不了,看来是有自校验,我们把脱好的程序再次载入OD,在命令出输入:bp CreateFileA,回车,按F9运行,到这就可以了,下面看清楚,点反汇编窗口中跟随,F2下端,F9运行到这里,取消断点,这里都是系统的领空,我们要到程序的领空去,按F8先跟到程序领空,好,这里已经到系统领空了,下面还是用F8跟,后面慢慢来,大家看好,
004638D8      .    A3 04DB4D00      mov        dword ptr [4DDB04], eax
004638DD      .    E8 61F5FFFF      call      00462E43
004638E2      .    E8 272BFFFF      call      0045640E
004638E7      .    85C0            test      eax, eax
004638E9      .    0F85 15010000 jnz        00463A04    ————跳转没实现
004638EF      .    52              push      edx
004638F0      .    57              push      edi
004638F1      .    C1D2 E7          rcl        edx, 0E7
004638F4      .    83EA 03          sub        edx, 3
004638F7      .    68 28214200      push      00422128
004638FC      .    81D2 EC7E7BD3 adc        edx, D37B7EEC
00463902      .    5A              pop        edx
00463903      .    FF32            push      dword ptr [edx]
00463905      .    335424 08        xor        edx, dword ptr [esp+8]
00463909      .    335424 28        xor        edx, dword ptr [esp+28]
如果这样下去你会发现程序就结束了,说明这里是关键的跳转,我们先看看,继续跟,出错了,好了,现在我们重新载入程序,直接跳到刚才那个地方004638E9,
004638E9      . /0F85 15010000 jnz        00463A04
没实现跳转,我们来让他实现,可以直接把JNZ改成JMP就可以了,保存
好,我们现在再看看能不能运行,晕,刚才突然点错了,我们继续,OK,可以啦,查下壳 VC8 -> Microsoft Corporation [Overlay] *,我们再用Resource Binder给它优化下,重建资源,
程序也会小点,好了,这样教程就结束了。

欢迎大家和我交流技术!

88


教程地址:http://exs.mail.qq.com/cgi-bin/d ... 5281125d325ea32d7ce

提取码:edac828d

Q宠保姆VC版 2.23 SP8版2007.09.13UNPack:http://exs.mail.qq.com/cgi-bin/d ... 4d0ac7ddece7271e0dc

提取码:ae5027bb
View more entries
 
[公益广告]天龙八部是游戏还是印钞机?
汗手汗脚症专题
软件编程开发,木马外挂,技术讲解
No list items have been added yet.