鏈接見(jiàn)標(biāo)題疯兼。
下載所給壓縮包绽快,解壓后得到兩個(gè)文件:
直接看ReadMe.txt:
ReversingKr KeygenMe
Find the Name when the Serial is 5B134977135E7D13
用IDA打開(kāi)Easy Keygen.exe坐昙,直接F5
主要偽碼
重點(diǎn)在兩個(gè)scanf的周圍宪摧。
第一個(gè)scanf岳颇,是讓你輸入姓名合愈,第二個(gè)scanf是讓你輸入序列號(hào)叮贩。
觀察for循環(huán)語(yǔ)句,重點(diǎn)在那個(gè)sprintf佛析,aS02x的字符串是%s%02x益老,意為將輸出格式化為兩位的十六進(jìn)制字符串,不夠兩位的在前面補(bǔ)0寸莫。
看sprintf里面最后一個(gè)參數(shù)杨箭,是v9[i] ^ v6 [i],v9[i]是我們輸入的姓名储狭,那么v6[i]是什么呢互婿?我們看一下v6聲明的部分:
聲明
發(fā)現(xiàn)v6 v7 v8是連在一塊的,并且下面都給他們賦值了辽狈。那么下面調(diào)用的v6就是有三個(gè)元素的數(shù)組慈参。
那么結(jié)合那個(gè)if(i >= 3),發(fā)現(xiàn)v6是被循環(huán)使用的刮萌。
這時(shí)候我們就可以寫(xiě)代碼來(lái)破解了驮配。
將ReadMe給出的序列號(hào),兩個(gè)兩個(gè)分開(kāi),作為sprintf中運(yùn)算后的結(jié)果壮锻,再與v6數(shù)組的元素異或琐旁,就可以得到flag了。
flag =?K3yg3nm3