1.請協(xié)助他findkey
在分析程序前病苗,要先運行程序找到第一步到底要干嘛槽唾,再找到main函數(shù)設斷點梗肝,運行找到輸入口先,根據(jù)運行可以知道要輸入隨便輸入一個用戶名后來就可以繼續(xù)運行在運行到一個函數(shù)時瓦盛,簡單分析是一個看輸入個數(shù)是否合適。一個加減運算是12位外潜,所以重新分析輸入12位密碼原环,在上個函數(shù)后面有一個比較函數(shù),特點是把輸入口令與內(nèi)存另一個比較处窥,這明顯內(nèi)存中的數(shù)據(jù)就是用戶名嘱吗。然后從斷點運行輸入正確的用戶名。繼續(xù)運行會會出現(xiàn)一個輸入用戶密碼的輸入行同理輸入一個密碼繼續(xù)運行在運行時會發(fā)現(xiàn)在一個函數(shù)中輸入密碼在與另一組數(shù)據(jù)異或而不是比較既然在異或沒有比較那么肯定有下一步操作滔驾。繼續(xù)下一步果然結果在與另一個比較谒麦。這就簡化為輸入密碼與內(nèi)存數(shù)據(jù)異或等于另一個數(shù)據(jù)。a異或b=c→a異或b異或b=c異或b→a=c異或b哆致。(根據(jù)參與異或的數(shù)字可以判斷如果是數(shù)字會是二位數(shù)所以是字符)在異或時最好編一個程序來绕德,方便快捷。這樣就會得到flag摊阀。
總結:1.在輸密碼時后面應該有個與內(nèi)? ? ? ? ? ? 存數(shù)據(jù)比較的函數(shù)
? ? 2.在有輸入數(shù)據(jù)有關或輸入數(shù)據(jù)得出的數(shù)據(jù)有關的函數(shù)都是得到密碼的關鍵耻蛇。
? ? ? 3.在解決有關密碼的計算可以用寫程序解決。
2.rev1(a胞此。為什么不能直接運行臣咖?1.是與后綴有關2.函數(shù)的關系
? ? ? ? ? ? ? b。為什么od打不開豌鹤?難道位數(shù)不同亡哄,如果不同那ide為什么可以打開?
? ? ? ? ? ? ? c布疙。它到底是用什么編譯的蚊惯?)
在這個題中無法直接運行直接運行愿卸,只好轉入看它的偽代碼。
這個偽代碼很多認不到大概可以看出是一個字符串與另一個字符串異或截型;在C++編譯器寫一個代碼就行趴荸;
3.bin100
分析明白這個程序是扔骰子,但要扔出來概率太谢陆埂发钝;
所以只有進行修改;(修改只有用od比較快)
在源代碼中有很多漢語提示波闹,在每個正確語句地址前找判斷項酝豪;
把每個判斷語句修改為jz;
修改后進行保存然后運行發(fā)現(xiàn)得不到答案精堕;
進一步分析是因為在判斷正確后函數(shù)會把flag清零孵淘;
所以只有在powershell里運行就可以了;