1050110749 发表于 2021-6-3 13:28

告一段落的一枚CM来挑战

程序无壳无花指令,要求必须脱离 ---> 调试器还可以正常运行,功能一切正常,必须显示验证成功才算破解成功, 爆破逆出正确密匙都行





我为祖国献红花 发表于 2021-6-3 13:56

…………有点难度啊这,刚入门小白,没的思路

湿求了鸭 发表于 2021-6-3 20:21

不知道,这里是不是算法,小白只能搞到这里{:301_998:}
int sub_4010A1()
{
int result; // eax
BOOL v3; //
BOOL v4; //
__int16 *v5; //
__int16 *v6; //
unsigned __int8 *v7; //
unsigned __int8 *v8; //
unsigned __int8 *v9; //
unsigned __int8 *v10; //
int v11; //
void *lpMem; //

lpMem = (void *)sub_40E779(1375797249, (LPCSTR)0x16010006, 8, -1);
v11 = sub_40142C();
do
{
    v6 = (__int16 *)sub_40E779(1375797249, (LPCSTR)0x16010006, 8, -1);
    v4 = sub_401004(v6, &unk_492158) == 0;
    if ( v6 )
      sub_40E743(v6);
    if ( v4 || !v11 )
    {
      v7 = (unsigned __int8 *)sub_40E74F(1, &unk_492159, 0, -1610612479);
      result = sub_40E76D((HWND)0x52010001, (LPCSTR)0x16010003, 8, -1, v7, 0);
      if ( v7 )
      result = sub_40E743(v7);
      goto LABEL_43;
    }
    v8 = (unsigned __int8 *)sub_40E74F(1, &unk_492169, 0, -1610612479);
    sub_40E76D((HWND)0x52010001, (LPCSTR)0x160121C6, 8, -1, v8, 0);
    if ( v8 )
      sub_40E743(v8);
    v5 = (__int16 *)sub_40E779(1375797249, (LPCSTR)0x16010006, 8, -1);
    v3 = sub_401004(v5, &unk_492158) != 0;
    if ( v5 )
      sub_40E743(v5);
}
while ( v3 && !v11 );
dword_4B6730 = 3;
do
{
    if ( dword_4B6734 == 1 )
      break;
    v9 = (unsigned __int8 *)sub_40E74F(1, &unk_492169, 0, -1610612479);
    sub_40E76D((HWND)0x52010001, (LPCSTR)0x160121C6, 8, -1, v9, 0);
    if ( v9 )
      sub_40E743(v9);
}
while ( !dword_4B6734 );
result = dword_4B6734 && v11;
if ( result )
{
    if ( dword_4B6730 != 3 )
      goto LABEL_43;
    v10 = (unsigned __int8 *)sub_40E74F(1, &unk_492169, 0, -1610612479);
    sub_40E76D((HWND)0x52010001, (LPCSTR)0x16010003, 8, -1, v10, 0);
    if ( v10 )
      sub_40E743(v10);
    sub_4023B1();
}
result = dword_4B6734 && v11;
if ( result )
{
    if ( dword_4B6730 != 3 )
      goto LABEL_43;
    sub_40E76D((HWND)0x52010001, (LPCSTR)0x160121C6, 8, -1, "验证成功", 0);
    sub_4023B1();
}
result = sub_40243A();
LABEL_43:
if ( lpMem )
    result = sub_40E743(lpMem);
return result;
}

lichunfeng 发表于 2021-6-3 21:00


这个程序设计的有问题哦,在死线程里面,无限制的启动线程,这样会导致占用大量cpu资源哟,一不小心会卡死。下面给出算法。
/*
我的机器码 1079220497
注册码   CC8885966613305398D53992F
calc_RegCode(机器码);
食用方法,F12浏览器调试工具,粘贴代码,将1079220497替换成你的机器码即可计算
*/
// 计算注册码函数
calc_RegCode(1079220497);

function calc_RegCode(MacCode) {
    // 1 , 4 ,5,8,9
    strRegCode = calc_sub(MacCode, 8, 1) +
      calc_sub(MacCode, 6, 1) +
      calc_sub(MacCode, 3, 2) +
      calc_sub(MacCode, 60, 4) +
      calc_sub(MacCode, 30, 3);
    console.log('得到的注册码: ' + strRegCode);
}
// 事实上,易语言转换十六进制文本是忽略了小数部分,也就是先转为整数再转十六进制
function calc_sub(MacCode, num, sig) {
    let hexI;
    if (sig == 1) {
      hexI = MacCode * num;
    } else if (sig == 2) {
      hexI = parseInt(MacCode / num);

    } else if (sig == 3) {
      hexI = parseInt(MacCode + num);
    } else if (sig == 4) {
      hexI = parseInt(MacCode - num);
    }
    // 转为十六进制文本转为大写 截取右边5位字符串
    let str = hexI.toString(16).slice(-5).toUpperCase();
    // console.log(str);
    return str;

}
页: [1]
查看完整版本: 告一段落的一枚CM来挑战