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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

2020——网鼎杯 (青龙组)jocker

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020——网鼎杯 (青龙组)jocker 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 聲明
    • 棧指針修改
      • wrong
      • omg
    • smc自修改
      • 動調
        • 進入encrtpt(把數據段編程代碼來解析)
      • idc腳本
        • 未導入之前
        • 導入之后

聲明

這個題,分析了一下,兩個知識,一個是棧指針修改,還有一個smc自修改(自修改的話,兩種破法,一個是idc腳本,一個是動調)

棧指針修改


進入程序直接地址0x401838的sp指針(堆棧不平衡)報錯,點擊options—>general—>勾選stack pointer,然后找到地址0x401838,截圖看看

call函數調用前后 棧頂指針sp位置不一樣,可能嗎???????那棧怎么平衡????詳情請看https://blog.csdn.net/dj0379/article/details/8699219?utm_source=app&app_version=4.5.5
二話不說,改。鼠標點到call那里,然后按鍵盤Alt + K

緊接著把這個sp改成0

接著,下面還有一個這樣報錯,照改即可

改完之后就能F5嘍。

wrong

omg


導出 內存數組快捷鍵shift + E

unsigned char unk_4030C0[] = {0x66,0x6B,0x63,0x64,0x7F,0x61,0x67,0x64,0x3B,0x56,0x6B,0x61,0x7B,0x26,0x3B,0x50,0x63,0x5F,0x4D,0x5A,0x71,0x0C,0x37,0x66 };

這個wrong函數和omg求得一個假的flag,浪費表情flag{fak3_alw35_sp_me!!}

smc自修改


這里有個很長的for循環,一看就是smc,以至于我靜態情況下進了encrypt


直接F5沒法搞,被上面的棧頂指針搞興奮了。。。。眼瞎直接不看,又來修改棧指針。。。。還把
這兩條指令給patch了。。我還特地去查了一下enter指令后加數據是什么玩意。。。。算了,都是眼瞎的悲劇。。。

動調

進入encrtpt(把數據段編程代碼來解析)

.text:0040152C jmp short near ptr dword_401534+43h

跳轉的地址是一個數據段,我們不方便觀察,編譯器也不方便解析,但是并不影響程序執行哦。。。我們需要觀察的話,需要把這堆數據段搞成代碼(按下c鍵即可)來解析,然后變成這樣

接下來按下p鍵,也就是把它當成一個函數來解析即可。

int __cdecl encrypt(char *a1) {int v2[19]; // [sp+1Ch] [bp-6Ch]@1int v3; // [sp+68h] [bp-20h]@1int i; // [sp+6Ch] [bp-1Ch]@1v3 = 1;qmemcpy(v2, &unk_403040, sizeof(v2));for ( i = 0; i <= 18; ++i ){if ( (char)(a1[i] ^ aHahahaha_do_yo[i]) != v2[i] ){puts("wrong ~");v3 = 0;exit(0);}}if ( v3 == 1 )puts("come here");return v3; } unsigned char unk_403040[] = {0x0E,0x0D,0x09,0x06,0x13,0x05,0x58,0x56,0x3E,0x06,0x0C,0x3C,0x1F,0x57,0x14,0x6B,0x57,0x59,0x0D, }; aHahahaha_do_yo db 'hahahaha_do_you_find_me?'

上面只有19位,剩下的五位在finally函數里面,


最后一個是58,因為flag最后一個都是},跟}需要異或71,再將之前的四個值都和71異或。腦洞有點強

flag{d07abccf8a410cb37a}

idc腳本

#include<idc.idc> static main(){ auto start=0x401500l; auto i =0; for(;i<187;i++){auto a=Byte(start+i);PatchByte(i+start,a^0x41); } }

保存成后綴名為.idc的文件,緊接著

然后導入所寫腳本文件,

未導入之前

導入之后


只需要按一下p鍵就得了。。。F5后即可

總結

以上是生活随笔為你收集整理的2020——网鼎杯 (青龙组)jocker的全部內容,希望文章能夠幫你解決所遇到的問題。

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