*[标题]:Skin++通用界面换肤系统V2.0.1破解探讨

*[作者]:gz1X <gz1x(at)tom(dot)com>

*[来自]:中国黑客联盟

*[前言]:

skin技术,大家都不会陌生,比如winamp,可以灵活的更换界面风格。早期的实现定制的外观方法都需要程序本身做许多处理,编码太麻烦。

后来出现了专门的Skin插件,ActiveSkin什么的。再后来dll调用的skin软件出现,需要Skin支持的程序调用几个方法,就可以使自己的程序外观完全改变,不需要编程者对skin技术有任何的了解。Skin++通用界面换肤系统V2.0.1就是其中比较出名的一款。

但是让很多“贫民”用户来说,要收费还是比较让人烦的。恰好我前几天做了个小项目,顺便用了下朋友推荐的这款软件。

*[软件原理分析]:

逆向了下这款软件,因为这款软件是商业软件,没方法得到源代码,所以我也是主观的猜测。

原理上基本上是这样:

通过消息钩子来改变已有控件的外观,函数原型是SetWindowsHookEx(WH_CALLWNDPROC, HookProc, 0, lThreadID);

这个函数就不多做解释了,查阅MSDN。设置类型为WH_CALLWNDPROC的HOOK。

然后是截获消息,当然不同控件发出的相同消息也是要分开处理的,简单的方法是得到窗口句柄,而通过窗口句柄得到窗口类,一般在HOOK的CALLBACK 函数中可以获得。接下来就是消息处理,一般都是从截获WM_CREATE消息开始,再就是WM_PAINT,其他诸如鼠标消息之类的也是要处理的,就不再多说。但是这里的细节部分,比如钩子的记录,会出现很多烦琐的东西,解决方案是为窗口类型建立类,然后由实例去解决窗口消息的处理和窗口状态数据的记录。获得了窗口句柄以后,使用SetWindowLong技术将窗口句柄关联到窗口类上。并且可以根据窗口的风格让同一个类做出不同风格的显示效果。

具体的代码实现限于我的水平和时间问题,就不多做纠缠。

*[软件用法说明]:

到skin++的官方网站http://www.uipower.com/去下载试用版。安装。

在VC平台下设置include和lib,tools/options/directory。也可以把SkinPPDemoSystem(VC)/ VCcases下的include和lib文件的文件拷贝到VC的对应目录。在project/settings/link里添上 SkinPPWTL.lib 。

然后将DLL目录里的SkinPPWTL.dll拷贝到windows目录的system32目录下(注意这个是没破解的)。

生成project的时候,将Skins目录里的某张皮肤拷贝到项目目录下,然后在源代码里加上#include "SkinPPWTL.h",int CMainFrame::OnCreate或者CMFC_SkinApp::InitInstance下加上skinppLoadSkin(_T ("xxx.ssk"));即可。

详细的代码可以参考附带的demo。

如果不是正版用户,在生成可执行文件后运行会弹出对话框要求注册。下面我们就破解掉它。关键是对SkinPPWTL.dll的破解。

*[软件破解分析]:

这款软件好象保护不是很强,explorer "http://www.uipower.com/"。我不太习惯叫这类弹出型限制为nag,呵呵。

SkinPPWTL.dll,一般没正式购买的版本会不厌其烦的弹出“Skin++ allows you to add skinning ability to your applications.For informationon obtaining a license to use this control,please visit [url]www.uipower.com[/url] or e-mail sales@uipwer.com.Are you registering?”。

那我们破除它。

[code]

10033097 |. 68 7C120710    PUSH skinppwt.1007127C                   ; ASCII "UIPower : ...?"

1003309C |. E8 F7E9FCFF    CALL skinppwt.10001A98

100330A1 |. 8365 FC 00     AND DWORD PTR SS:[EBP-4],0

100330A5 |. 51             PUSH ECX

100330A6 |. 8BCC           MOV ECX,ESP

100330A8 |. 8965 EC        MOV DWORD PTR SS:[EBP-14],ESP

100330AB |. 68 10030710    PUSH skinppwt.10070310                   ; ASCII "UIPOWER"

100330B0 |. E8 E3E9FCFF    CALL skinppwt.10001A98

100330B5 |. FF35 A8270710 PUSH DWORD PTR DS:[100727A8]

100330BB |. 834D FC FF     OR DWORD PTR SS:[EBP-4],FFFFFFFF

100330BF |. E8 B7F10000    CALL skinppwt.1004227B

100330C4 |. 83C4 14        ADD ESP,14

100330C7 |. 83F8 06        CMP EAX,6

100330CA |. 75 18          JNZ SHORT skinppwt.100330E4

100330CC |. 6A 05          PUSH 5                                   ; /IsShown = 5

100330CE |. 6A 00          PUSH 0                                   ; |DefDir = NULL

100330D0 |. 6A 00          PUSH 0                                   ; |Parameters = NULL

100330D2 |. 68 64120710    PUSH skinppwt.10071264                   ; |FileName = "http://www.uipower.com/"

100330D7 |. 68 5C120710    PUSH skinppwt.1007125C                   ; |Operation = "open"

100330DC |. 6A 00          PUSH 0                                   ; |hWnd = NULL

100330DE |. FF15 3C840510 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; /ShellExecuteA

100330E4 |> 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]

100330E7 |. 64:890D 000000>MOV DWORD PTR FS:[0],ECX

100330EE |. C9             LEAVE

100330EF /. C3             RETN

最让人讨厌的是这句:

100330BF |. E8 B7F10000    CALL SkinPPWT.1004227B

跟进去就能看到是一个函数MessageBoxIndirect调用.

直接NOP掉。

接着看下面这个:

100330CA |. 75 18          JNZ SHORT skinppwt.100330E4

jump掉:

100330CA   . EB 18          JMP SHORT SkinPPWT.100330E4

这里查找75 18的时候可以把上下文加上,这样:83 F8 06 75 18 6A 05然后替换为83 F8 06 EB 18 6A 05即可。

保存SkinPPWTL.dll。拷贝到两个地方:skin++安装目录的VCcases/Bin目录下和windows目录的system32目录下。

*[软件服务破解]:

有了这个skin++,当然是需要更多皮肤了,而软件本身只提供了不到10张。而正版的用户才能下载官方网站上的皮肤。不管那么多,我到官方网站转了一圈,分析了下网站下载链接,发现了一个好玩的东西。可以通过下面的方法下载到更多的皮肤:

用迅雷新建批量下载任务,这样:

http://www.uipower.com/skindown/hit.asp?id=(*)

(*) 范围115-160。

下载...正常应该能拿到50多张皮肤...Enjoy!

上面是网友gz1X写的部分,我试验了,破解很成功,达到了去掉每次启动程序都弹出的询问注册的CMessageDialog,但是我想加点个人认为有必要的东西:

1、使用的调试软件:

软件:OllyICE

下载链接:http://www.pediy.com/tools/Debuggers/ollydbg/OllyICE.rar

2、软件的使用:

入门可参考:http://hi.baidu.com/hack1015/blog/item/877eef2426bd43034c088d12.html

选择打开要破解的SkinPPWTL.dll文件之后按上述步骤完成修改之后,就有一个保存修改的问题,我在使用的时候找遍了整个菜单栏,硬是没有发现有保存修改这个项的存在,后来发现操作方法如下:

a.被修改处右击,选择“复制到可执行文件”,选择“所有修改”

b.出现提示框“把选中的内容复制到可执行文件”,选择“全部复制”

c.弹出一个新的窗口,直接点X,关闭该子窗口,提示“文件已更改”,选择“是”,再弹“另存为”框,此时不要做任何修改,切记不可改文件名,接着提示“文件已存在”,问是否覆盖,点“是”,覆盖原文件,关闭OllyICE,打完收功。

到此,对于达到最终目的来说,软件的这些操作已经足够,但程序使用后依然存在一个严重问题:程序所有窗口的标题栏右边都有“SKIN++ UNREGISTERED!!!”字样,这样对于一个程序员来说,无异于没做,然而网友gz1X没有将此问题完善。经过调试,终于成功破解,操作步骤如下:

a.在反汇编窗口中右击,出来一个菜单,我们在 查找->所有参考文本字串 上左键点击

b.现在出来另一个对话框,我们在这个对话框里右击,选择“查找文本”菜单项,输入“SKIN++ UNREGISTERED!!!”(注意这里查找内容要区分大小写)来查找,找到一处,位置在 008DACE2.

c.在此行,汇编指令为:push 00920784,这条指令用于将“SKIN++ UNREGISTERED!!!”所在的内存地址传递给子程序,我们只需要将这个地址修改一下就可以改变显示的字符了,这个字符串一共22个字符,压栈的地址最后两位84+22=A6,于是我们将这条指令改为:push 009297A6,保存,退出。

再试试,问题是不是已经解决?

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pbe_sedm/archive/2008/06/12/2538048.aspx

skin++ 终极破解之法的更多相关文章

  1. 非常漂亮滴皮肤skin++ 终极破解之法

    破解includeparametershook汇编windows *[标题]:Skin++通用界面换肤系统V2.0.1破解探讨 *[作者]:gz1X <gz1x(at)tom(dot)com&g ...

  2. 【Xamarin挖墙脚系列:Xamarin的终极破解步骤(更新)】

    前面文章中,我们可以找到对应版本的补丁. Xamarin的 4.0.1717 版本,在补丁的地址中,有作者整理的全部的安装包.迅雷磁力贴: magnet:?xt=urn:btih:9FD298AA61 ...

  3. IntelliJ IDEA 终极破解

    1. 下载破解补丁(JetbrainsCrack-2.6.10-release-enc.jar): http://idea.lanyus.com/jar/JetbrainsCrack-2.6.10-r ...

  4. 意法STM32F1系列MCU单片机解密芯片破解复制

    意法STM32F1系列MCU单片机解密芯片破解复制 STM32F1系列MCU芯片解密: STM32F100解密 | STM32F101解密 | STM32F102解密 | STM32F103解密 |  ...

  5. 怎样破解邮箱password

    破解邮箱password怎样破解邮箱password邮箱在我们的生活中日益成为一个不可或缺的角色.公司与公司之间的商贸往来,学生与老师间的学习交流,以及占非常大部分的私人信件的往来等等非常难离开它.但 ...

  6. 当面对会反制遭破解装置的App该如何顺利提取数据

    在检测App的过程之中,总会遇到比较棘手的,以”侦测是否遭破解的装置”为例,便会是个不好处理的状况.当App具备侦测装置是否已遭Root时,一旦发现装置已遭破解,便会停止运行,等于是只准安装及运行在未 ...

  7. 极验验证码破解之selenium

    这一篇写完很久了,因为识别率一直很低,没办法拿出来见大家,所以一直隐藏着,今天终于可以拿出来见见阳光了. 哈喽,大家好,我是星星在线,我又来了,今天给大家带来的是极验验证码的selenium破解之法, ...

  8. 1 Winform 异步更新控件

    刚才看到有人问为了winfrom中,在大数据绑定的时候出现画面假死的状态,为了解决这个问题希望通过再开一个线程来给控件绑定数据,可是画面还是会假死.现在看到的方法有1.掩耳盗铃法(Control.Ch ...

  9. 龙杰ACR122S NFC读卡器

    龙杰智能卡有限公司(ACS,龙杰智能卡控股有限公司之全资附属公司,香港联交所上市编号:8210)创立于1995年,是亚太地区第一大.全球三大智能卡读写器供应商之一.ACS被<福布斯亚洲>杂 ...

随机推荐

  1. Android学习路线(二十)运用Fragment构建动态UI

    要在Android系统上创建一个动态或者多面板的用户界面,你须要将UI组件以及activity行为封装成模块.让它可以在你的activity中灵活地切换显示与隐藏. 你可以使用Fragment类来创建 ...

  2. css版hover现边框

    需要注意的是  hover中要给盒子加:position:relative; <style type="text/css"> *{margin:0;padding:0; ...

  3. c 跟字符串有关的函数

    1.字符串查找 strstr char * strstr(const char *s1, const char *s2); 在s1中查找s2,如果找到返回首个s2的首地址 char * strcase ...

  4. SQL SERVER 2008 R2 自动备份并删除过期备份数据

        我们的系统维护的过程中肯定需要对数据库进行定期的备份,但是如果定时手工备份的话,不但浪费时间,也不能保证每次都可以按时备份,所以自动备份成为了我们的不二选择,但是定时备份需要定期清理备份文件, ...

  5. Could not load type System.ServiceModel.Activation.HttpModule解决办法

    等注册完成后网站就可以打开了. win2008下提示未能从程序集“System.ServiceModel, Version=3.0.0.0问题解决 在Windows Server 2008中的IIS服 ...

  6. win7 64位 TortoiseSVN-1.8.4客户端安装

    下载地址链接:http://pan.baidu.com/s/1nukeBVz 密码:tc79 (32 64位都有,注意区分) next一路安装 安装好后,在需要和服务器同步的文件夹图标上--鼠标右键- ...

  7. A Byte of Python 笔记(5)函数:定义、形参、局部变量、默认参数、关键参数

    第7章  函数 函数是重要的程序段.它们允许你给一块语句一个名称,然后你可以在程序的任何地方使用这个名称任意多次地运行这个语句块.这被称为 调用 函数. 定义函数 函数通过 def 关键字定义.def ...

  8. C和指针 读书笔记

    准备复习一下之前读过的<C和指针>,主要看之前标记过的地方. 感觉像第一次看的地方再记录一下-- 1.预处理器读入源代码,根据预处理指令对其进行修改,然后将修改后的源代码交给编译器. 2. ...

  9. libcprops

    Install Howto Download the latest epel-release rpm from http://dl.fedoraproject.org/pub/epel/6/x86_6 ...

  10. access数据库 top语句失效解决方法

    使用查询语句  select   top 1  *  from  News  order  by  [PublicTime] desc   就不一定管用了,如果News表里面的PublicTime字段 ...