SkinEngine 1.0 控件采用CC方式对NAG的100%破解
【破解作者】 aCaFeeL
【我的主页】 http://cztool.ys168.com/
【使用工具】 ODbyDKY 1.10(感谢Dyk158打造的这把利器)
【破解平台】 Win98SE
【软件名称】 SkinEngine v1.0
【下载地址】 http://www.ksdev.com/
【软件简介】 这是一个(2005年11月15日)新出的界面控件,支持 Visual Basic,Visual C++,Borland Delphi, C++ Builder,Visual Basic.NET, Visual C#.NET,Visual J++.NET,Bolrand Delphi.NET, C# Builder等众多编译程序。未注册版本编译后的程序,在程序开始和结束时都会出现nag提示窗口。
【破解声明】 是§看雪§领我进了破解的这道门,而来了§看雪§这么久,通过前辈们的许多帖子,感觉自己也不断的有所收获!因此,出于对破解的爱好,自己斗胆也发一帖,将一点心得和体会拿出来与大家分享!不足之处还请多包含!
【破解内容】
安装完skinengine控件后,通过分析它的说明文件和unins000.dat文件,知道了在它的"redist"目录以及在系统的"Windows\System"或"Windows\System32"目录下都安装了skinengine.dll文件,而这就是SkinEngine控件的核心部分。分析skinengine.dll文件,发现它是被UPX压缩了的,故将其解压。
用ODbyDYK打开用了SkinEngine控件编译后的Exe文件,在CPU窗口中,点击鼠标右键,选择‘搜索-》所有参考文本串’,在新弹出的文本字符串参考窗口中,却没有找到任何与NAG窗口有关的信息 :-( 。
于是按(Alt+E)键打开执行模块窗口,怪了!!窗口中居然也没有显示skinengine.dll的信息,而作为控件的核心,这个dll是一定要被导入的呀!嘿嘿,看来控件作者对自己产品的加密还是用了心的,没将它写入被编译程序的导入表中!那运行一下试试?按(F9)键运行,这时出现了NAG窗口,不要慌着按NAG窗口的“Close”按钮,而是在ODbyDKY中按(F12)键暂停,这时发现 模块窗口 中skinengine.dll却出现了,鼠标双击这一行后,便来到了skinengine.dll的领空,再搜索“所有参考文本串”,还是没有任何有价值的信息可供参考,看来只有从skinengine.dll的入口点开始一步一步的找了,这就是破解所需要的耐心了!
而通过上面的分析,知道了控件是在运行中才调用skinengine.dll的,而要从skinengine.dll的入口点开始分析,就要在skinengine.dll的入口点周围找地方插入一个Int3(即机器码CC),以便程序一运行到skinengine.dll的入口点周围就被中断下来,这样才能对skinengine.dll进行详细的分析。
在skinengine.dll的领空下,按(Ctrl+N)键打开“显示当前模块名称(标签)”的窗口,点击“类型”后,找到导出类型中的<ModuleEntryPoint>这一行,鼠标双击后来到skinengine.dll的入口点,看到如下代码:
。。。。。。
00DEA230 > 55 PUSH EBP //来到这里,skinengine.dll的入口点
00DEA231 8BEC MOV EBP,ESP
00DEA233 83C4 C4 ADD ESP,-3C
00DEA236 B8 789EDE00 MOV EAX,SKINENGI.00DE9E78 //发现周围无法修改任何一个命令为Int3
00DEA23B E8 B0C6F3FF CALL SKINENGI.00D268F0 //因此决定进入该Call看看
00DEA240 E8 9BA0F3FF CALL SKINENGI.00D242E0
00DEA245 8D40 00 LEA EAX,DWORD PTR DS:[EAX]
00DEA248 0000 ADD BYTE PTR DS:[EAX],AL
00DEA24A 0000 ADD BYTE PTR DS:[EAX],AL
00DEA24C 0000 ADD BYTE PTR DS:[EAX],AL
00DEA24E 0000 ADD BYTE PTR DS:[EAX],AL
00DEA250 0000 ADD BYTE PTR DS:[EAX],AL
00DEA252 0000 ADD BYTE PTR DS:[EAX],AL
00DEA254 0000 ADD BYTE PTR DS:[EAX],AL
00DEA256 0000 ADD BYTE PTR DS:[EAX],AL
。。。。。。
于是,来到了虚拟地址: 00D268F0 处,看到如下的代码:
。。。。。。
00D268E9 E8 F6F6FFFF CALL SKINENGI.00D25FE4
00D268EE C3 RETN //上一个子程序的结束
00D268EF 90 NOP //**呵呵**重要** 可将此处改为: Int3
00D268F0 BA A8B0DE00 MOV EDX,SKINENGI.00DEB0A8 //这便是00DEA23B处的Call所调用的开始处了
00D268F5 837D 0C 01 CMP DWORD PTR SS:[EBP+C],1
00D268F9 75 2A JNZ SHORT SKINENGI.00D26925
00D268FB 50 PUSH EAX
00D268FC 52 PUSH EDX
00D268FD C605 64E6DE00 0>MOV BYTE PTR DS:[DEE664],1
00D26904 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
00D26907 890D 68E6DE00 MOV DWORD PTR DS:[DEE668],ECX
00D2690D 894A 04 MOV DWORD PTR DS:[EDX+4],ECX
00D26910 C742 08 0000000>MOV DWORD PTR DS:[EDX+8],0
00D26917 C742 0C 0000000>MOV DWORD PTR DS:[EDX+C],0
00D2691E E8 C1FFFFFF CALL SKINENGI.00D268E4
00D26923 5A POP EDX
00D26924 58 POP EAX
00D26925 FF35 6CE6DE00 PUSH DWORD PTR DS:[DEE66C]
00D2692B B9 C0B0DE00 MOV ECX,SKINENGI.00DEB0C0
00D26930 E8 5BD7FFFF CALL SKINENGI.00D24090
00D26935 C3 RETN //00DEA23B处的Call的结束
。。。。。。
发现虚拟地址:00D268EF 处居然有 NOP 命令,呵呵,如果猜得不错,这是控件作者自己留下的!
因此将虚拟地址:00D268EF 处的 NOP 命令
改为 INT3 命令,相应的,
也要将虚拟地址:00DEA23B 处的 CALL SKINENGI.00D268F0 命令
改为 CALL SKINENGI.00D268EF 命令,以便能够调用到 00D268EF 处的INT3;
然后点击鼠标右键,选择‘复制到可执行文件-》所有修改’,在新弹出的窗口中,再次点击鼠标右键,选择‘保存文件’,将修改后的skinengine.dll文件保存。
在ODbyDYK中按(Alt+F2)键结束调试,然后将被保存的skinengine.dll文件拷贝到Windows\system目录中覆盖掉原来的skinengine.dll文件,再在ODbyDYK中按(Ctrl+F2)键重新装载被调试程序,按(F9)键运行,这时程序中断在了skinengine.dll领空中的 00D268F0 处,按(F8)键一步一步的运行,到如下代码:
。。。。。。
00D268EF CC INT3 //修改后所插入的CC
00D268F0 BA A8B0DE00 MOV EDX,SKINENGI.00DEB0A8 //重新装载程序后,便中断在了此处
00D268F5 837D 0C 01 CMP DWORD PTR SS:[EBP+C],1
00D268F9 75 2A JNZ SHORT SKINENGI.00D26925
00D268FB 50 PUSH EAX
00D268FC 52 PUSH EDX
00D268FD C605 64E6DE00 0>MOV BYTE PTR DS:[DEE664],1
00D26904 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
00D26907 890D 68E6DE00 MOV DWORD PTR DS:[DEE668],ECX
00D2690D 894A 04 MOV DWORD PTR DS:[EDX+4],ECX
00D26910 C742 08 0000000>MOV DWORD PTR DS:[EDX+8],0
00D26917 C742 0C 0000000>MOV DWORD PTR DS:[EDX+C],0
00D2691E E8 C1FFFFFF CALL SKINENGI.00D268E4
00D26923 5A POP EDX
00D26924 58 POP EAX
00D26925 FF35 6CE6DE00 PUSH DWORD PTR DS:[DEE66C]
00D2692B B9 C0B0DE00 MOV ECX,SKINENGI.00DEB0C0
00D26930 E8 5BD7FFFF CALL SKINENGI.00D24090 //F8键运行此Call之后弹出NAG,因此,在之处需按F7键,进入此Call中
00D26935 C3 RETN
。。。。。。
进入 CALL SKINENGI.00D24090 后,来到如下的代码:
。。。。。。
00D24090 51 PUSH ECX
00D24091 56 PUSH ESI
00D24092 57 PUSH EDI
00D24093 BE 38E6DE00 MOV ESI,SKINENGI.00DEE638
00D24098 8D7D C4 LEA EDI,DWORD PTR SS:[EBP-3C]
00D2409B B9 0B000000 MOV ECX,0B
00D240A0 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI>
00D240A2 8F05 58E6DE00 POP DWORD PTR DS:[DEE658]
00D240A8 8F05 54E6DE00 POP DWORD PTR DS:[DEE654] ; SKINENGI.00D20000
00D240AE 892D 4CE6DE00 MOV DWORD PTR DS:[DEE64C],EBP
00D240B4 891D 50E6DE00 MOV DWORD PTR DS:[DEE650],EBX
00D240BA A3 40E6DE00 MOV DWORD PTR DS:[DEE640],EAX
00D240BF 8915 48E6DE00 MOV DWORD PTR DS:[DEE648],EDX
00D240C5 8D4D C4 LEA ECX,DWORD PTR SS:[EBP-3C]
00D240C8 890D 38E6DE00 MOV DWORD PTR DS:[DEE638],ECX
00D240CE 31C9 XOR ECX,ECX
00D240D0 837D 0C 00 CMP DWORD PTR SS:[EBP+C],0
00D240D4 75 02 JNZ SHORT SKINENGI.00D240D8
00D240D6 8B08 MOV ECX,DWORD PTR DS:[EAX]
00D240D8 890D 44E6DE00 MOV DWORD PTR DS:[DEE644],ECX
00D240DE B8 6013D200 MOV EAX,<JMP.&KERNEL32.RaiseException>
00D240E3 A3 14E0DE00 MOV DWORD PTR DS:[DEE014],EAX
00D240E8 B8 6813D200 MOV EAX,<JMP.&KERNEL32.RtlUnwind>
00D240ED A3 18E0DE00 MOV DWORD PTR DS:[DEE018],EAX
00D240F2 E8 91FEFFFF CALL SKINENGI.00D23F88
00D240F7 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
00D240FA 40 INC EAX
00D240FB A2 60E6DE00 MOV BYTE PTR DS:[DEE660],AL
00D24100 48 DEC EAX
00D24101 59 POP ECX
00D24102 8B11 MOV EDX,DWORD PTR DS:[ECX]
00D24104 8915 5CE6DE00 MOV DWORD PTR DS:[DEE65C],EDX
00D2410A 74 07 JE SHORT SKINENGI.00D24113
00D2410C 3C 03 CMP AL,3
00D2410E 7D 03 JGE SHORT SKINENGI.00D24113
00D24110 FF1481 CALL DWORD PTR DS:[ECX+EAX*4]
00D24113 51 PUSH ECX
00D24114 8B4C24 08 MOV ECX,DWORD PTR SS:[ESP+8]
00D24118 85C9 TEST ECX,ECX
00D2411A 74 08 JE SHORT SKINENGI.00D24124
00D2411C 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
00D2411F 8B55 10 MOV EDX,DWORD PTR SS:[EBP+10]
00D24122 FFD1 CALL ECX
00D24124 59 POP ECX
00D24125 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
00D24128 3C 03 CMP AL,3
00D2412A 7C 03 JL SHORT SKINENGI.00D2412F
00D2412C FF1481 CALL DWORD PTR DS:[ECX+EAX*4]
00D2412F 833D 30E0DE00 0>CMP DWORD PTR DS:[DEE030],0
00D24136 75 0D JNZ SHORT SKINENGI.00D24145
00D24138 C605 38E0DE00 0>MOV BYTE PTR DS:[DEE038],1
00D2413F D93D 24B0DE00 FSTCW WORD PTR DS:[DEB024]
00D24145 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
00D24148 48 DEC EAX
00D24149 0F85 91010000 JNZ SKINENGI.00D242E0 //此处不跳转!
00D2414F E8 DCFEFFFF CALL SKINENGI.00D24030 //F8键运行此Call之后弹出NAG,因此,在之处需按F7键,进入此Call中
00D24154 C2 0400 RETN 4
00D24157 C3 RETN
。。。。。。
进入 CALL SKINENGI.00D24030 后,来到如下的代码:
。。。。。。
00D24030 55 PUSH EBP
00D24031 8BEC MOV EBP,ESP
00D24033 53 PUSH EBX
00D24034 56 PUSH ESI
00D24035 57 PUSH EDI
00D24036 A1 40E6DE00 MOV EAX,DWORD PTR DS:[DEE640]
00D2403B 85C0 TEST EAX,EAX
00D2403D 74 4B JE SHORT SKINENGI.00D2408A
00D2403F 8B30 MOV ESI,DWORD PTR DS:[EAX]
00D24041 33DB XOR EBX,EBX
00D24043 8B78 04 MOV EDI,DWORD PTR DS:[EAX+4]
00D24046 33D2 XOR EDX,EDX
00D24048 55 PUSH EBP
00D24049 68 7640D200 PUSH SKINENGI.00D24076
00D2404E 64:FF32 PUSH DWORD PTR FS:[EDX]
00D24051 64:8922 MOV DWORD PTR FS:[EDX],ESP
00D24054 3BF3 CMP ESI,EBX
00D24056 7E 14 JLE SHORT SKINENGI.00D2406C
00D24058 8B04DF MOV EAX,DWORD PTR DS:[EDI+EBX*8]
00D2405B 43 INC EBX //在此处按F2键下断点,然后按F9键,一直到 EBX=6D 时,弹出NAG窗口
00D2405C 891D 44E6DE00 MOV DWORD PTR DS:[DEE644],EBX
00D24062 85C0 TEST EAX,EAX
00D24064 74 02 JE SHORT SKINENGI.00D24068
00D24066 FFD0 CALL EAX //因此,在 EBX=6C 时,按F8键来到此处,按F7键进入此 Call EAX 中
00D24068 3BF3 CMP ESI,EBX
00D2406A ^ 7F EC JG SHORT SKINENGI.00D24058 //开始循环叠加
00D2406C 33C0 XOR EAX,EAX
00D2406E 5A POP EDX
00D2406F 59 POP ECX
00D24070 59 POP ECX
00D24071 64:8910 MOV DWORD PTR FS:[EAX],EDX
00D24074 EB 14 JMP SHORT SKINENGI.00D2408A
00D24076 ^ E9 59F9FFFF JMP SKINENGI.00D239D4
00D2407B E8 50FFFFFF CALL SKINENGI.00D23FD0
00D24080 E8 27FDFFFF CALL SKINENGI.00D23DAC
00D24085 E8 76FDFFFF CALL SKINENGI.00D23E00
00D2408A 5F POP EDI
00D2408B 5E POP ESI
00D2408C 5B POP EBX
00D2408D 5D POP EBP
00D2408E C3 RETN
。。。。。。
在 EBX=6C 时进入 CALL EAX 后,来到如下的代码:
。。。。。。
00DBDC28 55 PUSH EBP
00DBDC29 8BEC MOV EBP,ESP
00DBDC2B 83C4 F8 ADD ESP,-8
00DBDC2E 832D E472E000 0>SUB DWORD PTR DS:[E072E4],1
00DBDC35 73 57 JNB SHORT SKINENGI.00DBDC8E
00DBDC37 E8 10E3FFFF CALL SKINENGI.00DBBF4C
00DBDC3C A1 74B7DB00 MOV EAX,DWORD PTR DS:[DBB774]
00DBDC41 E8 D6F5F7FF CALL SKINENGI.00D3D21C
00DBDC46 A1 34B9DB00 MOV EAX,DWORD PTR DS:[DBB934]
00DBDC4B 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
00DBDC4E A1 ECBBDB00 MOV EAX,DWORD PTR DS:[DBBBEC]
00DBDC53 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00DBDC56 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00DBDC59 BA 01000000 MOV EDX,1
00DBDC5E E8 29F6F7FF CALL SKINENGI.00D3D28C
00DBDC63 A1 94DADE00 MOV EAX,DWORD PTR DS:[DEDA94]
00DBDC68 C600 01 MOV BYTE PTR DS:[EAX],1
00DBDC6B A1 58D7DE00 MOV EAX,DWORD PTR DS:[DED758]
00DBDC70 C700 00C5DB00 MOV DWORD PTR DS:[EAX],SKINENGI.00DBC500
00DBDC76 E8 FDB3FDFF CALL SKINENGI.00D99078 //F8键运行此Call之后弹出NAG,故将此Call屏蔽 NOP 掉,便可!
00DBDC7B 833D DCD3DE00 0>CMP DWORD PTR DS:[DED3DC],0
00DBDC82 74 0A JE SHORT SKINENGI.00DBDC8E
00DBDC84 A1 DCD3DE00 MOV EAX,DWORD PTR DS:[DED3DC]
00DBDC89 E8 6658F6FF CALL SKINENGI.00D234F4
00DBDC8E 59 POP ECX
00DBDC8F 59 POP ECX
00DBDC90 5D POP EBP
00DBDC91 C3 RETN
。。。。。。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!这时可以点击NAG窗口的“Close”按钮进入被编译程序的界面窗口了。!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
然后点击被编译程序的关闭按钮,这时,程序又中断在了skinengine.dll领空中的 00D268F0 处,按(F8)键一步一步的运行,到如下代码:
。。。。。。
00D268EF CC INT3 //修改后所插入的CC
00D268F0 BA A8B0DE00 MOV EDX,SKINENGI.00DEB0A8 //程序再次中断在了此处
00D268F5 837D 0C 01 CMP DWORD PTR SS:[EBP+C],1
00D268F9 75 2A JNZ SHORT SKINENGI.00D26925 //跳转成功
00D268FB 50 PUSH EAX
00D268FC 52 PUSH EDX
00D268FD C605 64E6DE00 0>MOV BYTE PTR DS:[DEE664],1
00D26904 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
00D26907 890D 68E6DE00 MOV DWORD PTR DS:[DEE668],ECX
00D2690D 894A 04 MOV DWORD PTR DS:[EDX+4],ECX
00D26910 C742 08 0000000>MOV DWORD PTR DS:[EDX+8],0
00D26917 C742 0C 0000000>MOV DWORD PTR DS:[EDX+C],0
00D2691E E8 C1FFFFFF CALL SKINENGI.00D268E4
00D26923 5A POP EDX
00D26924 58 POP EAX
00D26925 FF35 6CE6DE00 PUSH DWORD PTR DS:[DEE66C] //跳到此处
00D2692B B9 C0B0DE00 MOV ECX,SKINENGI.00DEB0C0
00D26930 E8 5BD7FFFF CALL SKINENGI.00D24090 //F8键运行此Call之后弹出NAG,因此,在之处需按F7键,进入此Call中
00D26935 C3 RETN
。。。。。。
进入 CALL SKINENGI.00D24090 后,来到如下的代码:
。。。。。。
00D24090 51 PUSH ECX ; SKINENGI.00DEB0C0
00D24091 56 PUSH ESI
00D24092 57 PUSH EDI
00D24093 BE 38E6DE00 MOV ESI,SKINENGI.00DEE638
00D24098 8D7D C4 LEA EDI,DWORD PTR SS:[EBP-3C]
00D2409B B9 0B000000 MOV ECX,0B
00D240A0 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI>
00D240A2 8F05 58E6DE00 POP DWORD PTR DS:[DEE658]
00D240A8 8F05 54E6DE00 POP DWORD PTR DS:[DEE654]
00D240AE 892D 4CE6DE00 MOV DWORD PTR DS:[DEE64C],EBP
00D240B4 891D 50E6DE00 MOV DWORD PTR DS:[DEE650],EBX
00D240BA A3 40E6DE00 MOV DWORD PTR DS:[DEE640],EAX
00D240BF 8915 48E6DE00 MOV DWORD PTR DS:[DEE648],EDX
00D240C5 8D4D C4 LEA ECX,DWORD PTR SS:[EBP-3C]
00D240C8 890D 38E6DE00 MOV DWORD PTR DS:[DEE638],ECX
00D240CE 31C9 XOR ECX,ECX
00D240D0 837D 0C 00 CMP DWORD PTR SS:[EBP+C],0
00D240D4 75 02 JNZ SHORT SKINENGI.00D240D8
00D240D6 8B08 MOV ECX,DWORD PTR DS:[EAX]
00D240D8 890D 44E6DE00 MOV DWORD PTR DS:[DEE644],ECX
00D240DE B8 6013D200 MOV EAX,<JMP.&KERNEL32.RaiseException>
00D240E3 A3 14E0DE00 MOV DWORD PTR DS:[DEE014],EAX
00D240E8 B8 6813D200 MOV EAX,<JMP.&KERNEL32.RtlUnwind>
00D240ED A3 18E0DE00 MOV DWORD PTR DS:[DEE018],EAX
00D240F2 E8 91FEFFFF CALL SKINENGI.00D23F88
00D240F7 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
00D240FA 40 INC EAX
00D240FB A2 60E6DE00 MOV BYTE PTR DS:[DEE660],AL
00D24100 48 DEC EAX
00D24101 59 POP ECX
00D24102 8B11 MOV EDX,DWORD PTR DS:[ECX]
00D24104 8915 5CE6DE00 MOV DWORD PTR DS:[DEE65C],EDX
00D2410A 74 07 JE SHORT SKINENGI.00D24113
00D2410C 3C 03 CMP AL,3
00D2410E 7D 03 JGE SHORT SKINENGI.00D24113
00D24110 FF1481 CALL DWORD PTR DS:[ECX+EAX*4]
00D24113 51 PUSH ECX
00D24114 8B4C24 08 MOV ECX,DWORD PTR SS:[ESP+8]
00D24118 85C9 TEST ECX,ECX
00D2411A 74 08 JE SHORT SKINENGI.00D24124
00D2411C 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
00D2411F 8B55 10 MOV EDX,DWORD PTR SS:[EBP+10]
00D24122 FFD1 CALL ECX
00D24124 59 POP ECX
00D24125 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
00D24128 3C 03 CMP AL,3
00D2412A 7C 03 JL SHORT SKINENGI.00D2412F
00D2412C FF1481 CALL DWORD PTR DS:[ECX+EAX*4]
00D2412F 833D 30E0DE00 0>CMP DWORD PTR DS:[DEE030],0
00D24136 75 0D JNZ SHORT SKINENGI.00D24145
00D24138 C605 38E0DE00 0>MOV BYTE PTR DS:[DEE038],1
00D2413F D93D 24B0DE00 FSTCW WORD PTR DS:[DEB024]
00D24145 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
00D24148 48 DEC EAX
00D24149 0F85 91010000 JNZ SKINENGI.00D242E0 //***此处跳转成功!***
00D2414F E8 DCFEFFFF CALL SKINENGI.00D24030 //此调用NAG窗口的 Call 不再被运行了!
00D24154 C2 0400 RETN 4
00D24157 C3 RETN
。。。。。。
由 JNZ SKINENGI.00D242E0 的跳转,来到如下的代码:
。。。。。。
00D242DB 000D 0A000053 ADD BYTE PTR DS:[5300000A],CL
00D242E1 56 PUSH ESI
00D242E2 57 PUSH EDI
00D242E3 55 PUSH EBP
00D242E4 BB 38E6DE00 MOV EBX,SKINENGI.00DEE638
00D242E9 BE 00B0DE00 MOV ESI,SKINENGI.00DEB000
00D242EE BF 48E0DE00 MOV EDI,SKINENGI.00DEE048
00D242F3 807B 28 00 CMP BYTE PTR DS:[EBX+28],0
00D242F7 75 16 JNZ SHORT SKINENGI.00D2430F
00D242F9 833F 00 CMP DWORD PTR DS:[EDI],0
00D242FC 74 11 JE SHORT SKINENGI.00D2430F
00D242FE 8B17 MOV EDX,DWORD PTR DS:[EDI]
00D24300 89D0 MOV EAX,EDX
00D24302 33D2 XOR EDX,EDX
00D24304 8917 MOV DWORD PTR DS:[EDI],EDX
00D24306 8BE8 MOV EBP,EAX
00D24308 FFD5 CALL EBP
00D2430A 833F 00 CMP DWORD PTR DS:[EDI],0
00D2430D ^ 75 EF JNZ SHORT SKINENGI.00D242FE
00D2430F 833D 04B0DE00 0>CMP DWORD PTR DS:[DEB004],0
00D24316 74 11 JE SHORT SKINENGI.00D24329
00D24318 E8 ABFEFFFF CALL SKINENGI.00D241C8
00D2431D E8 32FFFFFF CALL SKINENGI.00D24254
00D24322 33C0 XOR EAX,EAX
00D24324 A3 04B0DE00 MOV DWORD PTR DS:[DEB004],EAX
00D24329 807B 28 02 CMP BYTE PTR DS:[EBX+28],2
00D2432D 75 0A JNZ SHORT SKINENGI.00D24339
00D2432F 833E 00 CMP DWORD PTR DS:[ESI],0
00D24332 75 05 JNZ SHORT SKINENGI.00D24339
00D24334 33C0 XOR EAX,EAX
00D24336 8943 0C MOV DWORD PTR DS:[EBX+C],EAX
00D24339 E8 92FCFFFF CALL SKINENGI.00D23FD0 //F8键运行此Call之后弹出NAG,因此,在之处需按F7键,进入此Call中
00D2433E 807B 28 01 CMP BYTE PTR DS:[EBX+28],1
。。。。。。
进入 CALL SKINENGI.00D23FD0 后,来到如下的代码:
。。。。。。
00D23FD0 55 PUSH EBP
00D23FD1 8BEC MOV EBP,ESP
00D23FD3 53 PUSH EBX
00D23FD4 56 PUSH ESI
00D23FD5 57 PUSH EDI
00D23FD6 BF 38E6DE00 MOV EDI,SKINENGI.00DEE638
00D23FDB 8B47 08 MOV EAX,DWORD PTR DS:[EDI+8]
00D23FDE 85C0 TEST EAX,EAX
00D23FE0 74 48 JE SHORT SKINENGI.00D2402A
00D23FE2 8B5F 0C MOV EBX,DWORD PTR DS:[EDI+C]
00D23FE5 8B70 04 MOV ESI,DWORD PTR DS:[EAX+4]
00D23FE8 33D2 XOR EDX,EDX
00D23FEA 55 PUSH EBP
00D23FEB 68 1640D200 PUSH SKINENGI.00D24016
00D23FF0 64:FF32 PUSH DWORD PTR FS:[EDX]
00D23FF3 64:8922 MOV DWORD PTR FS:[EDX],ESP
00D23FF6 85DB TEST EBX,EBX
00D23FF8 7E 12 JLE SHORT SKINENGI.00D2400C
00D23FFA 4B DEC EBX //在此处按F2键下断点,然后按F9键,一直到 EBX=6C 时,弹出NAG窗口
00D23FFB 895F 0C MOV DWORD PTR DS:[EDI+C],EBX
00D23FFE 8B44DE 04 MOV EAX,DWORD PTR DS:[ESI+EBX*8+4]
00D24002 85C0 TEST EAX,EAX
00D24004 74 02 JE SHORT SKINENGI.00D24008
00D24006 FFD0 CALL EAX //因此,在 EBX=6D 时,按F8键来到此处,按F7键进入此 Call EAX 中
00D24008 85DB TEST EBX,EBX
00D2400A ^ 7F EE JG SHORT SKINENGI.00D23FFA //开始循环递减
00D2400C 33C0 XOR EAX,EAX
00D2400E 5A POP EDX
00D2400F 59 POP ECX
00D24010 59 POP ECX
00D24011 64:8910 MOV DWORD PTR FS:[EAX],EDX
00D24014 EB 14 JMP SHORT SKINENGI.00D2402A
00D24016 ^ E9 B9F9FFFF JMP SKINENGI.00D239D4
00D2401B E8 B0FFFFFF CALL SKINENGI.00D23FD0
00D24020 E8 87FDFFFF CALL SKINENGI.00D23DAC
00D24025 E8 D6FDFFFF CALL SKINENGI.00D23E00
00D2402A 5F POP EDI
00D2402B 5E POP ESI
00D2402C 5B POP EBX
00D2402D 5D POP EBP
00D2402E C3 RETN
。。。。。。
在 EBX=6D 时进入 CALL EAX 后,来到如下的代码:
。。。。。。
00DBDBF0 55 PUSH EBP
00DBDBF1 8BEC MOV EBP,ESP
00DBDBF3 33C0 XOR EAX,EAX
00DBDBF5 55 PUSH EBP
00DBDBF6 68 1CDCDB00 PUSH SKINENGI.00DBDC1C
00DBDBFB 64:FF30 PUSH DWORD PTR FS:[EAX]
00DBDBFE 64:8920 MOV DWORD PTR FS:[EAX],ESP
00DBDC01 FF05 E472E000 INC DWORD PTR DS:[E072E4]
00DBDC07 75 05 JNZ SHORT SKINENGI.00DBDC0E //跳转不成功
00DBDC09 E8 6AB4FDFF CALL SKINENGI.00D99078 //F8键运行此Call之后弹出NAG,故将此Call屏蔽 NOP 掉,便可!
00DBDC0E 33C0 XOR EAX,EAX
00DBDC10 5A POP EDX
00DBDC11 59 POP ECX
00DBDC12 59 POP ECX
00DBDC13 64:8910 MOV DWORD PTR FS:[EAX],EDX
00DBDC16 68 23DCDB00 PUSH SKINENGI.00DBDC23
00DBDC1B C3 RETN
00DBDC1C ^ E9 6760F6FF JMP SKINENGI.00D23C88
00DBDC21 ^ EB F8 JMP SHORT SKINENGI.00DBDC1B
00DBDC23 5D POP EBP
00DBDC24 C3 RETN
。。。。。。
故,在skinengine.dll中,找到机器码 “E8 FDB3FDFF” //程序开始的NAG窗口
用 “90 90909090”代替
找到机器码 “E8 6AB4FDFF” //程序结束的NAG窗口
用 “90 90909090”代替
最后,将破解了的skinengine.dll文件拷贝到Windows\system目录中覆盖掉先前被CC过的skinengine.dll文件,即可!
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
2005-11-16
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!