追码(等级4)
本帖最后由 ICEY 于 2021-1-24 13:58 编辑最近在整点大事,有点忙,所以RM出的有点慢。往期回顾:
等级1、等级2:https://www.52pojie.cn/thread-1339730-1-1.html
等级3:https://www.52pojie.cn/thread-1340248-1-1.html
无壳无花,老少皆宜!关键判断函数都是我用汇编语言敲出来的。所以IDA无法正常反编译判断函数。(可能是我写的太简陋了吧。)
成功截图:
闪退或者提示wrong均为失败。!关键是追码!但也支持爆破。下载: 本帖最后由 1006442347 于 2021-1-24 13:46 编辑
爆破方法
00416000 在这里mov eax,3755 ret
追码成功 密码624518937
输入的密码不能重复,且经过异或后的数都会压栈。
之后会经过不断对比大小,然后顺序正确就成功,很有意思的CrackMe
v11是第n个数,v12是第n+1个数,v11<v12,从小到大排列
根据输入通过switch的分支将dword_407000的数据push进栈,因为是栈结构,所以输入顺序是反过来从大到小
另外,发现还有个TLS0跟main函数逻辑一模一样,不过少了输入函数,不知道是编译问题还是楼主调试时候忘记去掉了 大哥写的必须支持
int g_Data[] = { 0x66, 0x25B, 0x234, 0x32B, 0x28E, 0x3E4, 0x14, 0xC, 0x7 };
int Cal(int n)
{
int nTemp;
switch (n)
{
case '1':
nTemp = '1' ^ 0x39;
break;
case '2':
nTemp = '2' ^ 0x3E;
break;
case '3':
nTemp = '3' ^ 0x2F;
break;
case '4':
nTemp = '4' ^ 0x24;
break;
case '5':
nTemp = '5' ^ 0x31;
break;
case '6':
nTemp = '6' ^ 0x22;
break;
case '7':
nTemp = '7' ^ 0x17;
break;
case '8':
nTemp = '8' ^ 0x38;
break;
case '9':
nTemp = '9' ^ 0x21;
break;
}
printf("%d---%d\r\n", n - 0x30, g_Data);
return nTemp;
}
int main()
{
for (int i = 0x31; i <= 0x39; i++)
{
Cal(i);
}
} 你们太厉害了,学习了! 排序,挺好玩的。
页:
[1]