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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

REVERSE-PRACTICE-CTFSHOW-5

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

REVERSE-PRACTICE-CTFSHOW-5

    • re2_歸心
    • Mud
    • [吃雞杯]ezmore
    • [吃雞杯]有手就行

re2_歸心

exe程序,運行后要求輸入flag,ida分析
函數窗沒找到主邏輯函數,shift+F12看字符串窗口
發現有java/lang/String,com/exe4j/runtime/WinLauncher等字符串
再想到提示"你應該見過python代碼打包成的exe,猜猜這是什么語言"
這個exe應該是用exe4j生成的

exe4j生成exe的過程中要導入jar包,運行exe的時候實際上是運行導入的jar包
也就是說,運行exe的時候,jar包被取出存到了本地
用工具XSearch搜索"readme.jar",在本地的C盤下找到jar包

把找到的jar包丟進jadx-gui,可以看到明文flag

Mud

exe程序,運行后玩游戲,提示"打敗王重陽"
upx脫殼,ida分析
一通亂找,在sub_402D9F->sub_402446->sub_402368處找到參數為"王重陽"
往下走,在sub_4023CE函數,最后的printf,找到flag
ida中顯示中文的方法,選中數據,alt+a,create C-style

[吃雞杯]ezmore

exe程序,運行后是個目錄,可以瀏覽文件,下載文件
選項1不能直接看到flag
選項2下載flag文件需要下載碼
ida分析,
main->dd922ad47494fc02c388e12c00eacDownload
輸入的下載碼進入e2edef40ecaa776b8d32d58416998驗證

e2edef40ecaa776b8d32d58416998中,傳入的下載碼需要和程序生成的Str2比較

直接在比較的if處下斷點,起調試
選項2,輸入文件編號8,隨便輸入下載碼(不能是0)
程序斷下來后,可以看到Str2為"neft"
再次運行exe,flag為md5(“neft”)==fc425a880deaaa7ffe4777a6232c61a3

[吃雞杯]有手就行

exe程序,運行后輸入,ida分析
輸入的長度為27,然后驗證輸入

check實際上就是對輸入進行前向異或的運算,然后和已知的Buf2比較

寫腳本解,結果是fake flag

ans=[99,23,113,2,106,5,114,9,109,2,93,36,75,62,97,13,100,15,106,53,83,50,89,60,3,60,65] for i in range(len(ans)-1,0,-1):ans[i]^=ans[i-1] print("".join(chr(i) for i in ans)) #ctfshow{do_you_like_fake??}

然后在函數窗發現sub_401F20函數
sub_401F20->sub_4014D0是RC4的初始化函數,不過在第10行有點改動
密鑰為"keykeykey"

sub_401F20->sub_401600,找到密文unk_403000
直接解改掉初始化的RC4,并沒有得到flag
sub_401F20->sub_4013D0看到還有個"+7"的運算

將解RC4出來的結果再減去7,即可得到flag

#include<stdio.h> void rc4_init(unsigned char* s, unsigned char* key, unsigned long Len_k) //初始化函數 {int i = 0, j = 0;char k[256] = { 0 };unsigned char tmp = 0;for (i = 0; i < 256; i++) {s[i] = 256 - i;k[i] = key[i % Len_k];}for (i = 0; i < 256; i++) {j = (j + s[i] + k[i]) % 256;tmp = s[i];s[i] = s[j];s[j] = tmp;} } void rc4_crypt(unsigned char* Data, unsigned long Len_D, unsigned char* key, unsigned long Len_k) //加解密 {unsigned char s[256];rc4_init(s, key, Len_k);int i = 0, j = 0, t = 0;unsigned long k = 0;unsigned char tmp;for (k = 0; k < Len_D; k++) {i = (i + 1) % 256;j = (j + s[i]) % 256;tmp = s[i];s[i] = s[j];s[j] = tmp;t = (s[i] + s[j]) % 256;Data[k] = Data[k] ^ s[t];} } void main() {unsigned char key[] = "keykeykey"; unsigned long key_len = sizeof(key) - 1;unsigned char data[] = { 0xDC, 0x47, 0x7F, 0x6E, 0x9A, 0xD8, 0x60, 0x77, 0xF4, 0xB0,0x8C, 0x54, 0xB0, 0xAA, 0x26, 0x23, 0x02, 0x42, 0x8E, 0xBA,0x90, 0x8C, 0xAB, 0x86, 0x24, 0x6E, 0xF8 };rc4_crypt(data, sizeof(data), key, key_len);for (int i = 0; i < sizeof(data); i++){printf("%c", data[i]-7);} } //ctfshow{y0u_g0t_t4e_5ecret}

總結

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

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