測試檔案:
參考文章:
檢測時發現不是pe檔案,但是開啟16進製制卻發現了mz標識,因此我們能夠判斷檔案中存在錯誤。
通過觀察,發現指向pe檔案頭的位址為e9,但是實際的位址卻是e8。
將位址修改正確之後,在010editor開啟檔案,匯入exe模板
可以看到,正確的pe檔案標識應該是0x00004550,但是檔案中是0x00ff4550,修改ff為00
將修改後的檔案儲存為exe檔案
定位到main函式
1通過第90~94行**,我們知道正確的flag為組合[v4 v3 v11 v12 v13 v14],其中v4="jlflag",v14=std::endl__int64 __cdecl main_0()262
if ( *(&str1 + j) <= 126)63
break
;64 v1 = *(&str1 +j);65}
66}67if ( v24 == 94 && v25 == 98 ) //
v24=94,v25=98
6878}79
if ( !j_strcmp(&str1, "
*&8p^bp^b
") )80"
;85 v12 =v22;
86 v11 =dst;
87 v3 =v20;
88 v15 = &v11;
89 v4 = sub_411154(std::cout, "
jlflag
98label_31:
99 v9 = sub_411154(std::cout, "
please try again!");
100 std::basic_ostream>::operator
<
101goto
label_32;
102}
103}
104label_32:
105 v14 =hidword(v1);
106 v13 = 0
;107
return *(_qword *)&v13;
108 }
因此我們只需要求出v3,v11,v12即可,通過第85~87行**,我們知道v12 = v22;v11 = dst;v3 = v20;
我們能夠通過這三個變數滿足的三個表示,求出三個數的值。
for v22 in range(100):for dst in range(100):
for v20 in range(100):
if v22*dst*v20//11 == 106 and (v22 + dst + v20) % 100 == 34:
if (dst^v20) == v22 - 4:
if (v22 + dst + v20) % 100 == 34:
print("
jlflag
"%(v22, dst, v20), end='
\n')
jlflag將這6組得到的flag一組一組試,就能得到正確flag。(記得去掉jl)jlflag
jlflag
jlflag
jlflag
jlflag
flag
物件導向部分 201
小夥伴們,還在為不知道怎麼下手而頭疼嗎,我們程式競賽協會來幫你們啦 啦啦啦。另外,如果有對程式設計含有濃厚興趣的同學,我們隨時歡迎你們的加入喲 策劃 譚兆飛 程式設計 管懷文 協助 一號人員要求給她打碼 乾脆二號也打碼好了o o 其實只是提供了題目啦 物件導向部分 201 include inclu...
2 01揹包問題
有 nn 件物品和乙個容量是 vv 的揹包。每件物品只能使用一次。第 ii 件物品的體積是 vivi,價值是 wiwi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,vn,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n...
2 01揹包問題
有 nn 件物品和乙個容量是 vv 的揹包。每件物品只能使用一次。第 ii 件物品的體積是 vivi,價值是 wiwi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。第一行兩個整數,n,vn,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 nn 行,每...