唠叨一下:
今天大年初一,祝大家新年快乐,万事如意。祝论坛越来越好。
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了他,把他的位图数据保存下来
爆破方法:
最后一查资料我惭愧了,原来这个软件的破解文章已经有好多了,但完全的照搬是不行的,参考下思路我爆破掉了这个软件,爆破的思路主要是让绘制图形的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
);