[GUET-CTF2019]number_game


這道題emm,又讓我不停的踩以前的一個坑,題目是一種提示的坑,老忘記。

首先,打開ida反編譯

 

 進入函數sub_400917先看看,然后發現這是個數獨(一開始我沒發現......看到第二個對比的時候懵了,然后看了下別人的博客,發現是數獨)

 

 接着進入sub_400881函數,是一個賦值函數

 

 接下來就是sub_400758和sub_400807函數了,這個時候就先分析前面那個函數

這里的v5=v4是讓v5和v4的地址相等,而*v4=v7,是讓v4指向的地址值為v7,所以這里是賦值v4[0],下面兩個是賦v4[1]和v4[2]的,由於有多次賦值,最后怎么賦值的我也不清楚。。。(推薦這里用動態調試。。可惜我是Windows,我linux上也沒裝ida,但我猜測就是換位置,所以我跑去別那看了看)

 

 接着看后面這個函數, 又是遞歸,很明顯的是賦值語句在第9行,而這個加8和加16指的是指針數組,可以到外面看看這個傳進來的參數a1,所以這個也是賦值

 

然后我看了一位師傅的博客:https://blog.csdn.net/Palmer9/article/details/104613420這是那位師傅自己手動弄出來的交換后的結果,簡單明了

 

 然后在回到先前的數獨

 

 答案是0,4,2,1,4,2,1,4,3,0

寫腳本

#include<stdio.h>
#include<iostream>
int main()
{
    char s1[255] = { '0','4','2','1','4','2','1','4','3','0' };
    int sort[255] =  { 7,3,8,1,9,4,0,5,2,6 };

    char f[255];
    for (int i = 0; i < 10; i++)
    {
        f[sort[i]] = s1[i];
    }
    f[10] = '\0';
    ::std::cout << f;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM