zbnysjwsnd8 发表于 2018-1-14 23:31

发一个很简单的CrackMe

本帖最后由 zbnysjwsnd8 于 2018-2-8 11:18 编辑

成功提示明显 无花无壳无反调试。



破解成功给加分。
追码成功的分数多一些。

简单说一下为什么成功不是Success
如果仔细分析按钮事件的算法就会发现 这个验证根本就没办法通过,除非爆破,也就是说这个按钮事件是忽悠人的。

pk8900 发表于 2018-1-16 00:49

楼主看下我的测试分析代码,路子对不对?
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include <windows.h>
#include <iomanip>
#include <string>
using namespace std;

void main()
{
        char * yourName = new char;

        long v16 = 0;
        double v18 = 0;
        double v17 = 0;
        char * pEnd;
        double v3 = strtol(yourName, &pEnd, 10);

        double v4 = v3;
        double v_tmp = 0;
        int jump=0 ;   //分步测试开关
        //0-用户名测试,1-数字算术部分:";
        if (!jump)
        {
                cout << "输入用户名:";
                gets(yourName);
                cout << endl;
                goto test_string;
        }
        else
        {
                cout << "输入测试数字:";
                cin >> v3;
               
    }
        while (1)
        {
                v4 = v18 - v3;
                if (v18 - v3 < 0.0)
                        v4 = -v4;
                if (v4 > 0.0000001)
                        v17 = v18 + 2.7182818284 / (v18 + 1.0) + 1.0;
                if (v18 - 1000.0 > 0.0000001)
                {
                        break;
                        cout << "通过了" << endl;
                }
                v_tmp = v3 + 2.7182818284 / (v3 + 1.0) + 1.0 - v17;
                if (v_tmp > 0.0000001)
                {
                        cout << "数字没有通过" << endl;
                        goto over;
                }
                v18 = v18 + 0.0001;
        }
        goto over;
test_string:
        long length_s = strlen(yourName);
        unsigned char * clist = new unsigned char;
        cout << "ok" << endl;
        //字符串顺序添充
        for (int x = 0; x <= 0x100; x++)
                clist = x;
        //生成第一次加密表
        int c = 0;
        for (int x = 0; x < 0x100; x++)
        {
                c += yourName;
                c = (c + clist) & 0xFF;
                c &= 0xFF;
                swap(clist, clist);
        }
        //输出第一次加密表
        cout << "输出第一次加密表" << endl;
        for (int x = 0; x <= 0x100; x++)
                cout << hex << uppercase <<(int) clist << " ";
        cout << endl;
        //生成第二次加密表即窗口标题字节集
        unsigned charlist02[] = {0x8C, 0x6B, 0x43, 0x27, 0x10, 0x4A, 0xAA, 0x1E, 0x9C, 0xDA, 0xD1, 0x84, 0xF0, 0xA9, 0x00, 0x95};
        int tmp = 0,tmp_2=0,tmp_ebp=0;
        for (int x = 0; x < 0x10; x++)
        {
                tmp++;
                tmp &= 0xFF;
                tmp_2 = clist;
                tmp_ebp+=tmp_2;
                tmp_ebp &= 0xFF;
                swap(clist, clist);
                list02 ^= clist[(clist + clist) & 0xFF];
        }
        double v5 = v3;
//        cout << clist << endl;

        //输出第二次加密表即窗口标题字节集
        cout << "输出第二次加密表即窗口标题字节集" << endl;
        for (int x = 0; x < 0x10; x++)
        {
                cout << hex << uppercase<<(int)list02 << " ";
        }
        cout << endl;
over:
        system("pause");
}

yAYa 发表于 2018-1-14 23:48

是success! 么?

t5456290 发表于 2018-1-15 00:18

之前都没玩过也 来试试看

zxtsky 发表于 2018-1-15 09:52

尝试一下,是这个吗{:300_956:}https://www.52pojie.cn/forum.php?mod=image&aid=1031578&size=300x300&key=7baf4d910b07a3d9&nocache=yes&type=fixnone

暗丶夜 发表于 2018-1-15 12:21

应该不是这个提示吧?是这个提示的话会用搜字符串功能的都会破了呀{:301_999:}

byh3025 发表于 2018-1-15 15:13

按照楼主的水平应该没这么简单吧,一个跳转解决

pk8900 发表于 2018-1-16 00:27

这个感觉一点也不简单啊,可以修改代码吗?算法弄的差不多了,算术部分没找到能通过的数,字符二次加密,要想生成想要的标题,得反推第一次加密生成想要的256个字符加密表,还是解决了算术问题就对了呢?

zbnysjwsnd8 发表于 2018-1-16 16:23

pk8900 发表于 2018-1-16 00:27
这个感觉一点也不简单啊,可以修改代码吗?算法弄的差不多了,算术部分没找到能通过的数,字符二次加密,要 ...

能找到算法很厉害啊
加油吧。

SuperMaxine 发表于 2018-1-16 20:41

萌新问一句,这种CM是只要跳转出来就可以还是要找到正确值的算法呢?刚把汇编摸一遍了听说这个简单准备第一次上手试一下
页: [1] 2 3
查看完整版本: 发一个很简单的CrackMe