算法超级简单的CM
突发奇想搞了个算法超级简单的CM,真的超级简单哟。没有任何技术含量。不过呢,个人感觉虽然超级简单,但是找对方法才好破。
另外说下这个CM只能运行在64位系统,在win7和win10测试过了可以运行,其他未知。
附含有重要信息的成功图
希望各位大牛破掉的同时,简述下破解方法呀。。。
whyida 发表于 2018-10-7 11:00
关键函数伪代码,功力不够没看出来,return 0x2244669ADF46 - ((a * 2) ^ 0x128855678);建议放源代码, ...
CM主要算法放在x64代码中,使用开源的wow64ext调用
源码: 苏紫方璇 发表于 2018-10-6 21:45
0x008C1FFC 里的核心算法代码其实就一句return 0x2244669ADF46 - ((a * 2) ^ 0x128855678);
只不过我做 ...
关键函数伪代码,功力不够没看出来,return 0x2244669ADF46 - ((a * 2) ^ 0x128855678);建议放源代码,大家学习一下。
__int64 __cdecl sub_401000(int a1, int a2, __int64 a3, char a4)
{
int v5; // ecx
_QWORD *v6; // edx
int v7; //
__int64 v8; //
__int64 v9; //
__int64 v10; //
__int64 v11; //
__int64 v12; //
__int64 v13; //
__int64 v14; //
int v15; //
int *v16; //
if ( Wow64Process )
{
v5 = a2;
v6 = &a3;
if ( a2 <= 0 )
{
v14 = 0i64;
}
else
{
v6 = &a4;
v5 = a2 - 1;
v14 = a3;
}
if ( v5 <= 0 )
{
v13 = 0i64;
}
else
{
--v5;
++v6;
v13 = *(v6 - 1);
}
if ( v5 <= 0 )
{
v12 = 0i64;
}
else
{
--v5;
++v6;
v12 = *(v6 - 1);
}
if ( v5 <= 0 )
{
v11 = 0i64;
}
else
{
--v5;
++v6;
v11 = *(v6 - 1);
}
v8 = (signed int)v6;
v9 = 0i64;
v10 = v5;
v15 = 0;
LOWORD(v15) = __FS__;
v16 = &v7;
JUMPOUT(4333, 4198637);
}
return 0i64;
}
0xA6B9C9B3 ^ 0xA6ABFDE5=0x123456,edx=0 .
008C1FFC | E8 3FFEFFFF | call cm.8C1E40 |
008C2001 | 314424 08 | xor dword ptr ss:,eax |
008C2005 | 8D4424 08 | lea eax,dword ptr ss: |
008C2009 | 315424 0C | xor dword ptr ss:,edx |
008C1FFC 计算eax,edx .好像只能暴力算号。 感谢分享 感谢分享。
感谢分享。 难受。。就大概知道,判断输入长度是否大于0x10 一个分支。然后 最后是有个大整数A A ^= FUN(XXXXX) 最后 printf("%s",A) ....小白问下ida那些很多函数 , 作者自己写的我有些还大概能看看。很多函数都是进去就一个函数,或者莫名很长一个函数,或者直接返回一个值。。。。看的莫名其妙的。。这玩意有点好的教程不?还有比如易语言很多按钮事件这些都不能f5。。。小白真心求教 呜呜呜~,我可以直接改内存吗{:1_907:}:wwqwq 我要爆破它,(*^__^*) 嘻嘻…… 密匙:1122a706fe44
符合运算结果eax=0x123456,edx=0,所以估计是对的吧
没什么方法,猜的 本帖最后由 凉游浅笔深画眉 于 2018-10-6 18:18 编辑
貌似有点难度,大数运算看不懂。。
本帖最后由 凉游浅笔深画眉 于 2018-10-6 18:26 编辑
灰灰。 发表于 2018-10-6 16:17
密匙:1122a706fe44
符合运算结果eax=0x123456,edx=0,所以估计是对的吧
暴力跑的
这题有无数解:
1.11220xa706fe44
2.FFE1122a706fe44
3.FFE1122a706fe44
3.FFF1122a706fe44
以及相似解:
4.FFFF22a2a706fe44
应该是__int64 高位为0,低位0x123456
但是其实只需要满足edx的dl位是0就行了。