菜鸡写的一个CM,估计一分钟就被破了
本帖最后由 jidesheng6 于 2019-7-19 10:45 编辑E语言写的
成功截图如下
无恶意代码
无壳无花,写着玩的
大家随意吧
我这只小菜鸡需要学习的还有很多
今天编译代码有个地方写错了导致信息框是空白的,现在正常了
是这样的,这个程序里面加了很多无用字符串,我定义了大概5个以上的falied和success,然后随便生成了几个md5在里面,至于算法,我觉得饿没啥算法,取当前时间戳,
然后bas64编码一次时间戳,然后取计算机名,base64一次计算机名然后把base64
过的两个时间戳和计算机名再进行十次base64编码,然后两者相加生成新的base,然后颠倒生成的base,再从其中取出来随机10个字符作为随机码,所以每一秒甚至每一毫秒那个码都是在不断变化的,其次那个进入你们点击了没啥用,我在那里只写入了弹错误框,然后success和falied我都转换成字节集了,然后再加一次密,弹出信息框再进行解密,其次整个程序是用时钟循环执行所以会不断验证编辑框里面内容,当内容正确,就会弹出信息框点击一次确定时钟结束,如果不正确在2分钟后会进入死循环,当然这个它好像没执行估计我写错了,不过还是很佩服各位大佬啊,膜拜膜拜,我还是很菜
本帖最后由 迷雾 于 2019-7-18 14:44 编辑
不知道这样算不算
程序有个函数不断的校验密码
函数入口是:0x0401194
拖入IDA分析后备注如图
void TimerFunc()
{
int i; // ecx
void *v1; //
int v2; //
void *v3; //
void *v4; //
void *v5; //
void *v6; //
void *v7; //
void *v8; //
void *v9; //
void *v10; //
BOOL v11; //
void *v12; //
LPVOID v13; //
LPVOID v14; //
LPVOID v15; //
LPVOID v16; //
LPVOID v17; //
LPVOID v18; //
LPVOID v19; //
LPVOID lpMem; //
v19 = 0;
v18 = 0;
v17 = 0;
v16 = 0;
v15 = 0;
v14 = 0;
v6 = (void *)sub_4015CA(0, 0, 0, 0, 0, 0, 0); // v13 = 1563428573000
lpMem = v6;
v13 = (LPVOID)lib_sub_40406F((void (__cdecl *)(__int64 *, int, char *))sub_404D40, 1);
v7 = (void *)base64(&v13); // v14 = MTU2MzQyOTE0NzAwMA== (1563428573000)
if ( v13 )
FreeMemory(v13);
if ( v19 )
FreeMemory(v19);
v19 = v7;
v13 = sub_40276E(); // 调用GetComputerNameA 获取用户名
v1 = v13;
if ( v18 )
FreeMemory(v18);
v18 = v1;
v13 = (LPVOID)lib_sub_40406F((void (__cdecl *)(__int64 *, int, char *))sub_404D40, 1);
v8 = (void *)base64(&v13); // 再次base64编码 用我的用户名
if ( v13 )
FreeMemory(v13);
if ( v17 )
FreeMemory(v17);
v17 = v8;
for ( i = 0; ; i = v2 )
{
v2 = i + 1;
if ( i + 1 > 10 )
break;
v13 = (LPVOID)lib_sub_40406F((void (__cdecl *)(__int64 *, int, char *))sub_404D40, 1);
v9 = (void *)base64(&v13);
if ( v13 )
FreeMemory(v13);
if ( v19 )
FreeMemory(v19);
v19 = v9;
v13 = (LPVOID)lib_sub_40406F((void (__cdecl *)(__int64 *, int, char *))sub_404D40, 1);
v10 = (void *)base64(&v13);
if ( v13 )
FreeMemory(v13);
if ( v17 )
FreeMemory(v17);
v17 = v10;
}
v13 = (LPVOID)sub_401093((char)v19);
v3 = v13;
if ( v16 )
FreeMemory(v16);
v16 = v3;
v13 = 0;
v4 = sub_40285E(&v16, 0, 0);
if ( v15 )
FreeMemory(v15);
v15 = v4;
v13 = (LPVOID)sub_402F9C(10);
v5 = v13;
if ( v15 )
FreeMemory(v15);
v15 = v5;
if ( v14 )
FreeMemory(v14);
v14 = "c3VjY2Vzcw"; // success的base64编码
v13 = (LPVOID)GetEditText(1375797249, (LPCSTR)0x160125D0, 8, -1);// 取编辑框内容
v11 = sub_4010EF(v13, v15) == 0;
if ( v13 )
FreeMemory(v13);
if ( v11 ) // 爆破到这里就可以
{
sub_4031CF(2, 1, 5, 1);
v13 = 0;
v12 = (void *)sub_4033E7(&v14, 0, 0);
sub_40118C(v6, 0, 0);
lib_sub_40406F((void (__cdecl *)(__int64 *, int, char *))showMsgBox, 4);
if ( v12 )
FreeMemory(v12);
}
if ( lpMem )
FreeMemory(lpMem);
if ( v19 )
FreeMemory(v19);
if ( v18 )
FreeMemory(v18);
if ( v17 )
FreeMemory(v17);
if ( v16 )
FreeMemory(v16);
if ( v15 )
FreeMemory(v15);
if ( v14 )
FreeMemory(v14);
}
一分钟。。。已尝试十几分钟,有点扮猪吃老虎的感觉 搜索到falied,搜索不到success,10分钟破解不了呀? matao5168 发表于 2019-7-18 12:46
搜索到falied,搜索不到success,10分钟破解不了呀?
搜索到的falied应该是个打掩护的,故意误导用的 其实就是差一丢丢就成功了{:1_911:} 怎么说 在内存中把failed改成succes表面上也可以啊 楼主把真的flag放出来看一下呗 Dyingchen 发表于 2019-7-18 14:24
怎么说 在内存中把failed改成succes表面上也可以啊 楼主把真的flag放出来看一下呗
明天的吧,今天有点忙 跳转太多了,faild倒是可以搜出来,sucess就没有影子了 我靠,我刚看见,正确英文是不对的吧
zz100179 发表于 2019-7-18 14:29
我靠,我刚看见,正确英文是不对的吧
success,可以搜一下。