ICEY 发表于 2021-1-24 11:24

追码(等级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 12:10

本帖最后由 1006442347 于 2021-1-24 13:46 编辑

爆破方法
00416000    在这里mov eax,3755 ret

追码成功 密码624518937


输入的密码不能重复,且经过异或后的数都会压栈。
之后会经过不断对比大小,然后顺序正确就成功,很有意思的CrackMe

Li1y 发表于 2021-1-24 14:32

v11是第n个数,v12是第n+1个数,v11<v12,从小到大排列

根据输入通过switch的分支将dword_407000的数据push进栈,因为是栈结构,所以输入顺序是反过来从大到小

另外,发现还有个TLS0跟main函数逻辑一模一样,不过少了输入函数,不知道是编译问题还是楼主调试时候忘记去掉了

吾爱破解1111 发表于 2021-1-24 21:44

大哥写的必须支持


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);
      }
}

iiinnn 发表于 2021-1-25 00:23

你们太厉害了,学习了!

jy04468108 发表于 2021-1-25 09:31

排序,挺好玩的。



页: [1]
查看完整版本: 追码(等级4)