首页
论坛
课程
招聘
[原创]看雪CTF2018 第四题 流程 by 青蛙mage
2018-6-24 02:52 1676

[原创]看雪CTF2018 第四题 流程 by 青蛙mage

2018-6-24 02:52
1676

第一步,信息收集

没什么异常

可能使用了MIRACL大数库,以及很多字符串都描述了相近的信息可能性很大

第二步,流程分析

本题带有混淆,IDA有点不灵光了

主流程:

<br>
  unsigned int flag = 0;
  int main()
{   
    //不影响解题的解密() -> serial
    //不影响解题的解密() -> 看雪-京东 CTF 2018
    printf("*****看雪-京东 CTF 2018*****");
    printf("serial:");
    //堆检查()
    //不影响解题的解密() -> success
    //不影响解题的解密() -> error
    char ch[0x18]=0;
    char head[3]=0;
    scanf("%s",&ch);
    if(strlen(ch)>23) {       //最大23位
        printf("error");
        return 0;
    }
    cinstr(a,&ch[3]);
    sharp1(); //flag+1  关键点
    memcpy(head,ch,3);
    for(int i=0;i<3;i++)
	{
        if(!isdigit(head[i]))
		{   printf("error");
            return 0;
        }
    }
    sharp2(); //flag +1  关键点
    if(flag==2)
    {
      printf("success");
    }
    else{
        printf("error");
    }
    system("pause");
}

sharp1:

     void sharp1()
  {
	  mirsys *mip(500, 16);   //初始化
	  big a, b, c, d;
	  //a=d**c mod b
	  temp1 = 0x208CBB7CD6ECC64516D07D978F5F0681F534EAD235D5C49ADD72D2DB840D5304; //不要吐槽,省力
	  temp2 = 0x7da39de66016477b1afc3dc8e309dc429b5de855f0d616d225b570b68b88a585;
	  temp3 = 0x3e9;
	  temp4;
	  cinstr(a, ch[3]);
	  cinstr(b, temp2);
	  cinstr(c, temp3);
	  if (mr_compare(a , b))
	  {   
		  return 0;
	  }
	  powmod(d, b, c, a);     //幂模
	  ctostr(temp4, d);
	  zero(a);                //释放
	  zero(b);
	  zero(c);
	  zero(d);
	  mirexit();             //结束
	  if (strcmp(temp4, temp1))
	  {
		  flag += 1;
	  }
}<br>

sharp2:小插曲:其实我这里没逆已经猜对答案了
 void sharp2()
  {
	  temp1 = 0x912CA2036A9A0656D17B6B552F157F8E;
	  temp2 = "0001314000000000";      //噫,这个1314仿佛是在.....
	  //影响解题的解密() -> pediy  //一个提示
	  temp2[0] = head[0];
	  temp2[1] = head[1];
	  temp2[2] = head[2]+1;            //这也是一个提示
	  aesroundkey(temp2)               //这里流程和置换表同AES加密中的roundkey环节  10轮 并输出最终密钥 此时有种不详的预感
	  temp3 = "7065646979000000";
	  temp4 = temp3 ^ temp2;
	  aesroundkey(魔改)(temp4);    
	  if (strcmp(temp4, temp2))
	  {
		  flag += 1;
	  }
  }

第三部,解密

很明显密码,分为前三位和后X为  3+X  !> 23
X部分powmod:
        Y=0x208CBB7CD6ECC64516D07D978F5F0681F534EAD235D5C49ADD72D2DB840D5304

        P=0x7DA39DE66016477B1AFC3DC8E309DC429B5DE855F0D616D225B570B68B88A585
        G=输入
        X=3e9

     已知  Y=(G^X)mod P   求解 G


先去复习数学..... 
将   P 质数分解  用 PPSIQS 
得 a=CD72845A310C5CC5FF08D546717DBB9F * b=9C8DD7C90A888F7374BFE3C485448C5B
所以根据欧拉定理 φ b =  (a-1)* (b-1)
                                    =     7DA39DE66016477B1AFC3DC8E309DC41315D8C32B5412A98B1ECB7AB94C65D8C

使用RDLP 求解
       
      得 G = 69616D6168616E64736F6D656775796861686131  (iamahandsomegayhaha1)

   

前三位:
    这部分我直接猜出来了
    已知条件 1.(输入的前三位 最后一位会被 + 1) 2. 函数参数pediy (可以推断出这个答案是非随机的)3.  (iamahandsomeguyhaha1)4. 他的ID(大帅锅)
    我们知道作品是可以看出一个人的,逆向他的作品就是深入了解他
    所以我有了一个大胆的猜想    ->  520+1 = 521  
    520iamahandsomeguyhaha1 
    

其他

  从mircal.lib导出的mr_core 其他要人肉核对的函数从 mircal.lib提取
  RDLP 以及PPISQS 工具 :https://tools.pediy.com/win/cryptography.htm 
  参考内容:https://bbs.pediy.com/thread-218552.htm
  

安卓应用层抓包通杀脚本发布!《高研班》2021年3月班开始招生!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回