现在的位置: 首页 > 综合 > 正文

破解skin++

2013年08月18日 ⁄ 综合 ⁄ 共 3921字 ⁄ 字号 评论关闭

        skin++ 是一款不错的换肤软件,通过它可以非常简单的让自己编写的程序有特别漂亮的界面,官方下载网站www.uipower.com,有试用版和正式版,试用版除了一些功能和售后服务有限制外,还经常在程序运行时弹出提示购买 正版的对话框,下面用两种方法去掉这个对话框。

一,编写监视弹出 提示框 的线程

   道理其实很简单,当提示框弹出时,需要点取消关闭对话框,这正是我们觉得麻烦的,现在何不把这项工作交给程序自动完成。编写一个监视的线程,当这个对话框出现时,就瞬间点掉,由于时间特别短,给我们的感觉像它一直没出现一样,下面讲具体实现。

下在软件安装后,关键的几个文件就是:

           SkinPPWTL.h

         SkinPPWTL.lib

         SkinPPWTL.dll

这里不多解释各文件的用法,相信大家都比较清楚,首先要把dll装入工程。

下面是程序代码:

void CGGApp::SetSkin(CString strSkinFile)
{
 //Init skins.
 //Find the skins file in the Skins directory.
 KillSkinpp();
 strSkinFile=m_strPath+"//Skins//"+strSkinFile;
 BOOL bReg=skinppLoadSkin(strSkinFile.GetBuffer(strSkinFile.GetLength()));
 strSkinFile.ReleaseBuffer(); 
}

void CGGApp::KillSkinpp()
{
 DWORD dwThread;
 HANDLE hThread=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadKill,0,0,&dwThread);
 CloseHandle(hThread);
}

DWORD CGGApp::ThreadKill(LPVOID lp)//注意!这个线程函数的声明是static的!
{
 int iCount=0;
 while (iCount++<10000)
 {
  Sleep(1);
  HWND hWnd=::FindWindow(NULL,"UIPOWER");
  if (hWnd==NULL) continue;
  //
  WPARAM wp=BN_CLICKED<<16 | IDNO;
  ::SendMessage(hWnd,WM_COMMAND,wp,0);
  break;
 }
 return EXIT_SUCCESS;
}

   首先在KillSkinpp()中启动一个监视线程,在线程函数ThreadKill中用FindWindow函数监视窗口UIPOWER(弹出的提示窗口标题)的出现,然后通过SkinPPWTL.dll中的函数skinppLoadSkin加载皮肤文件,当UIPOWER窗口出现时,将点击取消的消息wp=BN_CLICKED<<16 | IDNO通过SendMessage发出,完成点击取消。

二 用ollydbg反汇编SkinPPWTL.dll

   弹出提示窗口的命令是在SkinPPWTL.dll中的函数skinppLoadSkin中出现的,现在通过反汇编将这个函数中的弹出代码屏蔽掉。

  试用版中弹出弹出提示窗口的内容:“Skin++ allows you to add skinning ability to your applications.For informationon obtaining a license to use this control,please visit www.uipower.com or e-mail sales@uipwer.com.Are you registering?”。在ollydbg中进入SkinPPWTL.dll模块,通过字符串参考查找,很容易就可将代码定位到下面这段:

10033126  /$  B8 F8650510   MOV EAX,SkinPPWT.100565F8
1003312B  |.  E8 F0E60100   CALL <JMP.&MSVCRT._EH_prolog>
10033130  |.  51            PUSH ECX
10033131  |.  51            PUSH ECX
10033132  |.  6A 04         PUSH 4
10033134  |.  6A 65         PUSH 65
10033136  |.  51            PUSH ECX
10033137  |.  8BCC          MOV ECX,ESP
10033139  |.  8965 F0       MOV DWORD PTR SS:[EBP-10],ESP
1003313C  |.  68 74120710   PUSH SkinPPWT.10071274                   ;  ASCII "UIPower : Skin++ allows you to   add skinning ability to your applications.For informationon obtaining a license to use this control,please visit www.uipower.com or e-mail  sales@uipwer.com  Are you registering skin++ now ?"
10033141  |.  E8 52E9FCFF   CALL SkinPPWT.10001A98
10033146  |.  8365 FC 00    AND DWORD PTR SS:[EBP-4],0
1003314A  |.  51            PUSH ECX
1003314B  |.  8BCC          MOV ECX,ESP
1003314D  |.  8965 EC       MOV DWORD PTR SS:[EBP-14],ESP
10033150  |.  68 10030710   PUSH SkinPPWT.10070310                   ;  ASCII "UIPOWER"
10033155  |.  E8 3EE9FCFF   CALL SkinPPWT.10001A98
1003315A  |.  FF35 A8270710 PUSH DWORD PTR DS:[100727A8]
10033160  |.  834D FC FF    OR DWORD PTR SS:[EBP-4],FFFFFFFF
10033164  |.  E8 16F20000   CALL SkinPPWT.1004237F
10033169  |.  83C4 14       ADD ESP,14
1003316C  |.  83F8 06       CMP EAX,6
1003316F  |.  75 18         JNZ SHORT SkinPPWT.10033189
10033171  |.  6A 05         PUSH 5                                   ; /IsShown = 5
10033173  |.  6A 00         PUSH 0                                   ; |DefDir = NULL
10033175  |.  6A 00         PUSH 0                                   ; |Parameters = NULL
10033177  |.  68 5C120710   PUSH SkinPPWT.1007125C                   ; |FileName = "http://www.uipower.com"
1003317C  |.  68 54120710   PUSH SkinPPWT.10071254                   ; |Operation = "open"
10033181  |.  6A 00         PUSH 0                                   ; |hWnd = NULL
10033183  |.  FF15 3C840510 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; /ShellExecuteA
10033189  |>  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]
1003318C  |.  64:890D 00000>MOV DWORD PTR FS:[0],ECX
10033193  |.  C9            LEAVE
10033194  /.  C3            RETN

     从10033164  |.  E8 16F20000   CALL SkinPPWT.1004237F跟进去就能看到有一个函数MessageBoxIndirect调用  ,为了防止弹出提示对话框,直接在这里nop掉。下面10033183  |.  FF15 3C840510 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; 处的ShellExecuteA完成了向网站http://www.uipower.com的连接,可以直接跳过这段代码,将1003316F  |.  75 18    JNZ SHORT SkinPPWT.10033189处改为JMP SHORT SkinPPWT.10033189,最后将修改后的文件保存即可。

    虽然试用版通过上面的方法可以去掉一些限制,但如果您做商业开发的话,还是希望能支持正版软件,在官方网站http://www.uipower.com下载,谢谢!

抱歉!评论已关闭.