日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BUUCTF reverse1-10 WP

發布時間:2024/3/13 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BUUCTF reverse1-10 WP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

筆記是按照當時的題目排序寫的,順序可能有出入
做題是從0開始做起,所以前面部分也會盡可能寫的詳細一點
只要能記錄并且了解到怎么做即可,所以就沒有去在意排版
遇到不會的函數盡可能去百度了解
因為前面的題難度不大,所以前面的每道題都沒有去查殼,除非有特殊:)
題目:easyre、reverse1、reverse2、內涵的軟件、新年快樂、helloword、xor、reverse3、不一樣的flag、SimpleRev

1.easyre
非常簡單的逆向

拖入winhex,搜索flag即可

flag{this_Is_a_EaSyRe}

2.reverse1
reverse1 注意:得到的 flag 請包上 flag{} 提交

64位程序,用IDA pro(64 bit)打開
shift+F12打開字符串窗口,按ctrl+f搜索flag

雙擊這行,跳轉至IDA view-A窗口
右鍵這行,選擇第一個(List cross references to),點擊OK跳轉


可以看到調用了一個判斷,并且str2為{hello_world}
F5查看偽代碼

可以發現,我們需要輸入str1與str2做比較,str2會將字母o替換為0,最終得到flag

flag{hell0_w0rld}

3.reverse2
reverse2 注意:得到的 flag 請包上 flag{} 提交

下載得到ELF文件,使用IDA PRO(64 bits)打開
和第一題一樣,shift+f12,跳轉至IDA view頁面,F5查看偽代碼
當然,還能看到一個hacking_for_fun},先記著

先把105 114 49轉成字符(選中按R即可)

可以發現,輸入的v2要和&flag做比較,而雙擊&flag發現內容就是之前的hacking_for_fun}
再分析循環,會將flag中的i和r替換成1,使用最后得到flag

flag{hack1ng_fo1_fun}

4.內涵的軟件
圖片有內涵,exe也可以有內涵,也許你等不到答案,趕快行動起來吧!!! 注意:得到的 flag 請包上 flag{} 提交

運行發現會提示逆向,用IDA pro(32 bits)打開即可

flag{49d3c93df25caad81232130f3d2ebfad}

5.新年快樂
過年了要不做個逆向題慶祝一下新年?說不定會有驚喜哦!注意:flag并非是flag{XXX}形式,就是一個字符串,考驗眼力的時候到了! 注意:得到的 flag 請包上 flag{} 提交
用winhex打開能明顯看到加了UPX殼,我使用的UPXShell脫殼

脫殼后再用IDA打開,搜索flag字符串,跳轉。

flag很明顯了

flag{HappyNewYear!}

6.helloword
有難的題目,也就有簡單的題目,就像程序員一輩子編寫的第一個程序,極有可能是helloword,它很普通,但是也很讓人懷念。你猜這題flag在哪里?讓我們懷念第一次編寫的easy程序吧! 注意:得到的 flag 請包上 flag{} 提交

是一個apk安裝包,android逆向。
我使用GDA3.80打開

flag{7631a988259a00816deda84afb29430a}

7.xor
or的敵人,and 有個兄弟叫or,or有個敵人叫xor,那么你能幫助or戰勝他的敵人xor嗎,xor的奧秘就在附件中,開始戰斗吧! 注意:得到的 flag 請包上 flag{} 提交

放入IDA,反匯編main查看偽代碼
查看一下global的值

輸入的v6進行一頓異或之后得到,其中第一個f是沒有被處理的

f\nk\fw&O.@\x11x\rZ;U\x11p\x19F\x1Fv"M

雙擊前面的aFKW0XZUPFVMDGH跳轉過去

寫python腳本

tmp = ['f', 0x0A, 'k', 0x0C, 'w', '&', 'O', '.', '@', 0x11, 'x', 0x0D, 'Z', ';', 'U', 0x11, 'p', 0x19, 'F', 0x1F, 'v','"', 'M', '#', 'D', 0x0E, 'g', 6, 'h', 0x0F, 'G', '2', 'O'] flag = 'f' for i in range(1, len(tmp)):if (isinstance(tmp[i], str)):if (isinstance(tmp[i - 1], str)):flag += chr(ord(tmp[i]) ^ ord(tmp[i - 1]))#如果都是字符串else:#tmp[i]為字符串,tmp[i-1]不是字符串flag += chr(ord(tmp[i]) ^ tmp[i- 1])else:#tmp[i]和tmp[i-1]都不是字符串flag += chr(tmp[i] ^ ord(tmp[i - 1])) print(flag)

其中,isinstance函數的作用是檢測是否為已知類型,這里即比較tmp[i]與tmp[i-1]是否為字符串

flag{QianQiuWanDai_YiTongJiangHu}

8.reverse3
reverse3 注意:得到的 flag 請包上 flag{} 提交

IDA打開,搜字符串能明顯看到base
查看main偽代碼,簡單來說,輸入的str加密后得到v1,再進入for循環后得到Dest后的字符與str2進行比較

其中 str2的內容為e3nifIH9b_C@n@dH

跟進sub_4110BE函數

發現使用了這個進行數組變換,跟進發現就是之前的base64。
解碼過程:
首先for循環將Dest每一位都加了j,所以寫腳本還原v1,然后進行base64解碼

import base64str = 'e3nifIH9b_C@n@dH' flag = '' for i in range(len(str)):flag+=chr(ord(str[i])-i)flag = base64.b64decode(flag) print(flag)

得到{i_l0ve_you}

flag{i_l0ve_you}

9.不一樣的flag
是不是做習慣了常規的逆向題目?試試這道題,看你在能不能在程序中找到真正的flag!注意:flag并非是flag{XXX}形式,就是一個’字符串‘,考驗眼力的時候到了! 注意:得到的 flag 請包上 flag{} 提交

IDA打開
進來就看到01串,可能需要利用

__main();v4 = 0;v5 = 0;qmemcpy(&v3, _data_start__, 0x19u);while ( 1 ){puts("you can choose one action to execute");puts("1 up");puts("2 down");puts("3 left");printf("4 right\n:");scanf("%d", &v6);if ( v6 == 2 ){++v4;}else if ( v6 > 2 ){if ( v6 == 3 ){--v5;}else{if ( v6 != 4 ) LABEL_13:exit(1);++v5;}}else{if ( v6 != 1 )goto LABEL_13;--v4;}for ( i = 0; i <= 1; ++i ){if ( *(&v4 + i) < 0 || *(&v4 + i) > 4 )exit(1);}if ( *((_BYTE *)&v8 + 5 * v4 + v5 - 41) == '1' )exit(1);if ( *((_BYTE *)&v8 + 5 * v4 + v5 - 41) == '#' ){puts("\nok, the order you enter is the flag!");exit(0);}} }

可以發現有上下左右四個方向,并且碰到1退出,碰到#輸出flag,應該是一個迷宮,再查看01串長度正好25

得到222441144222

flag{222441144222}

10.SimpleRev
SimpleRev(flag需加上flag{}再提交) 注意:得到的 flag 請包上 flag{} 提交

ELF文件,還是IDA打開,發現需要輸入D進入游戲,跟進Decry

其中text=key3+v9
key3為kills,因為是小端序存儲,則text為killshadow
key為key1+src,key1為ADSFK
則key為ADSFKNDCLS
下面查看加密過程


最后text需要和str2進行比較,既然已經知道了加密后的字符串和key(注意key在第2張圖被+32,即大寫變成了小寫),所以可以直接寫腳本一位一位的進行爆破

key = "adsfkndcls" text = "killshadow" flag = "" dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" v5 = len(text) for i in range(v5):for v1 in dict:if ord(text[i]) == (ord(v1) - 39 - ord(key[i % v5]) + 97) % 26 + 97:flag += v1 print(flag)

運行得到KLDQCUDFZO

flag{KLDQCUDFZO}

總結

以上是生活随笔為你收集整理的BUUCTF reverse1-10 WP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。