【原创】脱壳+去双自校验+爆破3种方法全过程
【原创】脱壳+去双自校验+爆破3种方法全过程/:014 在看雪上发布过转来这里给和我一样的菜鸟看看!!!应该不算转帖吧
--------------------------------------------------------------------------------
【文章标题】: 原创!!脱壳+去双自校验+爆破3种方法全过程
【文章作者】: b笨小孩b
【作者邮箱】: [email protected]
【作者QQ号】: 122627056
【软件名称】: 多国语言互译专家
【软件大小】: 3.15M
【下载地址】: http://ftp.pconline.com.cn/pub/download/200707/hyfy_PConline.exe
【加壳方式】: ASPack 2.12 -> Alexey Solodovnikov
【保护方式】: ASPack 2.12壳+双自校验
【编写语言】: vb6.0
【使用工具】: od,ImportREC_fix
【操作平台】: winxpsp2
【软件介绍】: 各国语言互译“垃圾软件一个试试就知道了”
【作者声明】: 学习破解接近2个月的处女破献给所有和我一样的菜鸟,激励一下信心同时也是给自己的新年礼物!!同时在此感谢“惜u雪”的大力帮助!!
--------------------------------------------------------------------------------
【详细过程】
爆破语言互译专家全过程:
第一步:脱壳
查壳hyfy.exe为ASPack 2.12 -> Alexey Solodovnikov用四步打法脱壳查找popad四次来到
0042A3A6 59 pop ecx
0042A3A7 0BC9 or ecx, ecx
0042A3A9 8985 A8030000 mov dword ptr , eax
0042A3AF 61 popad 和开始的pushad对应F4运行到此
0042A3B0 75 08 jnz short 0042A3BA
0042A3B2 B8 01000000 mov eax, 1
0042A3B7 C2 0C00 retn 0C
0042A3BA 68 00000000 push 0 两个retn是这个壳的特性
0042A3BF C3 retn 找到他们oep就在这里进入就是!!!
0042A3C0 8B85 26040000 mov eax, dword ptr
00402898 68 54454000 push 00404554 oep了dump 典型的vb程序
0040289D E8 EEFFFFFF call 00402890 jmp 到 msvbvm60.ThunRTMain
004028A2 0000 add byte ptr , al
004028A4 0000 add byte ptr , al
004028A6 0000 add byte ptr , al
004028A8 3000 xor byte ptr , al
004028AA 0000 add byte ptr , al
004028AC 3800 cmp byte ptr , al
004028AE 0000 add byte ptr , al
004028B0 0000 add byte ptr , al
004028B2 0000 add byte ptr , al
004028B4 F5 cmc
004028B5 98 cwde
然后用ImportREC_fix修复删除无效的指针。不修复的话软件不能运行
修复后发现程序不能运行分析原因应该是自校验。
第二步:解除运行自校验
需要用到的函数是vb的退出函数vbaEnd,od插件设置隐藏"这个程序检测调试器"
od载入ctrl+n"在右键---查找---当前模块的名称"中找vb的退出函数__vbEnd右键---在每个参考上设置断点然后F9运行!
运行后断在:
0041314C .50 push eax ; /String8
0041314D .8D4D A4 lea ecx, dword ptr ; |
00413150 .51 push ecx ; |ARG2
00413151 .FF15 58114000 call dword ptr [<&msvbvm60.__vbaStrVa>; \__vbaStrVarVal
00413157 .50 push eax ; /FileName 获取我们修改后的文件名
00413158 .FF15 B4114000 call dword ptr [<&msvbvm60.rtcFileLen>; \rtcFileLen
0041315E .33D2 xor edx, edx
00413160 3D 0A300200 cmp eax, 2300A 比较文件大小大于115k就跳我们脱壳后的文件是192k
"此时eax的值是:196608字节大于143370字节,可以把这个2300A改成32000也就是改成2m大小或是把13181的je改成jnz
0413165 .0F9FC2 setg dl
00413168 .F7DA neg edx
0041316A .66:8995 ACFEF>mov word ptr , dx
00413171 .8D4D A4 lea ecx, dword ptr
00413174 .FF15 34124000 call dword ptr [<&msvbvm60.__vbaFreeS>;msvbvm60.__vbaFreeStr
0041317A .0FBF85 ACFEFF>movsx eax, word ptr
00413181 .85C0 test eax, eax
00413183 .74 12 je short 00413197
00413185 .C745 FC 05000>mov dword ptr , 5
0041318C .FF15 34104000 call dword ptr [<&msvbvm60.__vbaEnd>] ;msvbvm60.__vbaEnd断在这个位置
00413192 .E9 7A5C0000 jmp 00418E11
00413197 >C745 FC 08000>mov dword ptr , 8
0041319E .833D BC684200>cmp dword ptr , 0
004131A5 .75 1C jnz short 004131C3
004131A7 .68 BC684200 push 004268BC
004131AC .68 9C794000 push 0040799C
004131B1 .FF15 7C114000 call dword ptr [<&msvbvm60.__vbaNew2>>;msvbvm60.__vbaNew2
好了修改保存再次运行我们修改后的程序"嘿嘿成功运行了"
第三步:解除注册自校验
可以运行了那就注册试试吧我想大家也等布及来爆破它了吧,运行后注册....???怎么出错了莫非这是传说中的注册自校验?有校验我就给你解了它
好了od载入运行"注意隐藏od哦这个软件检测调试器的"和上次校验一样只不过有个出错提示"嘿嘿,知道下什么断点了吧,对了还是vbaEnd断点"
运行后删除以前的断点,然后再ctrl+n"在右键---查找---当前模块的名称"中找vb的退出函数__vbEnd右键---在每个参考上设置断点然后F9运行!"
点注册,嘿嘿断下来了:
00421F69 .51 push ecx
00421F6A .FF15 D8104000 call dword ptr [<&msvbvm60.rtcKillFil>;msvbvm60.rtcKillFiles
00421F70 .C745 FC 06000>mov dword ptr , 6
00421F77 .8B55 DC mov edx, dword ptr
00421F7A .52 push edx ; /FileName 取我们修改后的文件名
00421F7B .FF15 B4114000 call dword ptr [<&msvbvm60.rtcFileLen>; \rtcFileLen
00421F81 3D 92430200 cmp eax, 24392 又是比较大小
00421F86 .7E 0D jle short 00421F95 小于等于就跳,这里是不会跳的嘿嘿大小不一样我们在这里改成jge或是改上面24392改成32000
00421F88 .C745 FC 07000>mov dword ptr , 7
00421F8F .FF15 34104000 call dword ptr [<&msvbvm60.__vbaEnd>] ;msvbvm60.__vbaEnd 停在这个位置"嘿嘿看看上面发现了什么!!!"
00421F95 >C745 F0 00000>mov dword ptr , 0
00421F9C .68 13204200 push 00422013
00421FA1 .EB 66 jmp short 00422009
00421FA3 .8D45 D0 lea eax, dword ptr
00421FA6 .50 push eax
00421FA7 .8D4D D4 lea ecx, dword ptr
00421FAA .51 push ecx
00421FAB .8D55 D8 lea edx, dword ptr
00421FAE .52 push edx
00421FAF .6A 03 push 3
00421FB1 .FF15 A0114000 call dword ptr [<&msvbvm60.__vbaFreeS>;msvbvm60.__vbaFreeStrList
00421FB7 .83C4 10 add esp, 10
00421FBA .8D45 C4 lea eax, dword ptr
至此所有的自校验修改完成。下一步爆破"嘿嘿,最终目的”
第四步:破解使用次数限制
原来我们拿到的这个软件有30次的使用限制"嘿嘿要是好用的话使用次数不多啊!怎么办呢???让它变成无数次好不好,呵呵动手"
首先说下使用限制的次数一般情况下,除了注册表中存放,就是WINDOWS/SYSTEM32目录下,再就是自身安装文件目录下创建DAT文件或者INI配置文件中,然后重启的时候再取出来
比较下看你用了多少次,如果次数够了呢就不让你运行了!我们这个软件是通过注册表来比较的!!"呵呵怎么知道的呢,自己摸索下吧。先告诉大家一些常用的断点都是重启验证的哦!
访问注册表类常用API:
RegOpenKeyA //打开一个现有的注册表项。
RegOpenKeyExA //打开一个现有的注册表项。
RegCreateKeyA //在指定的项下创建或打开一个项。
RegCreateKeyExA //在指定的项下创建新项的更复杂的方式。
RegDeleteKeyA //删除现有项下一个指定的子项。
RegDeleteValueA //删除指定项下的一个值。
RegQueryValueA //获取一个项的设置值。
RegQueryValueExA //获取一个项的设置值。
RegSetValueA //设置指定项或子项的值。
RegSetValueExA //设置指定项的值。
RegCloseKey //关闭系统注册表中的一个项。
访问文件类常用API:
CreateFileA //打开和创建文件、管道、通信服务、设备以及控制台。
OpenFile //它可以执行大量不同的文件操作。
ReadFile //从文件中读出数据。
ReadFileEx //与ReadFile相似,只是他只能用于异步读操作,并包含了一个完整的回调。
INI初始化文件相关API:
GetPrivateProfileString //得到INI文件的配置信息。
GetPrivateProfileInt //为初始化文件中指定的条目获得一个整数值。
WritePrivateProfilestring //将一个KEY值写入INI文件的指定Section中。
我们这个软件在启动的时候出来一个提示对话框提示你使用了多少次还剩下多少次,我就是利用这点破它的,思路是这样的它如果要告诉你用了多少次还剩下多少次必须先做个比较我们就抓提示框,看我具体操作啊:
首先od载入运行"注意隐藏od哦这个软件检测调试器的,点F9运行等出现提示框时点F12暂停暂停后稍微等od停下后再点查看调用堆栈ALT+K,然后我们看到下面:
调用堆栈: 主线程
地址 堆栈 函数过程 / 参数 调用来自 结构
0012C6F0 7C92DC61 包含ntdll.KiFastSystemCallRet ntdll.7C92DC5F 0012C7E4
0012C6F4 7C93C3DA ntdll.ZwMapViewOfSection ntdll.7C93C3D5 0012C7E4
0012C7E8 7C936071 ? ntdll.7C93C53F ntdll.7C93606C 0012C7E4
0012CAA8 7C9362DA ? ntdll.7C936329 ntdll.7C9362D5 0012CAA4
0012CD50 7C801BB9 ? <jmp.&ntdll.LdrLoadDll> kernel32.7C801BB4 0012CD4C 这个就是调用提示框的地址双击进入然后停在:{1}这个位置:
“有用的代码太多不全贴出来了”
00417E89 .FF15 94114000 call dword ptr [<&msvbvm60.__vbaStrCo>;msvbvm60.__vbaStrCopy
00417E8F .C745 FC 82000>mov dword ptr , 82
00417E96 .8D4D C0 lea ecx, dword ptr
00417E99 .898D F8FEFFFF mov dword ptr , ecx
00417E9F .C785 F0FEFFFF>mov dword ptr , 4008
00417EA9 .BA A0884000 mov edx, 004088A0 ;UNICODE "jiv1" jiv1这个字符串压入edx
00417EAE .8D4D A0 lea ecx, dword ptr 将堆栈地址0012FAD4装入ecx
00417EB1 .FF15 94114000 call dword ptr [<&msvbvm60.__vbaStrCo>;msvbvm60.__vbaStrCopy
00417EB7 .BA A48F4000 mov edx, 00408FA4 ;UNICODE "Software\Microsoft\QQPP" 将Software\Microsoft\QQPP这个注册表的项传送到edx“注册表项出来了”
00417EBC .8D4D A4 lea ecx, dword ptr
00417EBF .FF15 94114000 call dword ptr [<&msvbvm60.__vbaStrCo>;msvbvm60.__vbaStrCopy
00417EC5 .C785 B8FEFFFF>mov dword ptr , 80000002
00417ECF .8D95 F0FEFFFF lea edx, dword ptr
00417ED5 .52 push edx
00417ED6 .8D45 A0 lea eax, dword ptr
00417ED9 .50 push eax
00417EDA .8D4D A4 lea ecx, dword ptr
00417EDD .51 push ecx
00417EDE .8D95 B8FEFFFF lea edx, dword ptr
00417EE4 .52 push edx
00417EE5 .E8 66BC0000 call 00423B50
00417EEA .8D45 A0 lea eax, dword ptr
00417EED .50 push eax
00417EEE .8D4D A4 lea ecx, dword ptr
00417EF1 .51 push ecx
00417EF2 .6A 02 push 2
00417EF4 .FF15 A0114000 call dword ptr [<&msvbvm60.__vbaFreeS>;msvbvm60.__vbaFreeStrList
00417EFA .83C4 0C add esp, 0C
00417EFD .C745 FC 83000>mov dword ptr , 83
00417F04 .8B55 C0 mov edx, dword ptr
00417F07 .52 push edx
00417F08 .FF15 40124000 call dword ptr [<&msvbvm60.rtcR8ValFr>;msvbvm60.rtcR8ValFromBstr
00417F0E .FF15 F0114000 call dword ptr [<&msvbvm60.__vbaFpI4>>;msvbvm60.__vbaFpI4
00417F14 .8B4D 08 mov ecx, dword ptr
00417F17 .8941 58 mov dword ptr , eax
00417F1A .C745 FC 84000>mov dword ptr , 84
00417F21 .8B55 C0 mov edx, dword ptr
00417F24 .52 push edx
00417F25 .FF15 80114000 call dword ptr [<&msvbvm60.__vbaR8Str>;msvbvm60.__vbaR8Str
00417F2B .DC1D F01A4000 fcomp qword ptr
00417F31 .DFE0 fstsw ax
00417F33 .F6C4 41 test ah, 41 比较ah的值与41比较“这个41和ah是经过运算的出来的所以不是30
00417F36 .0F84 36020000 je 00418172 ; 如果使用次数等于30次就跳到使用到期对话框同时要求注册!我们可以改成nop掉{2}
00417F3C .C745 FC 85000>mov dword ptr , 85
00417F43 .8B45 08 mov eax, dword ptr
00417F46 .8B48 58 mov ecx, dword ptr
00417F49 .83C1 01 add ecx, 1 在我们上次使用的次数基础上加上1
00417F4C 0F80 BC0F0000 jo 00418F0E ; 修改这里为jmp可以让我们的使用次数永远为0 {3}
00417F52 .FF15 E0104000 call dword ptr [<&msvbvm60.__vbaI2I4>>;msvbvm60.__vbaI2I4
00417F58 .8B4D 08 mov ecx, dword ptr
00417F5B .66:8941 5C mov word ptr , ax
00417F5F .C745 FC 86000>mov dword ptr , 86
00417F66 .8B55 08 mov edx, dword ptr
00417F69 .83C2 5C add edx, 5C
00417F6C .8995 F8FEFFFF mov dword ptr , edx
00417F72 .C785 F0FEFFFF>mov dword ptr , 4002
00417F7C .8D85 F0FEFFFF lea eax, dword ptr
00417F82 .50 push eax
00417F83 .8D8D 70FFFFFF lea ecx, dword ptr
00417F89 .51 push ecx
00417F8A .FF15 E4114000 call dword ptr [<&msvbvm60.rtcVarStrF>;msvbvm60.rtcVarStrFromVar
00417F90 .8D95 70FFFFFF lea edx, dword ptr
00417F96 .52 push edx
00417F97 .8D85 60FFFFFF lea eax, dword ptr
00417F9D .50 push eax
00417F9E .FF15 A4104000 call dword ptr [<&msvbvm60.rtcTrimVar>;msvbvm60.rtcTrimVar
00417FA4 .8D8D 60FFFFFF lea ecx, dword ptr
00417FAA .51 push ecx
00417FAB .FF15 24104000 call dword ptr [<&msvbvm60.__vbaStrVa>;msvbvm60.__vbaStrVarMove
00417FB1 .8BD0 mov edx, eax
00417FB3 .8D4D 9C lea ecx, dword ptr
00417FB6 .FF15 08124000 call dword ptr [<&msvbvm60.__vbaStrMo>;msvbvm60.__vbaStrMove
00417FBC .BA A0884000 mov edx, 004088A0 ;UNICODE "jiv1"
00417FC1 .8D4D A0 lea ecx, dword ptr
00417FC4 .FF15 94114000 call dword ptr [<&msvbvm60.__vbaStrCo>;msvbvm60.__vbaStrCopy
00417FCA .BA 948D4000 mov edx, 00408D94 ;UNICODE "HKEY_LOCAL_MACHINE\Software\Microsoft\QQPP"
00417FCF .8D4D A4 lea ecx, dword ptr
00417FD2 .FF15 94114000 call dword ptr [<&msvbvm60.__vbaStrCo>;msvbvm60.__vbaStrCopy
00417FD8 .8D55 9C lea edx, dword ptr
00417FDB .52 push edx
00417FDC .8D45 A0 lea eax, dword ptr
00417FDF .50 push eax
00417FE0 .8D4D A4 lea ecx, dword ptr
00417FE3 .51 push ecx
00417FE4 .8D95 50FFFFFF lea edx, dword ptr
00417FEA .52 push edx
00417FEB .E8 00C70000 call 004246F0
00417FF0 .8D45 9C lea eax, dword ptr
00417FF3 .50 push eax
00417FF4 .8D4D A0 lea ecx, dword ptr
00417FF7 .51 push ecx
00417FF8 .8D55 A4 lea edx, dword ptr
00417FFB .52 push edx
00417FFC .6A 03 push 3
00417FFE .FF15 A0114000 call dword ptr [<&msvbvm60.__vbaFreeS>;msvbvm60.__vbaFreeStrList
00418004 .83C4 10 add esp, 10
00418007 .8D85 50FFFFFF lea eax, dword ptr
0041800D .50 push eax
0041800E .8D8D 60FFFFFF lea ecx, dword ptr
00418014 .51 push ecx
00418015 .8D95 70FFFFFF lea edx, dword ptr
0041801B .52 push edx
0041801C .6A 03 push 3
0041801E .FF15 30104000 call dword ptr [<&msvbvm60.__vbaFreeV>;msvbvm60.__vbaFreeVarList
00418024 .83C4 10 add esp, 10
00418027 .C745 FC 87000>mov dword ptr , 87
0041802E .C785 48FFFFFF>mov dword ptr , 80020004
00418038 .C785 40FFFFFF>mov dword ptr , 0A
00418042 .C785 58FFFFFF>mov dword ptr , 80020004
0041804C .C785 50FFFFFF>mov dword ptr , 0A
00418056 .C785 68FFFFFF>mov dword ptr , 80020004
00418060 .C785 60FFFFFF>mov dword ptr , 0A
0041806A .68 DC8F4000 push 00408FDC
0041806F .8B45 08 mov eax, dword ptr
00418072 .66:8B48 5C mov cx, word ptr
00418076 .51 push ecx
00418077 .FF15 08104000 call dword ptr [<&msvbvm60.__vbaStrI2>;msvbvm60.__vbaStrI2
0041807D .8BD0 mov edx, eax
0041807F .8D4D A4 lea ecx, dword ptr
00418082 .FF15 08124000 call dword ptr [<&msvbvm60.__vbaStrMo>;msvbvm60.__vbaStrMove
00418088 .50 push eax ; /String
00418089 .FF15 5C104000 call dword ptr [<&msvbvm60.__vbaStrCa>; \__vbaStrCat
0041808F .8BD0 mov edx, eax
00418091 .8D4D A0 lea ecx, dword ptr
00418094 .FF15 08124000 call dword ptr [<&msvbvm60.__vbaStrMo>;msvbvm60.__vbaStrMove
0041809A .50 push eax
0041809B .68 04904000 push 00409004 ; /String = "!k",0C,"",FF,"貜iRYO"
004180A0 .FF15 5C104000 call dword ptr [<&msvbvm60.__vbaStrCa>; \__vbaStrCat
004180A6 .8BD0 mov edx, eax
004180A8 .8D4D 9C lea ecx, dword ptr
004180AB .FF15 08124000 call dword ptr [<&msvbvm60.__vbaStrMo>;msvbvm60.__vbaStrMove
004180B1 .50 push eax
004180B2 .8B55 08 mov edx, dword ptr
004180B5 .66:B8 1E00 mov ax, 1E
004180B9 .66:2B42 5C sub ax, word ptr
004180BD .0F80 4B0E0000 jo 00418F0E 修改这里为jmp可以跳过烦人的使用次数对话框 {4}
004180C3 .50 push eax
004180C4 .FF15 08104000 call dword ptr [<&msvbvm60.__vbaStrI2>;msvbvm60.__vbaStrI2
004180CA .8BD0 mov edx, eax
004180CC .8D4D 98 lea ecx, dword ptr
004180CF .FF15 08124000 call dword ptr [<&msvbvm60.__vbaStrMo>;msvbvm60.__vbaStrMove
004180D5 .50 push eax ; /String
004180D6 .FF15 5C104000 call dword ptr [<&msvbvm60.__vbaStrCa>; \__vbaStrCat
004180DC .8BD0 mov edx, eax
004180DE .8D4D 94 lea ecx, dword ptr
004180E1 .FF15 08124000 call dword ptr [<&msvbvm60.__vbaStrMo>;msvbvm60.__vbaStrMove
004180E7 .50 push eax
004180E8 .68 14904000 push 00409014 ; /String = "!k",01,"",FF,""
004180ED .FF15 5C104000 call dword ptr [<&msvbvm60.__vbaStrCa>; \__vbaStrCat
004180F3 .8985 78FFFFFF mov dword ptr , eax
004180F9 .C785 70FFFFFF>mov dword ptr , 8
00418103 .8D8D 40FFFFFF lea ecx, dword ptr
00418109 .51 push ecx
0041810A .8D95 50FFFFFF lea edx, dword ptr
00418110 .52 push edx
00418111 .8D85 60FFFFFF lea eax, dword ptr
00418117 .50 push eax
00418118 .6A 40 push 40
0041811A .8D8D 70FFFFFF lea ecx, dword ptr
00418120 .51 push ecx
00418121 .FF15 94104000 call dword ptr [<&msvbvm60.rtcMsgBox>>;msvbvm60.rtcMsgBox {1}原始位置停在这里“呼叫提示框”
00418127 .8D55 94 lea edx, dword ptr
0041812A .52 push edx
0041812B .8D45 98 lea eax, dword ptr
0041812E .50 push eax
好了我们通过上面的代码可以看出怎么爆破了吧!
在上面这段代码中我们可以修改{2}{4}或是{3}这两段代码来爆破成使用无数次效果是一样的都不出现提示框“嘿嘿如果你想看那个对话框的话就不要改{4}了,不过很烦人的哦”虽然注册不成功但是无数次使用
功能不减少那是什么???“相当与注册了吧 ^_^ ”
最后的方法:爆破破注册
顺着代码往上找来到这里:
00417CFF .50 push eax
00417D00 .6A 02 push 2
00417D02 .FF15 A0114000 call dword ptr [<&msvbvm60.__vbaFreeStrLis>;msvbvm60.__vbaFreeStrList
00417D08 .83C4 0C add esp, 0C
00417D0B .C745 FC 7D000>mov dword ptr , 7D
00417D12 .8B4D C0 mov ecx, dword ptr
00417D15 .51 push ecx
00417D16 .68 288C4000 push 00408C28
00417D1B .FF15 D0104000 call dword ptr [<&msvbvm60.__vbaStrCmp>] ;msvbvm60.__vbaStrCmp
00417D21 .85C0 test eax, eax
00417D23 0F85 51010000 jnz 00417E7A 修改这里jnz为je即可注册用户名序列号随便
00417D29 .C745 FC 7E000>mov dword ptr , 7E
00417D30 .8B55 08 mov edx, dword ptr
00417D33 .8B02 mov eax, dword ptr
00417D35 .8B4D 08 mov ecx, dword ptr
00417D38 .51 push ecx
00417D39 .FF90 2C030000 call dword ptr
00417D3F .50 push eax
00417D40 .8D55 90 lea edx, dword ptr
00417D43 .52 push edx
00417D44 .FF15 90104000 call dword ptr [<&msvbvm60.__vbaObjSet>] ;msvbvm60.__vbaObjSet
00417D4A .8985 ACFEFFFF mov dword ptr , eax
00417D50 .68 187D4000 push 00407D18 ;UNICODE "89"
为什么自己慢慢分析吧!嘿嘿!
注册信息和使用次数在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\QQPP”下
--------------------------------------------------------------------------------
【经验总结】
1: 对付一般ASPack壳的快速方法可以用我所称的四步法试试查找popad4次
retn 0C
push 0 两个retn是这个壳的特性
retn
出现这三句的时候一般就oep就出来了!
2: 破解自校验时注意出来的提示对症下断点
3:破解使用次数时可以用上面的暂停法试试,说不定比你下端点还快.
后话:
学习破解真的是件很枯燥的事情尤其是对于我这种初中毕业生来说,汇编是个门槛,工具的使用也是个门槛,英语还是个门槛,但是我相信只要努力没有办不到的事情!
希望大家多多的帮助!希望菜鸟们早些变成老鸟!谢谢帮助我的朋友!
座右铭:有思路就有出路,思路决定出路!
最后祝福大家新年快乐!在新的一年有个好的开始!!!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年02月06日 16:49:11 这次抢到自己的沙发了!!/:001 /:001 哈 支持楼主~
教程写得很好~~
很详细~~ 收藏。
一宿了,收藏了不少的咚咚。等以后慢慢消化 我后面破解的还没有看懂。。。 很不错的分析,足足看了我十多分钟,学习了. 很详细的破文.. 呵呵.看看.../:010 /:010 思路清晰.写得详细,学习一下~~ 谢谢!收藏!
页:
[1]
2