看了moodsky大致写的文章:
http://bbs.pediy.com/showthread.php?t=43546 ,
偶又在学习E语言,也下个E语言的皮肤控件玩玩,破解方法与他的不一样,适合偶们新手一起练练?
软件名称:Skin++ For E语言 3.0
下载网站:
http://www.uipower.com/
分析 “..\Skin++ For E” 目录下的 “SkinPlusPlusE.dll” 文件,没有加壳。
用OD打开用了SkinPlusPlusE.dll控件编译(注意:不是独立编译哈)后的『古木五子棋人机对战』目录下的 “古木五子棋人机对战.exe” 文件(在它众多目录中随便找的一个),在CPU窗口中,点击鼠标右键,选择‘搜索-》所有参考文本串’,在新弹出的文本字符串参考窗口中,却没有找到任何与NAG窗口有关的信息 :-( 。
于是按(Alt+E)键打开执行模块窗口!窗口中居然也没有显示SkinPlusPlusE.dll的信息,而作为控件的核心,这个dll是一定要被导入的!
那运行一下试试?按(F9)键运行,这时出现了NAG广告窗口,不要慌着按NAG窗口的“是”或“否”按钮,而是在OD中按(F12)键暂停,这时发现在 模块窗口 中:
Executable modules, 条目 2
基址=00BD0000
大小=000B0000 (720896.)
入口=00C3CE79 SkinPlus.<模块入口点>
名称=SkinPlus
文件版本=3, 0, 0, 0
路径=C:\Program Files\Skin++ 3.0 For E语言\Skin++ For E\SkinPlusPlusE.dll
却出现了,鼠标双击这一行后,便来到了SkinPlusPlusE.dll的领空,再点击鼠标右键,搜索“所有参考文本串”,得到如下与破解有管的信息:
......;1.NAG窗口的提示信息......
超级字符串参考, 条目 1
地址=00BD10F7
反汇编地址=push SkinPlus.00C5D080
字符内容=UIPower : Skin++ allows you to add skinning ability to your applications.\r\n\r\nFor informationon obtaining a license to use this control,\r\n\r\nplease visit
www.uipower.com or e-mail [email]sales@uipwer.com[/email]\r\n\r\nAre you registering skin++ now ?
......;2.皮肤文件的检测......
超级字符串参考, 条目 4
地址=00BD11A9
反汇编地址=push SkinPlus.00C5D19C
字符内容=PixOS
超级字符串参考, 条目 5
地址=00BD11C2
反汇编地址=push SkinPlus.00C5D194
字符内容=ferix
超级字符串参考, 条目 6
地址=00BD11D4
反汇编地址=push SkinPlus.00C5D188
字符内容=MediaPlayer
......;3.合成DLL后(E语言独立编译)的检测......
超级字符串参考 A++ , 条目 88
地址=00AEA648
反汇编地址=push SkinPlus.00B6D84C
字符内容=本版本的Skin++支持%s,不支持生成当前应用程序的开发工具!\r\n\r\n请检查开发工具对应的Skin++版本!!!
双击这些字符串进入到相应的代码中,再F2键下断,然后F9键,继续运行,这时,停在了下断的地方:
。。。。。。
(省略)
00BD11A7 33DB xor ebx, ebx
00BD11A9 68 9CD1C500 push SkinPlus.00C5D19C ; PixOS ;断在了这里
00BD11AE 8D4C24 24 lea ecx, dword ptr [esp+24]
00BD11B2 895C24 1C mov dword ptr [esp+1C], ebx
00BD11B6 E8 2BB70600 call <jmp.&MFC42.#2764_CString::Find>
00BD11BB 83CD FF or ebp, FFFFFFFF
00BD11BE 3BC5 cmp eax, ebp ; 比较是否为:PixOS皮肤
00BD11C0 75 28 jnz short SkinPlus.00BD11EA ; ×修改为JMP强制跳转×
00BD11C2 68 94D1C500 push SkinPlus.00C5D194 ; ferix
00BD11C7 8D4C24 24 lea ecx, dword ptr [esp+24]
00BD11CB E8 16B70600 call <jmp.&MFC42.#2764_CString::Find>
00BD11D0 3BC5 cmp eax, ebp
00BD11D2 75 16 jnz short SkinPlus.00BD11EA ; 比较是否为:ferix皮肤
00BD11D4 68 88D1C500 push SkinPlus.00C5D188 ; MediaPlayer
00BD11D9 8D4C24 24 lea ecx, dword ptr [esp+24]
00BD11DD E8 04B70600 call <jmp.&MFC42.#2764_CString::Find>
00BD11E2 3BC5 cmp eax, ebp
00BD11E4 0F84 CC000000 je SkinPlus.00BD12B6 ; 比较是否为:MediaPlayer皮肤
00BD11EA E8 F1030000 call SkinPlus.sppRemoveSkin ; ×修改后,必须来到这里×
00BD11EF 68 18070000 push 718
00BD11F4 E8 E7B60600 call <jmp.&MFC42.#823_operator new>
00BD11F9 83C4 04 add esp, 4
00BD11FC 894424 0C mov dword ptr [esp+C], eax
00BD1200 3BC3 cmp eax, ebx
00BD1202 C64424 18 01 mov byte ptr [esp+18], 1
00BD1207 74 09 je short SkinPlus.00BD1212
00BD1209 8BC8 mov ecx, eax
00BD120B E8 300F0000 call SkinPlus.00BD2140
00BD1210 EB 02 jmp short SkinPlus.00BD1214
00BD1212 33C0 xor eax, eax
00BD1214 68 1C010000 push 11C
00BD1219 885C24 1C mov byte ptr [esp+1C], bl
00BD121D A3 1017C600 mov dword ptr [C61710], eax
00BD1222 E8 B9B60600 call <jmp.&MFC42.#823_operator new>
00BD1227 83C4 04 add esp, 4
00BD122A 894424 0C mov dword ptr [esp+C], eax
00BD122E 3BC3 cmp eax, ebx
00BD1230 C64424 18 02 mov byte ptr [esp+18], 2
00BD1235 74 09 je short SkinPlus.00BD1240
00BD1237 8BC8 mov ecx, eax
00BD1239 E8 62890000 call SkinPlus.00BD9BA0
00BD123E EB 02 jmp short SkinPlus.00BD1242
00BD1240 33C0 xor eax, eax
00BD1242 A3 1417C600 mov dword ptr [C61714], eax
00BD1247 A1 1817C600 mov eax, dword ptr [C61718]
00BD124C 56 push esi
00BD124D 8B35 EC51C400 mov esi, dword ptr [<&KERNEL32.LoadL>; kernel32.LoadLibraryA
00BD1253 3BC3 cmp eax, ebx
00BD1255 885C24 1C mov byte ptr [esp+1C], bl
00BD1259 75 0C jnz short SkinPlus.00BD1267
00BD125B 68 7CD1C500 push SkinPlus.00C5D17C ; msimg32.dll
00BD1260 FFD6 call esi
00BD1262 A3 1817C600 mov dword ptr [C61718], eax
00BD1267 391D 1C17C600 cmp dword ptr [C6171C], ebx
00BD126D 75 0C jnz short SkinPlus.00BD127B
00BD126F 68 70D1C500 push SkinPlus.00C5D170 ; User32.dll
00BD1274 FFD6 call esi
00BD1276 A3 1C17C600 mov dword ptr [C6171C], eax
00BD127B 57 push edi
00BD127C E8 DF970000 call SkinPlus.00BDAA60
00BD1281 83C4 04 add esp, 4
00BD1284 85C0 test eax, eax
00BD1286 5E pop esi
00BD1287 74 28 je short SkinPlus.00BD12B1 ; 不能跳
00BD1289 395C24 24 cmp dword ptr [esp+24], ebx
00BD128D 75 5A jnz short SkinPlus.00BD12E9 ; 不能跳
00BD128F A1 1417C600 mov eax, dword ptr [C61714]
00BD1294 C780 14010000 0>mov dword ptr [eax+114], C0000000
00BD129E 8B0D 1417C600 mov ecx, dword ptr [C61714]
00BD12A4 51 push ecx
00BD12A5 E8 06920000 call SkinPlus.00BDA4B0 ; 合成DLL后(E语言独立编译)的检测
00BD12AA 83C4 04 add esp, 4
00BD12AD 85C0 test eax, eax
00BD12AF 75 28 jnz short SkinPlus.00BD12D9
00BD12B1 E8 7AFEFFFF call SkinPlus.00BD1130
00BD12B6 8D4C24 20 lea ecx, dword ptr [esp+20]
00BD12BA 896C24 18 mov dword ptr [esp+18], ebp
00BD12BE E8 17B60600 call <jmp.&MFC42.#800_CString::~CStri>
00BD12C3 5F pop edi
00BD12C4 5D pop ebp
00BD12C5 33C0 xor eax, eax
00BD12C7 5B pop ebx
00BD12C8 8B4C24 04 mov ecx, dword ptr [esp+4]
00BD12CC 64:890D 0000000>mov dword ptr fs:[0], ecx
00BD12D3 83C4 10 add esp, 10
00BD12D6 C2 0800 retn 8
00BD12D9 E8 D2C50000 call SkinPlus.00BDD8B0
00BD12DE 53 push ebx
00BD12DF E8 2CC50000 call SkinPlus.00BDD810
00BD12E4 83C4 04 add esp, 4
00BD12E7 EB 0C jmp short SkinPlus.00BD12F5
00BD12E9 8B15 1417C600 mov edx, dword ptr [C61714]
00BD12EF 899A 14010000 mov dword ptr [edx+114], ebx
00BD12F5 E8 E6660000 call SkinPlus.00BD79E0
00BD12FA E8 F1FDFFFF call SkinPlus.00BD10F0 ; 弹出NAG对话框的Call,F7键进入
(省略)
。。。。。。
F7键进入了 call SkinPlus.00BDA4B0 后:(合成DLL后(E语言独立编译)的检测)
。。。。。。
00AEA4B0 64:A1 00000000 mov eax, dword ptr fs:[0]
00AEA4B6 6A FF push -1
00AEA4B8 68 3BDAB400 push SkinPlus.00B4DA3B
00AEA4BD 50 push eax
00AEA4BE A1 A018B700 mov eax, dword ptr [B718A0]
00AEA4C3 64:8925 0000000>mov dword ptr fs:[0], esp
00AEA4CA 83EC 1C sub esp, 1C
00AEA4CD 57 push edi
00AEA4CE 33FF xor edi, edi
00AEA4D0 3BC7 cmp eax, edi
00AEA4D2 75 23 jnz short SkinPlus.00AEA4F7 ; ×修改为JMP强制跳转× ; 必须跳
00AEA4D4 C705 A018B700 0>mov dword ptr [B718A0], 1
00AEA4DE E8 4D010000 call SkinPlus.00AEA630 ; 合成DLL后(E语言独立编译)的检测
00AEA4E3 85C0 test eax, eax
00AEA4E5 75 10 jnz short SkinPlus.00AEA4F7
00AEA4E7 5F pop edi
00AEA4E8 8B4C24 1C mov ecx, dword ptr [esp+1C]
00AEA4EC 64:890D 0000000>mov dword ptr fs:[0], ecx
00AEA4F3 83C4 28 add esp, 28
00AEA4F6 C3 retn
。。。。。。
F7键进入上面的 call SkinPlus.00AEA630 后:(合成DLL后(E语言独立编译)的检测)
。。。。。。
1000A630 $ 6A FF push -1
1000A632 . 68 60DA0610 push SkinPlus.1006DA60 ; SE 处理程序安装
1000A637 . 64:A1 0000000>mov eax, dword ptr fs:[0]
1000A63D . 50 push eax
1000A63E . 64:8925 00000>mov dword ptr fs:[0], esp
1000A645 . 83EC 08 sub esp, 8
1000A648 . 68 4CD80810 push SkinPlus.1008D84C ; 本版本的Skin++支持%s,不支持生成当前应用程序的开发工具!\r\n\r\n请检查开发工具对应的Skin++版本!!!
1000A64D . 8D4C24 08 lea ecx, dword ptr [esp+8]
1000A651 . E8 96220600 call <jmp.&MFC42.#537_CString::CStrin>
1000A656 . 8D4C24 00 lea ecx, dword ptr [esp]
1000A65A . C74424 10 000>mov dword ptr [esp+10], 0
1000A662 . E8 A3220600 call <jmp.&MFC42.#540_CString::CStrin>
1000A667 . A1 30180910 mov eax, dword ptr [10091830]
1000A66C . C64424 10 01 mov byte ptr [esp+10], 1
1000A671 . 3D 00000004 cmp eax, 4000000 ; Switch (cases 1000000..FF000000)
1000A676 . 75 56 jnz short SkinPlus.1000A6CE
1000A678 . 68 40D80810 push SkinPlus.1008D840 ; /krnln.fne; Case 4000000 of switch 1000A671
1000A67D . FF15 C4510710 call dword ptr [<&KERNEL32.GetModuleH>; \GetModuleHandleA
1000A683 . 85C0 test eax, eax
1000A685 74 33 je short SkinPlus.1000A6BA ; ×不能跳×,修改为NOP
1000A687 . 8D4C24 00 lea ecx, dword ptr [esp]
1000A68B . C64424 10 00 mov byte ptr [esp+10], 0
1000A690 . E8 45220600 call <jmp.&MFC42.#800_CString::~CStri>
1000A695 . 8D4C24 04 lea ecx, dword ptr [esp+4]
1000A699 . C74424 10 FFF>mov dword ptr [esp+10], -1
1000A6A1 . E8 34220600 call <jmp.&MFC42.#800_CString::~CStri>
1000A6A6 . B8 01000000 mov eax, 1
1000A6AB . 8B4C24 08 mov ecx, dword ptr [esp+8]
1000A6AF . 64:890D 00000>mov dword ptr fs:[0], ecx
1000A6B6 . 83C4 14 add esp, 14
1000A6B9 . C3 retn
1000A6BA > 8B4424 04 mov eax, dword ptr [esp+4]
1000A6BE . 68 38D80810 push SkinPlus.1008D838 ; E语言
1000A6C3 . 8D4C24 04 lea ecx, dword ptr [esp+4]
。。。。。。
F7键进入了 call SkinPlus.00BD10F0 后:(弹出NAG对话框的Call,F7键进入)
。。。。。。
00BD10F0 6A 44 push 44 ; ×这里修改为retn,强制返回,即可×
00BD10F2 68 68D1C500 push SkinPlus.00C5D168 ; UIPOWER
00BD10F7 68 80D0C500 push SkinPlus.00C5D080 ; UIPower : Skin++ allows you to add skinning ability to your applications.\r\n\r\nFor informationon obtaining a license to use this control,\r\n\r\nplease visit
www.uipower.com or e-mail [email]sales@uipwer.com[/email]\r\n\r\nAre you registering skin++ now ?
00BD10FC 6A 00 push 0
00BD10FE FF15 A856C400 call dword ptr [<&USER32.MessageBoxA>] ; USER32.MessageBoxA ; 弹出NAG对话框
00BD1104 83F8 06 cmp eax, 6
00BD1107 75 18 jnz short SkinPlus.00BD1121 ; 如果选择了“是”按钮,则打开下面的主页
00BD1109 6A 05 push 5
00BD110B 6A 00 push 0
00BD110D 6A 00 push 0
00BD110F 68 68D0C500 push SkinPlus.00C5D068 ;
http://www.uipower.com
00BD1114 68 60D0C500 push SkinPlus.00C5D060 ; open
00BD1119 6A 00 push 0
00BD111B FF15 8455C400 call dword ptr [<&SHELL32.ShellExecuteA>] ; SHELL32.ShellExecuteA
00BD1121 C3 retn
。。。。。。
通过上面的分析,知道了在SkinPlusPlusE.dll中:
//1.NAG窗口的提示信息:
将: 00BD11C0 75 28 jnz short SkinPlus.00BD11EA
改为:00BD11C0 EB 28 jmp short SkinPlus.00BD11EA
将: 00AE1287 74 28 je short SkinPlus.00AE12B1
改为:00AE1287 90 nop
00AE1288 90 nop
将: 00AE128D 75 5A jnz short SkinPlus.00AE12E9
改为:00AE128D 90 nop
00AE128E 90 nop
//2.合成DLL后(E语言独立编译)的检测:
将: 00AEA4D2 75 23 jnz short SkinPlus.00AEA4F7
改为:00AEA4D2 EB 23 jmp short SkinPlus.00AEA4F7
将: 1000A685 74 33 je short SkinPlus.1000A6BA
改为:1000A685 90 nop
1000A686 90 nop
//3.皮肤文件的检测:
将: 00BD10F0 6A 44 push 44
改为:00BD10F0 C3 retn
00BD10F0 90 nop
最后,将破解了的SkinPlusPlusE.dll文件拷贝到原目录中覆盖掉先前的SkinPlusPlusE.dll文件,即可!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)