爱喜羊羊网-爱喜羊羊论坛-喜灰论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 304|回复: 3

浅谈SkinSharp的破解----初级教程 会反汇编的无视掉

[复制链接]

1

主题

5

帖子

5

积分

初至草原

Rank: 1

积分
5
发表于 2011-7-13 17:57:57 | 显示全部楼层 |阅读模式
本帖最后由 Honoka55 于 2019-4-21 21:45 编辑

。表示最近接触到Skinsharp这个皮肤库。。。用起来也还好。。。毕竟是轻量级的换肤库
但是 看应用了Skinsharp皮肤的程序很不爽。。。标题栏有个小衣服。。严重影响界面。。
还有 这种东西应该免费给大家用 怎么可以收费呢。。。。。
言归正传。。破解这个其实很弱智的。。现在开始
那个。。。为了比较好调试DLL(SkinHu.dll )我先用MFC写了个EXE来调用DLL 再用OD(Ollydebug)载入EXE
怎么破解收费限制呢。。。我就只写一段实现代码给大家看看。。。会看得懂C的话你可以搬到易语言上去
        HMODULE hSkinBase = GetModuleHandleW(L"SkinHu.dll");
        unsigned char *pPatchByte = NULL;
        DWORD dwOldProtect = 0;
        if ( hSkinBase == NULL )
        {
                return ;
        }
        //10021632       55                   push    ebp
        pPatchByte = (unsigned char*)((DWORD)hSkinBase + 0x00021632);
        VirtualProtectEx(GetCurrentProcess(),pPatchByte,4,PAGE_EXECUTE_READWRITE,&dwOldProtect);
        *pPatchByte = 0x50;
        //1000F37F       52                   push    edx
        pPatchByte = (unsigned char*)((DWORD)hSkinBase + 0x0000F37F);
        VirtualProtectEx(GetCurrentProcess(),pPatchByte,4,PAGE_EXECUTE_READWRITE,&dwOldProtect);
        *pPatchByte = 0x50;
嗯哼。。。那个其他版本大家自己去找下偏移
OK 现在开始去小衣服。。。
我们知道 标题一般都是使用DrawTextA/W画上去的 所以说画标题的地方一定会有小衣服
于是bp DrawTextW 断下的时候观察堆栈 看到主窗口的标题就可以返回了。。。我这里第一次断下是在这里:
1002177D     51                     push    ecx
1002177E     FF15 C8620210          call    dword ptr [0x100262C8]           ; USER32.DrawTextW  //这里就是DrawTextW了。。。。
10021784     8B5424 10              mov     edx, dword ptr [esp+0x10]
10021788     8B4424 18              mov     eax, dword ptr [esp+0x18]
找到了DrawTextW以后怎么做呢。。。我们往上面翻一下这个函数。。。我们可以看到GetWindowText、SetTextColor之类。。。所以就可以断定这就是画界面的函数了 于是在函数头下断点 断下后单步跟踪 到这里的时候 出现了一些可疑的数字:
100215F0     A1 68CC0210            mov     eax, dword ptr [0x1002CC68]      ; eax = 10
100215F5     8B0D 64CC0210          mov     ecx, dword ptr [0x1002CC64]      ; ecx = 10
大家可以看到 在注释这一栏eax和ecx都是10 而我们标题栏那个小衣服大概大小也是10 于是猜测这里就是画小图标的函数。。。
                                    
                                    
                                
回复

使用道具 举报

1

主题

5

帖子

5

积分

初至草原

Rank: 1

积分
5
 楼主| 发表于 2011-7-13 17:58:57 | 显示全部楼层

后面还有一段
100215FB     8B15 5CCC0210          mov     edx, dword ptr [0x1002CC5C]
10021601     57                     push    edi
10021602     68 FF00FF00            push    0xFF00FF
10021607     50                     push    eax
10021608     51                     push    ecx
10021609     6A 00                  push    0x0
1002160B     6A 00                  push    0x0
1002160D     52                     push    edx
1002160E     8B96 B0010000          mov     edx, dword ptr [esi+0x1B0]
10021614     50                     push    eax
10021615     8B86 B8010000          mov     eax, dword ptr [esi+0x1B8]
1002161B     51                     push    ecx
1002161C     8D4410 F0              lea     eax, dword ptr [eax+edx-0x10]
10021620     99                     cdq
10021621     2BC2                   sub     eax, edx
10021623     D1F8                   sar     eax, 1
10021625     50                     push    eax
10021626     8B86 B4010000          mov     eax, dword ptr [esi+0x1B4]
1002162C     2BC1                   sub     eax, ecx
1002162E     83E8 0C                sub     eax, 0xC
10021631     50                     push    eax
10021632     55                     push    ebp
10021633     E8 1898FEFF            call    1000AE50
这时候我们适当处理掉一些参数。。比如把10021632的push    ebp改成push    eax怎么样。。现在运行下程序 小衣服木有掉了。。。
                                    
回复

使用道具 举报

1

主题

5

帖子

5

积分

初至草原

Rank: 1

积分
5
 楼主| 发表于 2011-7-13 17:59:27 | 显示全部楼层

对了。。好像菜单栏还有小衣服。。。
不想说太多。。说下实现原理吧。。。
第一要得到菜单的Rect 所以我们把目标锁定在GetMenuItemRect上
在GetMenuItemRect上下断点,切换窗口时立即断了下来,于是加上一个条件筛选掉主窗口的hMenu,就是判断[ESP+4]!。
在这个函数内找压栈比较多的函数 这时候要耐心 过一会儿找到这个:
1000F339     8B3D AC620210          mov     edi, dword ptr [0x100262AC]      ; USER32.OffsetRect
同2L 把Call前面的那个push改掉 就木有小衣服了
                                    
回复

使用道具 举报

1

主题

5

帖子

5

积分

初至草原

Rank: 1

积分
5
 楼主| 发表于 2011-7-13 18:00:02 | 显示全部楼层

总结一句。。。。
破解skinsharp的三种方法:
将以下三处改为push eax
1000F36F    52              push    edx
10005059    55              push    ebp
100215B2    55              push    ebp
                                    
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋| 爱喜羊羊 |(鲁ICP备19045170号|鲁公网安备 37020202001272号) |网站地图|网站地图

GMT+8, 2020-3-31 10:02 , Processed in 0.019136 second(s), 11 queries , Gzip On, MemCached On.

power by 爱喜羊羊

© 2018 喜羊羊与灰太狼官方团|喜灰影音工作室

快速回复 返回顶部 返回列表