我这里和大家声明一下 我这个是文件 是来自吾爱破解的creakme 160 导航链接 帖子里面有更厉害的思路
本帖是编号为48的creakme
其实从上一篇我就开始不上传那些creakme文件了 一是我已经把源文件上传了 大家其实有渠道下载的 二是我感觉也没有多少人看 这样搞也没有什么意思
然后这一个 creakme 看起来比较好玩
随便点几个格子看看
看完了这些窗口 我们拖入od观察一下
其实看到了 IsDlgButtonChecked 就可以知道和我们这个按键有关系了
看到这里的分析其实应该就可以懂了
那么那几个字符是什么 我们来看一下
其实就是我标记的地方(上面有个0x16没有标记上 m其实就是\0的作用)了 这也可以解释上面的ecx为什么等于0x4d 就跳出循环了 然后如果认为可以开心的写注册机了
那就大错特错了 因为这里有个让人比较让人头疼的地方 那就是 他们控件的值并不是按顺序来的 !!!我一开始还在od里面找规律来着(瑟瑟发抖) 所以需要查看他们的控件顺序
这里用的工具如下图所示
测出的值是{97,73,94,22,37,38,33,89,83,21,55,49,72,93,12,82,39,29}
那么可以写出注册机了
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std;
//真正的控件信息 0x4d 是为了最后一位的计算
const long long int TURE=0x328FE;
//实际的信息
long long int slove[20]={97,73,94,22,37,38,33,89,83,21,55,49,72,93,12,82,39,29,0x4d};
long long int slo[20] = {0x16, 0x49, 0x5E, 0x15, 0x27, 0x26, 0x21, 0x25, 0x1D, 0x59, 0x53, 0x37, 0x31, 0x48, 0x5D, 0x0C,0x61, 0x52, 0x4D};
//od 里面的信息
long long int sl[20] = {0x16, 0x49, 0x5E, 0x15, 0x27, 0x26, 0x21, 0x25, 0x1D, 0x59, 0x53, 0x37, 0x31, 0x48, 0x5D, 0x0C,0x61, 0x52, 0x4D};
bool print[20];
void prin()
{
for(int i=0;i<9;i++)
{
printf("%d ",print[i]);
}
printf("\n");
for(int i=9;i<18;i++)
{
printf("%d ",print[i]);
}
}
void sloves(long long int anss,int k)
{
if(anss>TURE||k>=18)
return;
if(anss==TURE)
{
prin();
return;
}
for(int i=k;i<18;i++)
{
print[i]=1;
sloves(anss+slove[i],i+1);
print[i]=0;
}
}
int main()
{
memset(print,0,sizeof(print));
//od里面的计算过程
for(int i=0;i<18;i++)
{
sl[i]*=sl[i+1];
sl[i]*=(i+1);
}//不能直接用控件 因为顺序不同会出错
for(int i=0;i<18;i++)
{
for(int j=0;j<18;j++)
{
if(slove[i]==slo[j])
{
slove[i]=sl[j];
}
}
}
sloves(0,0);
return 0;
}
注册成功!!!!!