告一段落的一枚CM来挑战
程序无壳无花指令,要求必须脱离 ---> 调试器还可以正常运行,功能一切正常,必须显示验证成功才算破解成功, 爆破逆出正确密匙都行…………有点难度啊这,刚入门小白,没的思路 不知道,这里是不是算法,小白只能搞到这里{: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;
}
这个程序设计的有问题哦,在死线程里面,无限制的启动线程,这样会导致占用大量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]