題解 ctf兩道最簡單入門級的逆向思路

2021-09-29 18:59:22 字數 974 閱讀 9915

justdoit

迷宮首先分析出,有乙個25位字串,而v3也是字元型,往後複製25位;

然後,螢幕中捕獲的是v6,v6是乙個16位的字型別,判斷v6,如果輸入為2,v4++,3的話v5–,4的話v5++,而1的話,是v4–;而下面的for就很好理解了,為了限制資料大小,v4取位址,加上i,然後取值,也就是v4,v5均要大於等0,小於等4,而至於那個v5是怎麼來的,就是v4+i,i不是1嘛?i是int型別,(強行解釋!等我去查一下),接下來就有意思了,v8取位址,後加上5v4+v5-41==49,什麼意思?就是v8的位址,減去41,算一下,恰好是v3的首位址,然後5v4+v5,如果v4是x,而v5是y,那麼就好辦了,也就是5v4是走了幾行(其實是直接往下走),比如乙個字串111101000

* 1 1 1 1

0 1 0 0 0

從走到0,你是直接走到下就行,表示到字元中就是走了15,同理(v4,v5)就表示你當前的位置,那麼就可以理解了,v4++就是x,向下就是x+1,所以這道題就出來了,後來我根據這個功能,反寫了乙個c++,就是這樣的:

#includeusing namespace std;

int main()

{ char c; //捕獲輸入

string s="*11110100001010000101111#"; //迷宮數列

int x=0,y=0; //1,2,3,4對應的x,y

int z; //s的下標

cout<<"* 是起點,#是終點,0表示可以走,1表示有牆,不可以走!"<>c;

if(c=='1')

x--;

if(c=='2')

x++;

if(c=='3')

y--;

if(c=='4')

y++;

if(x<0 || x>5 || y<0 || y>5)

break;

z=5*x+y;

//cout《呼~結束了!

兩道簡單的題目

第一次發表文章,就發表兩到簡單點的題目好了 第一道題目是這樣的 現在有乙個整數的陣列,然後給定乙個目標數,我們要做的是找出陣列中唯一存在的兩個不同的數,其相加能夠得到這個目標數,然後返回這兩個數的下標比如 given nums 2,7,11,15 target 9,because nums 0 nu...

益智題 (簡單的兩道題)

a公司拍攝的 黃河頌 獲最佳故事獎 b公司的 孫悟空 獲最佳武術獎 c公司的 白娘子 獲最佳戲劇獎。a公司的經理說 我們三經理的姓分別是三部片名的第乙個字,而又同自己所拍 首字不一樣。另一公司的孫經理笑著說 真是這樣 那三經理各姓什麼?答案 a白 b黃 c孫 另一公司的孫經理 說明a不姓孫,而a又不...

倍增的兩道應用題(題解報告)

題目鏈結 題意 題意不難看懂,就是要求兩點間道路中最大權值的最小值 思路 這道題有很多種解法,這裡講利用lca的解法 首先我們知道,解肯定是建立在最大生成樹上的 先用kruscal建最大生成樹 然後再在lca中維護乙個d u,v 表示從節點u走到節點v經過的道路的最小權重 然後就可以上 了 ac i...