新手破解练习Crackme160之120 - CRONOS1

这个程序有点复杂, 先跳过~有空再来研究, solly大佬说win10不能运行, 我这边win10能正常运行~
先记录大佬的注册机代码:

#include <iostream>
 
void getEnv();
 bool checkRegister(char * name, char *code);
 int getRegister(char * name);
 
int main(int argc, char** argv) {
         
        ////  
        getEnv(); 
        ////
        char name[] = "solly88";  /// 需要什么名字,自己改!!! 
        //char name[] = "52pojie.cn";
        //char code[] = "1234567890ABC";
        int chk = getRegister(name);
         
        return 0;
 }
 
bool checkRegister(char * name, char *code) {
        long s, d, key = 0;
        for(int i=0; i<6; i++) {
                s = name[i] * name[i] + code[i];
                d = (code[i+6] - 96) * 26;
                s = s + d - 96;
                key = key | s;
        }
        printf("key = %X\n", key);
        key = key & 0xFF;
         
        return (key==0)?true:false;
 }
 
int getRegister(char * name) {
        char code[16] = {'\0'};
        long s, d, key = 0;
        for(int i=0; i<6; i++) {
                for(int j=0x41; j<(0x41+26); j++) {
                        s = name[i] * name[i] + j;
                        bool b = false;
                        for(int k=0x41; k<(0x41+26); k++) {
                                d = (k - 96) * 26;
                                if(((s + d - 96) & 0xFF) == 0) {
                                        code[i+6] = (char)k;
                                        b = true;
                                        break;
                                }
                        }
                        if(b) {
                                code[i]   = (char)j;
                                break;
                        }
                }
        }
        ///
        code[12] = '\0';
        if(code[0] != '\0') {
                bool b = checkRegister(name, code);
                if(b) {
                        printf("register code: %s\n", code);
                } else {
                        printf("no register code: %s\n", code);
                        return -1;
                }
        } else {
                printf("not found register code\n");
        }
        return 0;
 }
 
void getEnv() {
        union {
                char env[4];
                long code;
        } env1, env2;
         
        for (long i = 0x20202020; i<0x7E7E7E7F; i++) {
                if (((i * 0x00DA7949) & 0xFFFFFFFF) == 0x6E8E9964) {
                        //printf("%X%X%X%X\n", i & 0xFF, (i>>8) & 0xFF, (i>>16) & 0xFF, (i>>24) & 0xFF);  /// 44524541
                        env1.code = i;
                        break;
                }
        }
 
        for (long i = 0x2020; i<0x7E7F; i++) {
                if (((i * 0x2262AD4D) & 0xFFFFFFFF) == 0x55DE1729) {
                        //printf("%X%X\n", i & 0xFF, (i>>8) & 0xFF);  /// 4D53
                        env2.code = i;
                        break;
                }
        }
         
        char env[16];
        ////
        env[0] = env1.env[0];
        env[1] = env1.env[1];
        env[2] = env1.env[2];
        env[3] = env1.env[3];
        env[4] = env2.env[0];
        env[5] = env2.env[1];
        /////
        env[6] = '=';
        /////
        env[7] = env[0];
        env[8] = env[3];
        env[9] = env[1];
        env[10] = env[2];
        env[11] = env[5];
        ////
        env[12] = '\0';
         
        ////
        printf("Environment variable String: %s\n", env);
 }

计算结果示例:
Environment variable String: DREAMS=DARES
key = 3F00
register code: ACVVMBGVQQUK

 
 
 
这是160个软件part1
这是160个软件part2

1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载

新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~

下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~
OD界面布局

posted @ 2024-07-24 08:43  hankerstudio  阅读(8)  评论(0)    收藏  举报