我这里和大家声明一下 我这个是文件 是来自吾爱破解的creakme 160 导航链接 帖子里面有更厉害的思路
本帖是编号为44的creakme
因为最近一直在看数据结构的书 过几天打算玩玩linux 再看些书 毕竟现在我还是有点菜 等java学的可以了再去看安卓 现在还是先做一些windows 下的逆向 等有空了 就去做一些 linux的逆向还有安卓的逆向 如果有机会还会去试一试pwn 慢慢来 感觉还是有机会能学到知识的!然后我们现在开始看这个creamke
然后一开始的页面是这样的
随便输入后页面是这样的
下面的一行字变了 有没有 然后我们试着用od搜索字符串 发现
然后往下看见了我们想看到的字符 我们进去看看
到这里其实我们就差不多了 但是这里有个问题 就是为什么要取输入字符的前五位和输入字符前的一位 不知道为什么 当时我还以为我看错了 多调试了好几遍才出来
注册机如下
#include<stdio.h>
#include<string>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
using namespace std;
char p[]={0x70, 0x18, 0xEB, 0x66, 0xB2, 0x25, 0xEB, 0x62, 0xB2, 0x42, 0xEB, 0x5E, 0xB2, 0x0C, 0xEB, 0x5A,
0xB2, 0x0D, 0xEB, 0x56, 0xB2, 0x06, 0xEB, 0x52, 0xB2, 0x36, 0xEB, 0x4E, 0xB2, 0x2B, 0xEB, 0x4A,
0xB2, 0x17, 0xEB, 0x46, 0xB2, 0x2F, 0xEB, 0x42, 0xB2, 0x13, 0xEB, 0x3E, 0xB2, 0x82, 0xEB, 0x3A,
0xB2, 0x9B, 0xEB, 0x36, 0xB2, 0x92, 0xEB, 0x32, 0xB2, 0x03, 0xEB, 0x2E, 0xB2, 0x63, 0xEB, 0x2A,
0xB2, 0x21, 0xEB, 0x26, 0xB2, 0x42, 0xEB, 0x22, 0xB2, 0x5C, 0xEB, 0x1E, 0xB2, 0x29, 0xEB, 0x1A,
0xB2, 0xC7, 0xEB, 0x16, 0xB2, 0x66, 0xEB, 0x12, 0xB2, 0x58, 0xEB, 0x0E, 0xB2, 0x0A, 0xEB, 0x0A,
0xB2, 0x28, 0xEB, 0x06, 0xB2, 0x50, 0xEB, 0x02, 0xB2, 0x5D};
int main()
{
unsigned char ans=0x5d;
char temp=0;
char name[300];
printf("请输入您的名字!\n");
scanf("%s",name);
if(strlen(name)<6)
printf("您的名字长度必须大于6!");
for(int i=0;i<5;i++)
{
temp=name[i]-97;
if(temp>0x19)
ans+=0x5d;
else
ans+=p[temp*4+1];
}
printf("注册码是: %d-%d",0+ans,strlen(name)*0x4a7e);
return 0;
}
不知道为啥是无符号的char就行 但是char 好像会出错