题目:注册“护花使者V2.0” FOR 菜鸟
软件简介:功能想必大家都知道了!为了孩子创造一个良好的上网环境,软件设置对各种垃圾的屏蔽,并记录最近浏览的内容供家长查阅。试用了一下还觉得不错。保护祖国的花朵,使孩子远离网上的各种垃圾信息,是每个人的责任!
破解目的:分析注册码算法
工具:Softice,OD,Casper,PEID
声明:由于本人目前没有条件获得比较新的软件来练手,所以,净搞了些以前的老软件来练手,希望大家谅解。不要取笑于俺!我也没有办法!:)
引子:今天抽空又安装实验了这个“护花使者”软件,这个软件短小精悍,脱壳后才800KB。PEID查看一下,这个软件用Aspack1.07b加壳,用Casper脱壳成功。下面的代码是用OD打开后拷贝下来的。运行这个软件,该软件帮助说没有注册的话监护人无法设置密码,岂不是开玩笑?我们现在就注册了它。启动程序,弹出注册界面,输入用户名wanggang,输入注册码654321。调出SOFTICE(怎么又是SOFTICE??我现在只对这个比较上手点。)设置断点bpx hmemcpy ,F5退出,然后点击“确定”按钮,被拦截。然后按7次F12来到主程序空间。然后按F10跟踪到如下代码处:
00492F2A |. E8 B5BEF9FF CALL IFLOWER1.0042EDE4
00492F2F |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] //我们返回到这里。EAX保存假码的地址。
00492F32 |. 50 PUSH EAX ; IFLOWER1.<ModuleEntryPoint>
00492F33 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00492F36 |. E8 8523FCFF CALL IFLOWER1.004552C0 //这个函数是关键目标。--------(*)
00492F3B |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; KERNEL32.BFF79138
00492F3E |. 58 POP EAX ; KERNEL32.BFF8B86C
00492F3F |. E8 1810F7FF CALL IFLOWER1.00403F5C //比较真假码的函数。
00492F44 |. 75 05 JNZ SHORT IFLOWER1.00492F4B //如果不相等则OVER。
==================================================================
下面我们跟入(*)处的函数看看到底有什么好玩的地方。
004552C0 /$ 55 PUSH EBP
004552C1 |. 8BEC MOV EBP,ESP
004552C3 |. 81C4 F4FDFFFF ADD ESP,-20C
004552C9 |. 53 PUSH EBX
004552CA |. 56 PUSH ESI
004552CB |. 57 PUSH EDI
004552CC |. 8BF8 MOV EDI,EAX
004552CE |. C745 FC D20400>MOV DWORD PTR SS:[EBP-4],4D2
004552D5 |. 68 FF000000 PUSH 0FF
004552DA |. 8D85 F4FDFFFF LEA EAX,DWORD PTR SS:[EBP-20C]
004552E0 |. 50 PUSH EAX
004552E1 |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
004552E4 |. 50 PUSH EAX
004552E5 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
004552E8 |. 50 PUSH EAX
004552E9 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
004552EC |. 50 PUSH EAX
004552ED |. 68 FF000000 PUSH 0FF
004552F2 |. 8D85 F4FEFFFF LEA EAX,DWORD PTR SS:[EBP-10C]
004552F8 |. 50 PUSH EAX
004552F9 |. 68 4C534500 PUSH IFLOWER1.0045534C
004552FE |. E8 F917FBFF CALL <JMP.&kernel32.GetVolumeInformation> //这个函数取硬盘系列号。
00455303 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] //系列号保存到EAX内。我的硬盘号为844DBF96.
00455306 |. 05 E1100000 ADD EAX,10E1 //硬盘号加10E1h。
0045530B |. 6BC0 0D IMUL EAX,EAX,0D //EAX乘以0Dh。
0045530E |. B9 07000000 MOV ECX,7
00455313 |. 33D2 XOR EDX,EDX
00455315 |. F7F1 DIV ECX //EAX除以ECX内的7。
00455317 |. 8BD8 MOV EBX,EAX //商送EBX保存。
00455319 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] //硬盘号送EAX。
0045531C |. 2D D2040000 SUB EAX,4D2 //硬盘号减去4D2h。即10进制的1234。
00455321 |. 8BD0 MOV EDX,EAX //结果送EDX保存。
00455323 |. C1E0 03 SHL EAX,3 //EAX值左移3次,相当于乘以8。
00455326 |. 2BC2 SUB EAX,EDX //移位后的EAX减去EDX。
00455328 |. B9 0D000000 MOV ECX,0D //ECX=Dh。
0045532D |. 33D2 XOR EDX,EDX
0045532F |. F7F1 DIV ECX //EAX除以ECX。
00455331 |. 8BF0 MOV ESI,EAX //EAX送ESI保存。
00455333 |. 8BCF MOV ECX,EDI
00455335 |. 8D141E LEA EDX,DWORD PTR DS:[ESI+EBX]//EDX=ESI+EBX。ESI为前面除以D的商,EBX为前面除以7 的商。
00455338 |. B8 58534500 MOV EAX,IFLOWER1.00455358
0045533D |. E8 9E060000 CALL IFLOWER1.004559E0 //这个函数里面精彩太多。(**)
00455342 |. 5F POP EDI
00455343 |. 5E POP ESI
00455344 |. 5B POP EBX
00455345 |. 8BE5 MOV ESP,EBP
00455347 |. 5D POP EBP
00455348 \. C3 RETN
=================================================================
下面分析(**)函数,代码如下:
004559E0 /$ 55 PUSH EBP
004559E1 |. 8BEC MOV EBP,ESP
004559E3 |. 83C4 C8 ADD ESP,-38
004559E6 |. 53 PUSH EBX
004559E7 |. 33DB XOR EBX,EBX
004559E9 |. 895D C8 MOV DWORD PTR SS:[EBP-38],EBX
004559EC |. 895D EC MOV DWORD PTR SS:[EBP-14],EBX
004559EF |. 894D F4 MOV DWORD PTR SS:[EBP-C],ECX
004559F2 |. 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX
004559F5 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
004559F8 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004559FB |. E8 00E6FAFF CALL IFLOWER1.00404000 //EDX清零。
00455A00 |. 33C0 XOR EAX,EAX
00455A02 |. 55 PUSH EBP
00455A03 |. 68 F95A4500 PUSH IFLOWER1.00455AF9
00455A08 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
00455A0B |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
00455A0E |. 33C0 XOR EAX,EAX
00455A10 |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
00455A13 |. 33DB XOR EBX,EBX
00455A15 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00455A18 |. E8 2FE4FAFF CALL IFLOWER1.00403E4C //取字符串“hazz”的长度。
00455A1D |. 85C0 TEST EAX,EAX
00455A1F |. 7E 13 JLE SHORT IFLOWER1.00455A34
00455A21 |. BA 01000000 MOV EDX,1
00455A26 |> 8B4D FC /MOV ECX,DWORD PTR SS:[EBP-4]
00455A29 |. 0FB64C11 FF |MOVZX ECX,BYTE PTR DS:[ECX+EDX-1] //依次把字符串"hazz"每个字符送ECX。
00455A2E |. 03D9 |ADD EBX,ECX //ECX值累加到EBX内。
00455A30 |. 42 |INC EDX
00455A31 |. 48 |DEC EAX
00455A32 |.^75 F2 \JNZ SHORT IFLOWER1.00455A26 //未完继续循环累加。得累加结果为1BDh。
00455A34 |> 035D F8 ADD EBX,DWORD PTR SS:[EBP-8] //EBX=EBX+[EBP-8]=刚才的1BD+"004559F2"指令处的EDX。
00455A37 |. 6BC3 0D IMUL EAX,EBX,0D //EAX=EBX*D。
00455A3A |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX //EAX替换掉以前的旧值。
00455A3D |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
00455A40 |. BA 105B4500 MOV EDX,IFLOWER1.00455B10
00455A45 |. E8 1AE2FAFF CALL IFLOWER1.00403C64
00455A4A |. 33D2 XOR EDX,EDX
00455A4C |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34] //计算机名地址送EAX。
00455A4F |> 8B4D EC /MOV ECX,DWORD PTR SS:[EBP-14] //取字符串"delphi"的地址送ECX。下面循环累加其ASSIC码值。
00455A52 |. 0FB60C11 |MOVZX ECX,BYTE PTR DS:[ECX+EDX] //各字符零扩展后,依次送ECX。
00455A56 |. 8908 |MOV DWORD PTR DS:[EAX],ECX //这个结果替换原来的计算机名内容。
00455A58 |. 42 |INC EDX
00455A59 |. 83C0 04 |ADD EAX,4
00455A5C |. 83FA 06 |CMP EDX,6 //总共6个字符,需要6次循环。
00455A5F |.^75 EE \JNZ SHORT IFLOWER1.00455A4F //未完继续。
00455A61 |. C745 E8 080000>MOV DWORD PTR SS:[EBP-18],8
下面是计算注册码的比较麻烦的循环体,我只列出第一次循环时的结果,第二次循环是用第一次循环的结果继续运算,叫迭代算法。
00455A68 |> 8B45 DC /MOV EAX,DWORD PTR SS:[EBP-24] //字符'h'的ASSIC值送EAX。
00455A6B |. 2B45 E0 |SUB EAX,DWORD PTR SS:[EBP-20] //减去字符'i'的ASSIC值,结果-1,送EAX。
00455A6E |. 99 |CDQ //符号扩展。
00455A6F |. 33C2 |XOR EAX,EDX
00455A71 |. 2BC2 |SUB EAX,EDX //EAX结果为1。
00455A73 |. 8B4D CC |MOV ECX,DWORD PTR SS:[EBP-34] //字符'd'的ASSIC值送ECX。
00455A76 |. 034D D0 |ADD ECX,DWORD PTR SS:[EBP-30] //与字符'e'ASSIC值累加,即C9。
00455A79 |. 8B55 D4 |MOV EDX,DWORD PTR SS:[EBP-2C] //字符'l'的ASSIC值送EDX。
00455A7C |. 3355 D8 |XOR EDX,DWORD PTR SS:[EBP-28] //与字符'p'异或,即1C。
00455A7F |. 03CA |ADD ECX,EDX //ECX与EDX累加,即ECX=C9+1C=E5。
00455A81 |. 2BC8 |SUB ECX,EAX //ECX与EAX相减,即ECX=E5-1=E4。
00455A83 |. 894D E4 |MOV DWORD PTR SS:[EBP-1C],ECX //ECX送:[EBP-1C]保存。
00455A86 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8] //计算得到的硬盘码F3BFFF68送EAX。
00455A89 |. 33C1 |XOR EAX,ECX //EAX与ECX异或,即F3BFFF68 XOR E4=F3BFFF8C。
00455A8B |. 0145 F0 |ADD DWORD PTR SS:[EBP-10],EAX //EAX累加到:[EBP-10]
00455A8E |. 0FAF4D F0 |IMUL ECX,DWORD PTR SS:[EBP-10] //ECX=ECX*EAX=E4*F3BFFF8C=16FF98B0
00455A92 |. 894D E4 |MOV DWORD PTR SS:[EBP-1C],ECX
00455A95 |. BA 06000000 |MOV EDX,6
00455A9A |. 8D45 D0 |LEA EAX,DWORD PTR SS:[EBP-30] //EAX为字符串"delphi"中'e'的地址。
00455A9D |> 8B08 |/MOV ECX,DWORD PTR DS:[EAX] //字符'e' 送ECX。
00455A9F |. 8948 FC ||MOV DWORD PTR DS:[EAX-4],ECX //ECX覆盖掉前面的字符'd'。
00455AA2 |. 83C0 04 ||ADD EAX,4
00455AA5 |. 4A ||DEC EDX //计数器减一。
00455AA6 |.^75 F5 |\JNZ SHORT IFLOWER1.00455A9D //未完继续循环移动。
00455AA8 |. FF4D E8 |DEC DWORD PTR SS:[EBP-18] //大循环共8次,这里为计数器减一。
00455AAB |.^75 BB \JNZ SHORT IFLOWER1.00455A68 //不为0则继续循环上去。
00455AAD |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
00455AB0 |. 50 PUSH EAX
00455AB1 |. 8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
00455AB4 |. BA 08000000 MOV EDX,8
00455AB9 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00455ABC |. E8 972EFBFF CALL IFLOWER1.00408958 //这个函数就是处理得到的注册码了。我们下面看看。
00455AC1 |. 8B45 C8 MOV EAX,DWORD PTR SS:[EBP-38]
00455AC4 |. B9 08000000 MOV ECX,8
00455AC9 |. BA 01000000 MOV EDX,1
00455ACE |. E8 81E5FAFF CALL IFLOWER1.00404054
00455AD3 |. 33C0 XOR EAX,EAX
00455AD5 |. 5A POP EDX
00455AD6 |. 59 POP ECX
00455AD7 |. 59 POP ECX
00455AD8 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
00455ADB |. 68 005B4500 PUSH IFLOWER1.00455B00
00455AE0 |> 8D45 C8 LEA EAX,DWORD PTR SS:[EBP-38]
00455AE3 |. E8 E4E0FAFF CALL IFLOWER1.00403BCC
00455AE8 |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
00455AEB |. E8 DCE0FAFF CALL IFLOWER1.00403BCC
00455AF0 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00455AF3 |. E8 D4E0FAFF CALL IFLOWER1.00403BCC
00455AF8 \. C3 RETN
00455AF9 .^E9 A6DAFAFF JMP IFLOWER1.004035A4
00455AFE .^EB E0 JMP SHORT IFLOWER1.00455AE0
00455B00 . 5B POP EBX
00455B01 . 8BE5 MOV ESP,EBP
00455B03 . 5D POP EBP
00455B04 . C3 RETN
=================================================================
下面是00455ABC 处的函数 CALL IFLOWER1.00408958 :
00408958 /$ 83C4 F0 ADD ESP,-10
0040895B |. 6A 01 PUSH 1
0040895D |. 895424 04 MOV DWORD PTR SS:[ESP+4],EDX
00408961 |. C64424 08 00 MOV BYTE PTR SS:[ESP+8],0
00408966 |. 894424 0C MOV DWORD PTR SS:[ESP+C],EAX
0040896A |. C64424 10 00 MOV BYTE PTR SS:[ESP+10],0
0040896F |. 8D4424 04 LEA EAX,DWORD PTR SS:[ESP+4]
00408973 |. BA 8C894000 MOV EDX,IFLOWER1.0040898C
00408978 |. 91 XCHG EAX,ECX
00408979 |. E8 560D0000 CALL IFLOWER1.004096D4 //顺着这个函数继续看。
0040897E |. 83C4 10 ADD ESP,10
00408981 \. C3 RETN
=================================================================
004096D4 /$ 55 PUSH EBP
004096D5 |. 8BEC MOV EBP,ESP
004096D7 |. 81C4 04F0FFFF ADD ESP,-0FFC
004096DD |. 50 PUSH EAX
004096DE |. 83C4 F4 ADD ESP,-0C
004096E1 |. 53 PUSH EBX
004096E2 |. 56 PUSH ESI
004096E3 |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
004096E6 |. 8955 FC MOV DWORD PTR SS:[EBP-4],EDX
004096E9 |. 8BF0 MOV ESI,EAX
004096EB |. BB 02100000 MOV EBX,1002
004096F0 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004096F3 |. E8 54A7FFFF CALL IFLOWER1.00403E4C
004096F8 |. 8BD3 MOV EDX,EBX
004096FA |. 85D2 TEST EDX,EDX
004096FC |. 79 03 JNS SHORT IFLOWER1.00409701
004096FE |. 83C2 03 ADD EDX,3
00409701 |> C1FA 02 SAR EDX,2
00409704 |. 8BCB MOV ECX,EBX
00409706 |. 2BCA SUB ECX,EDX
00409708 |. 3BC1 CMP EAX,ECX
0040970A |. 7D 24 JGE SHORT IFLOWER1.00409730
0040970C |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0040970F |. E8 38A7FFFF CALL IFLOWER1.00403E4C
00409714 |. 50 PUSH EAX
00409715 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00409718 |. 50 PUSH EAX
00409719 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0040971C |. 50 PUSH EAX
0040971D |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00409720 |. 8BD3 MOV EDX,EBX
00409722 |. 4A DEC EDX
00409723 |. 8D85 F6EFFFFF LEA EAX,DWORD PTR SS:[EBP-100A] //注册码地址送EAX。注册码已经现出面目。
00409729 |. E8 32FBFFFF CALL IFLOWER1.00409260 //这个函数把16进制注册码变为ASSIC码形式。
0040972E |. EB 0C JMP SHORT IFLOWER1.0040973C
00409730 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00409733 |. E8 14A7FFFF CALL IFLOWER1.00403E4C
00409738 |. 8BD8 MOV EBX,EAX
0040973A |. 8BC3 MOV EAX,EBX
0040973C |> 8BD3 MOV EDX,EBX
0040973E |. 4A DEC EDX
0040973F |. 3BC2 CMP EAX,EDX
00409741 |. 7C 43 JL SHORT IFLOWER1.00409786
00409743 |. EB 30 JMP SHORT IFLOWER1.00409775
00409745 |> 03DB /ADD EBX,EBX
00409747 |. 8BC6 |MOV EAX,ESI
00409749 |. E8 7EA4FFFF |CALL IFLOWER1.00403BCC
0040974E |. 8BC6 |MOV EAX,ESI
00409750 |. 8BD3 |MOV EDX,EBX
00409752 |. E8 29AAFFFF |CALL IFLOWER1.00404180
00409757 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
0040975A |. E8 EDA6FFFF |CALL IFLOWER1.00403E4C
0040975F |. 50 |PUSH EAX
00409760 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00409763 |. 50 |PUSH EAX
00409764 |. 8B45 08 |MOV EAX,DWORD PTR SS:[EBP+8]
00409767 |. 50 |PUSH EAX
00409768 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
0040976B |. 8BD3 |MOV EDX,EBX
0040976D |. 4A |DEC EDX
0040976E |. 8B06 |MOV EAX,DWORD PTR DS:[ESI]
00409770 |. E8 EBFAFFFF |CALL IFLOWER1.00409260
00409775 |> 8BD3 MOV EDX,EBX
00409777 |. 4A |DEC EDX
00409778 |. 3BC2 |CMP EAX,EDX
0040977A |.^7D C9 \JGE SHORT IFLOWER1.00409745
0040977C |. 8BD6 MOV EDX,ESI
0040977E |. 92 XCHG EAX,EDX
0040977F |. E8 FCA9FFFF CALL IFLOWER1.00404180
00409784 |. EB 0E JMP SHORT IFLOWER1.00409794
00409786 |> 8D95 F6EFFFFF LEA EDX,DWORD PTR SS:[EBP-100A] //注册码的地址送EDX。
0040978C |. 8BCE MOV ECX,ESI
0040978E |. 91 XCHG EAX,ECX
0040978F |. E8 20A5FFFF CALL IFLOWER1.00403CB4 // 拷贝注册码到其他地址。
00409794 |> 5E POP ESI
00409795 |. 5B POP EBX
00409796 |. 8BE5 MOV ESP,EBP
00409798 |. 5D POP EBP
00409799 \. C2 0400 RETN 4
=================================================================
最后我们返回到下面代码处:
00492F3B |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] //真注册码地址送EDX。
00492F3E |. 58 POP EAX //弹出假注册码地址到EAX。
00492F3F |. E8 1810F7FF CALL IFLOWER1.00403F5C //此函数进行真假比较啦。
00492F44 |. 75 05 JNZ SHORT IFLOWER1.00492F4B //不为0则OVER。
00492F46 |. 83CE FF OR ESI,FFFFFFFF
00492F49 |. EB 02 JMP SHORT IFLOWER1.00492F4D
为了完整起见,让我们稍微看一下00492F3F处的比较函数部分内容吧:
00403F73 |. 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4] //假码长度送EAX。比如前面输入654321为6位。
00403F76 |. 8B57 FC MOV EDX,DWORD PTR DS:[EDI-4] //真码长度送EDX。这里是8位的。
00403F79 |. 29D0 SUB EAX,EDX //两者相减。
00403F7B |. 77 02 JA SHORT IFLOWER1.00403F7F
00403F7D |. 01C2 ADD EDX,EAX
00403F7F |> 52 PUSH EDX
00403F80 |. C1EA 02 SHR EDX,2
00403F83 |. 74 26 JE SHORT IFLOWER1.00403FAB
00403F85 |> 8B0E /MOV ECX,DWORD PTR DS:[ESI] //假码送ECX。
00403F87 |. 8B1F |MOV EBX,DWORD PTR DS:[EDI] //真码送EBX。
00403F89 |. 39D9 |CMP ECX,EBX //进行比较。
00403F8B |. 75 58 |JNZ SHORT IFLOWER1.00403FE5 //不等就OVER。
00403F8D |. 4A |DEC EDX //计数器递减。
00403F8E |. 74 15 |JE SHORT IFLOWER1.00403FA5 //比较完毕则跳走。
00403F90 |. 8B4E 04 |MOV ECX,DWORD PTR DS:[ESI+4] //下一组假码送ECX。
00403F93 |. 8B5F 04 |MOV EBX,DWORD PTR DS:[EDI+4] //下一组真码送EBX。
00403F96 |. 39D9 |CMP ECX,EBX
00403F98 |. 75 4B |JNZ SHORT IFLOWER1.00403FE5 //不等就OVER。
00403F9A |. 83C6 08 |ADD ESI,8
00403F9D |. 83C7 08 |ADD EDI,8
00403FA0 |. 4A |DEC EDX
00403FA1 |.^75 E2 \JNZ SHORT IFLOWER1.00403F85 //未完则继续循环。
00403FA3 |. EB 06 JMP SHORT IFLOWER1.00403FAB
=================================================================
后记:用了1个小时跟踪程序,分析其算法,用1小时写了这篇破文,希望对菜鸟有那么点启发。通过跟踪发现这个程序的注册码算法其实很清晰明了的,计算强度不是太大,才循环了8次而已。注册机也很容易写出来的。而且这个程序的注册码只与硬盘号有关,与用户名无关。
这几天遇到一个vbox加壳的软件,反跟踪,反调试,实在太可怕,怎么搞掉这个VOBX的壳是个问题。因为程序 监测到你驻留了调试器则弹出对话框提示你。非常麻烦。我还得继续研究看雪论坛精华的文章,需要大补才行!!也希望各位在这冬天好好补补,学业进步!
这几天身体欠佳,精神不在状态。希望各位坛友谅解。分析完了这个软件,才觉得心情好多了,快来分享我的愉快吧!! 特感谢您耽误宝贵时间阅读!请多多指教!!^_*
结论:
用户名:任意输入即可
注册码:126A7FA3
完稿:2006年1月22日晚10:30
qDuWg
qduwg@163.com
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!