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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

REVERSE-PRACTICE-BUUCTF-8

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

REVERSE-PRACTICE-BUUCTF-8

    • [GUET-CTF2019]re
    • 相冊
    • [V&N2020 公開賽]strangeCpp
    • [BJDCTF2020]easy

[GUET-CTF2019]re

elf文件,有upx殼,脫殼后ida分析
字符串交叉引用來到主邏輯函數sub_400E28
邏輯清晰,獲取輸入,驗證輸入,重要的是sub_4009AE函數

進入sub_4009AE函數,是對輸入每個字符的驗證,輸入長度為32,這里沒有驗證input[6]

寫腳本,由于程序沒有驗證input[6],即“#”位置的字符,試出來為“1”時提交成功

相冊

apk文件,用jadx-gui沒發現主邏輯
用Apktool Box反編譯apk,xiangce1->lib->armeabi->libcore.so
ida分析該so文件
shift+F12,在字符串窗口的最下面發現三段可疑字符串,很像base64

解這三段字符串,由題目的提示可知,flag的內容為完整的郵箱

[V&N2020 公開賽]strangeCpp

exe程序,運行后輸出了本機系統相關的信息,按任意鍵結束,無殼,ida分析
在字符串窗口找到一些字符串,提示真正的flag需要找找

字符串交叉引用來到sub_140013AA0函數,該函數就是獲取了本機系統信息然后打印,乍一看沒什么特殊的地方

__int64 __fastcall sub_140013AA0(__int64 a1, __int64 a2, __int64 *a3) {char *v3; // rdisigned __int64 i; // rcx__int64 v5; // rax__int64 v6; // rax__int64 v7; // rax__int64 v8; // raxchar v10; // [rsp+0h] [rbp-20h]struct _SYSTEM_INFO SystemInfo; // [rsp+28h] [rbp+8h]__int64 *j; // [rsp+78h] [rbp+58h]__int64 v13; // [rsp+98h] [rbp+78h]__int64 *v14; // [rsp+1A0h] [rbp+180h]v14 = a3;v3 = &v10;for ( i = 94i64; i; --i ){*(_DWORD *)v3 = -858993460;v3 += 4;}sub_1400110AA(&unk_140027033);GetSystemInfo(&SystemInfo);putchar(byte_140021004);putchar(byte_140021005);putchar(byte_140021006);putchar(byte_140021007);putchar(byte_140021019);putchar(byte_14002101A);putchar(byte_140021005);putchar(10);puts("Let me have a look at your computer...");for ( j = v14; *j; ++j ){v13 = *j;sub_140011226("%s\n", v13);}std::basic_ostream<char,std::char_traits<char>>::operator<<(std::cout, sub_140011127);dword_140021190 = SystemInfo.dwNumberOfProcessors;sub_140011226("now system cpu num is %d\n", SystemInfo.dwNumberOfProcessors);if ( dword_140021190 < 8 ){puts("Are you in VM?");_exit(0);}if ( GetUserNameA(Str1, &pcbBuffer) ){v5 = sub_140011172(std::cout, "this is useful");std::basic_ostream<char,std::char_traits<char>>::operator<<(v5, sub_140011127);}v6 = std::basic_ostream<char,std::char_traits<char>>::operator<<(std::cout, sub_140011127);v7 = sub_140011172(v6, "ok,I am checking...");std::basic_ostream<char,std::char_traits<char>>::operator<<(v7, sub_140011127);if ( !j_strcmp(Str1, "cxx") ){v8 = sub_140011172(std::cout, "flag{where_is_my_true_flag?}");std::basic_ostream<char,std::char_traits<char>>::operator<<(v8, sub_140011127);_exit(0);}system("pause");sub_1400113E3(&v10, &unk_14001DE50);return 0i64; }

仔細觀察發現,在sub_140013AA0函數開始的部分,幾個putchar的參數的存儲地址并不連續

進入到data段,在“welc”和“om”之間有一個在sub_140013AA0函數中沒有用到的數組

交叉引用這個數組來到sub_140013580函數,分析知道,有一個arg和這個數組的元素依次異或后輸出,重要的是求出這個arg

arg首先作為參數傳入了sub_140011384函數,返回結果存儲在result中,下面的if語句對result和arg都有要求,進入sub_140011384函數,可知resul可由arg求出

寫腳本即可得到flag

#include<stdio.h> void main() {unsigned char arr[] = { 0x26, 0x2C, 0x21, 0x27, 0x3B, 0x0D, 0x04, 0x75, 0x68, 0x34,0x28, 0x25, 0x0E, 0x35, 0x2D, 0x69, 0x3D };__int64 result = 607052314;int arg = 0;while (arg <= 14549743){int v5 = arg >> 12;int v6 = arg << 8;if (result ==(v6^v5)*291){printf("%d——", arg);for (int i = 0; i < 17; i++){printf("%c", arr[i] ^ arg);}printf("\n");}arg += 1;}return; }

運行結果

[BJDCTF2020]easy

exe程序,運行后提示要找flag,無殼,ida分析
main函數沒什么特殊的地方

在函數窗main函數的上面有一個ques函數,ques函數沒有要求輸入,但是有輸出打印

想要看看ques函數打印了什么東西,要調試這個exe程序,在main函數return前下斷點

程序停下后,去到ques函數的第一條指令處,設置為當前IP

在ques函數return前下斷點,F9執行完ques函數,打印的內容即為flag

總結

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

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