破解之算法解析
這題是找程序獲取到key時(shí)運(yùn)行后輸出的結(jié)果,很顯然2種解法。
解法1:找出正確注冊(cè)碼的算法。
解法2:找出輸入正確注冊(cè)碼后輸出flag的算法。
這里是后者容易一些。
這是查找到的字符串。SYC{%s}這里是個(gè)提示。很可能這里是生成flag的的計(jì)算
int sub_45BFF0() {int v0; // edx@4int v1; // ST04_4@4int v2; // ecx@4char v4; // [sp+Ch] [bp-134h]@1int v5; // [sp+10h] [bp-130h]@4int i; // [sp+DCh] [bp-64h]@1char v7; // [sp+EBh] [bp-55h]@3int v8; // [sp+F4h] [bp-4Ch]@1int v9; // [sp+F8h] [bp-48h]@1int v10; // [sp+FCh] [bp-44h]@1int v11; // [sp+100h] [bp-40h]@1int v12; // [sp+104h] [bp-3Ch]@1int v13; // [sp+108h] [bp-38h]@1int v14; // [sp+10Ch] [bp-34h]@1int v15; // [sp+110h] [bp-30h]@1int v16; // [sp+11Ch] [bp-24h]@1int v17; // [sp+120h] [bp-20h]@1int v18; // [sp+124h] [bp-1Ch]@1int v19; // [sp+128h] [bp-18h]@1int v20; // [sp+12Ch] [bp-14h]@1int v21; // [sp+130h] [bp-10h]@1int v22; // [sp+134h] [bp-Ch]@1int v23; // [sp+138h] [bp-8h]@1int savedregs; // [sp+140h] [bp+0h]@4memset(&v4, 0xCCu, 0x134u);v16 = 7;v17 = 3;v18 = 1;v19 = 8;v20 = 7;v21 = 2;v22 = 3;v23 = 2;v8 = 18;v9 = 19;v10 = 20;v11 = 1;v12 = 15;v13 = 20;v14 = 16;v15 = 11;for ( i = 0; i < 8; ++i ){v7 = byte_52E000[*(&v16 + i)];byte_52E000[*(&v16 + i)] = byte_52E000[*(&v8 + i)];byte_52E000[*(&v8 + i)] = v7;}v5 = 21;byte_52E000[21] = 0;sub_458430("SYC{%s}\n", (unsigned int)byte_52E000);v1 = v0;sub_457841(&savedregs, &dword_45C134);return sub_456685(v2, v1); }這是還原的偽代碼
基地址 byte_52E000雙擊后有
這里是找到的ascii碼
o21 15h NAK ? 確認(rèn)失敗回應(yīng)
str.replace(a,b,c)方法:用b替換str中的a替換c個(gè)(a,b為str型,c為int型)
計(jì)算結(jié)果為Oops…OD__15_Useful!
得到的flag為 SYC{Oops…OD__15_Useful!}
當(dāng)然這一題也可以用爆破解決。
總結(jié):有時(shí)候得到flag不一定非要先的到注冊(cè)碼和用戶名(用戶名和注冊(cè)碼可能特別難計(jì)算)。
注意字符串給出的提示% 格式化數(shù)據(jù)需要用到,很多時(shí)候就是為了輸出
總結(jié)
- 上一篇: Eclipse环境下配置Tomcat
- 下一篇: POJ 1611 The Suspec