首页
社区
课程
招聘
[旧帖] Skinsharp1.0.6.6 unicode版本---菜鸟爆破过程 0.00雪花
2011-2-4 00:17 2610

[旧帖] Skinsharp1.0.6.6 unicode版本---菜鸟爆破过程 0.00雪花

2011-2-4 00:17
2610
唠叨一下:
       今天大年初一,祝大家新年快乐,万事如意。祝论坛越来越好。
       Skinsharp这个皮肤很好用,只是在使用作者发布的免费版本时,在界面的右上角有一个小衬衫,所以想试着去掉这个水印,本人菜鸟一个,这个软件的破解版也很多,我也是参考别人文章才搞了个爆破,主要是说说我破解的过程(外壳是一个upx的压缩壳,我就不说了)。
破解纯属用于学习别无他意。
参考:
http://www.52pojie.cn/thread-67231-1-1.html
曲折之路:
      本人小菜破解时走了很多弯路,拿出来分享给大家。
      (1)这个水印是绘制上去的所以想从这里入手爆破,幸好略懂windows下的编程知道几个api,我就从BitBlt这个API入手,他原型如下
BOOL BitBlt(
HDC hdcDest, // handle to destination DC
int nXDest, // x-coord of destination upper-left corner
int nYDest, // y-coord of destination upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
HDC hdcSrc, // handle to source DC
int nXSrc, // x-coordinate of source upper-left corner
int nYSrc, // y-coordinate of source upper-left corner
DWORD dwRop // raster operation code
);
我想在绘制那个小水印的宽度(16)上和高度(16)上下条件断点一定可以了,没想到没有找到我要找到我要的。
     (2) 除了BitBlt我还知道另外一个绘图的API DrawDibDraw 他的原型如下:

BOOL DrawDibDraw(
HDRAWDIB hdd,
HDC hdc,
int xDst,
int yDst,
int dxDst,
int dyDst,
LPBITMAPINFOHEADER lpbi,
LPVOID lpBits,
int xSrc,
int ySrc,
int dxSrc,
int dySrc,
UINT wFlags
);
通过参数我们可以知道他有一个位图的头和位图的数据,我hook了他,把他的位图数据保存下来

结果没有发现那个小衬衫的图,还是失败。
     (3)打听了一个朋友,他说这个皮肤的授权形式是在exe文件头里写入数据,我试了一下,写入特殊数据然后ReadFile下断点读取内存数据,然后下硬件读取断点找到了程序验证的代码起始地方:
      1001824A D2D8 rcr al,cl
可惜水平有限,无法写出注册码。惭愧!!

爆破方法:
     最后一查资料我惭愧了,原来这个软件的破解文章已经有好多了,但完全的照搬是不行的,参考下思路我爆破掉了这个软件,爆破的思路主要是让绘制图形的api失去作用,给他传递假的绘制的设备句柄。
还是绘图的API ,不过这个API我没有接触过, TransparentBlt,他的原型:
BOOL TransparentBlt(
HDC hdcDest, 就是这个参数--传递假句柄就不能绘制了) // handle to destination DC
int nXOriginDest, // x-coord of destination upper-left corner
int nYOriginDest, // y-coord of destination upper-left corner
int nWidthDest, // width of destination rectangle
int hHeightDest, // height of destination rectangle
HDC hdcSrc, // handle to source DC
int nXOriginSrc, // x-coord of source upper-left corner
int nYOriginSrc, // y-coord of source upper-left corner
int nWidthSrc, // width of source rectangle
int nHeightSrc, // height of source rectangle
UINT crTransparent // color to make transparent
);

     (1)下TransparentBlt API件断点停在:
     72B61320 MSIMG32.TransparentBlt 8BFF mov edi,edi
     alt+f9回到用户代码记录下来(反复操作共记录两处):

     1000AEC8 FF15 3C610210 call dword ptr ds:[1002613C] ; MSIMG32.TransparentBlt

      1000AF4A FF15 3C610210 call dword ptr ds:[1002613C] ; MSIMG32.TransparentBlt

       (2)分别在这两个地方下条件断点,我知道那个小图标的大小为(16*16)在API中是第四个和第五个参数,shift+f2下这个样的断点[esp+10]==10(这里为16进制)。
     (3)通过条件断点我们可以排除一处1000AF4A因为这里从未断下来。
     (4)可以想到1000AEC8这里就是我们要找的了,按照资料所说,我们将这里的,push edx,改为push eax,结果水印没有了,但外围的边框也没有了.



可以想到这个地方除了画水印还有绘制边框功能。
     (5)这样就想可不可以找到是谁调用了这个函数,然后重新载入运行,断下来后在
      1000AED1 C3 retn
        处F4,然后F8来到下面地方:
        10021632 50 push ebp //主界面
      更改为push eax 主界面的水印真的没了,

但菜单的水印还在,下同样的断点分辨不出那个是菜单的水印绘图,好在我们知道,菜单的绘图设备同主界面的绘图设备肯定不是同一个,由此我们可以下这个条件断点:
       [esp+10]==10&&[esp[esp+10]==10&&[esp]!=4c
然后在标题栏上右键程序就断下来了同样的方法F4后F8来到这里
       1000F37F 52 push edx //菜单

将这里也更改为push eax 结果成功了
       (6)但透明效果依然有问题,保存一次dll然后下同样的断点可以来到:
       10005059 57 push edi //透明
       改为push eax 。大功告成

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞6
打赏
分享
最新回复 (7)
雪    币: 27
活跃值: (631)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
bklang 1 2011-2-4 00:23
2
0
第一次发文章,搞的太乱了,真是惭愧啊
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
依旧爱 2011-2-4 00:45
3
0
额 看不明白 看来我还太菜了
雪    币: 27
活跃值: (631)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
bklang 1 2011-2-4 00:47
4
0
我也菜得不行,否则就不会拿个爆破的到这里了
雪    币: 504
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
crackdung 2011-2-4 14:58
5
0
破解這個很簡單的,下點在GetClientRect就搞定了
雪    币: 27
活跃值: (631)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
bklang 1 2011-2-4 15:21
6
0
多谢指点,本人菜得要命,搞了三四天都才搞好。
雪    币: 27
活跃值: (631)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
bklang 1 2011-3-2 19:57
7
0
得到邀请码了,受宠若惊啊!

庆祝一下!!!!!!!!!
雪    币: 504
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
crackdung 2011-3-2 20:25
8
0
這個控件很久沒更新了
游客
登录 | 注册 方可回帖
返回