攝影玩家一定知道,單反相機因為豐富的操控性才廣受歡迎,可也正是因為這個,單反相機上的很多功能被忽視,甚至很多實用的功能都被熟視無睹!
不說別的,就說相機主撥盤上的很多模式,因為標識奇葩不是幾個框框就是一串英文而被很多人忽視。其實,很多撥盤上的這些模式有妙用,只是你沒有掌握罷了,今天就隨著毒法師看下撥盤上那些奇葩按鈕都有啥用處吧。
1.綠色圓角矩形
如果你看到一個綠色圓角矩形,不要懵逼,是的,你沒有看錯,很多相機主撥盤上有一個綠色的矩形方框,難道這是白板嗎?
不不不,這其實是“全自動”模式,也就是AUTO模式,這個模式下相機會自動根據場景幫你設置所有的參數,這個模式小白都懂不在贅述。
2.白色圓角矩形+閃電圖示
如果你看到一個白色圓角矩形,且里面還有一個被劃掉的閃電狀圖示,也不要驚訝,這個是“閃關燈關閉”模式,該模式和全自動模式是一樣的(單反攝影控:smmapp),只不過這時候始終是禁用閃關燈的。
當然,有時候“閃關燈關閉”模式的圖標是用圓圈圈起來的,在博物館、會議室等禁止使用閃關燈的場合拍照,這個功能就可以大顯身手了,能為你避免很多不必要的尷尬。
3.白色圓角矩形+CA圖示:
如果你看到一個白色圓角矩形,且里面還有一個CA圖示,不要懷疑了,這個是“創意自動模式”,所謂創意就是你只要通過選擇自己想要什么效果,然后相機通自動過設置各種拍攝參數來達到你所希望的拍攝效果,比如光圈、連拍以及閃光燈等。
怎么確定你喜歡的效果?自然是你需要在相機的設置中選擇了(單反攝影控:smmapp),可供選擇的項有氛圍、背景虛化等,你可以理解這也是一種為新手提供的功能。
值得一提的是,佳能相機很多撥盤上還有C1、或C2、C3等模式,這個千萬別跟CA模式混淆,C1、或C2、C3等模式是“用戶自定義拍攝模式”,是高級玩家的配備。
如果你經常拍攝同一場景,那么就可以把拍攝時的曝光模式、對焦方式、測光方式等等設置好,然后設定為C1、或C2、C3,以后再拍攝這個場景時就不需要勞神費力再次調節各種參數了(單反攝影控:smmapp),直接把相機撥盤撥到設定的C1、或C2、C3上拍攝即可,是不是很實用?
類似的還有索尼相機上的MR檔,也是這個用戶自定義的模式。有些小伙伴還可能見過撥盤上有“1”和“2”字樣,不要懷疑,這個也是自定義的功能。
很多相機廠商都有自己獨有的拍攝模式,如佳能的“A-DEP模式”和尼康的“GUIDE模式”等。
1.A-DEP模式:
這個是“自動景深模式”,或者稱為景深優先模式,這個模式主要用于自動獲得較近主體和較遠主體之間的大景深,所以非常適合用來拍攝合影或風光(單反攝影控:smmapp)。
在該模式下,相機會使用自動對焦點檢測你想要對焦的最近和最遠主體,然后相機會通過計算來自動確定光圈值,使得畫面中被自動對焦點覆蓋的畫面元素都是清晰的,也就是確保成像在景深范圍內。
2.GUIDE模式:
望文生義,這個是“引導模式”,這個模式可以說是非常貼心了,它會對每一個拍攝步驟都作出詳細解釋,能夠讓初次接觸單反相機的菜鳥更容易上手(單反攝影控:smmapp),如果你是第一次摸單反相機,一定會慶幸有這個模式。
3.SCN模式:
這個是“場景模式”,使用該模式相機會根據相機預設的程序進行自動曝光,SCN場景模式中有夜景拍攝、兒童寵物模式、室內模式、雪景模式以及煙花模式等。
如果你拍攝這些場景就可以選擇相應模式(單反攝影控:smmapp),相機就會針對性自動調節各種參數,拍攝出來的照片效果會更好。
單反相機主撥盤主要是拍攝模式功能,所以在實際場景中會有很大用處,關鍵時刻省時省力。趕緊看看你的相機主撥盤上都有哪些奇葩按鈕吧,趕緊弄懂下次拍攝你就爽歪歪了!
毒家攝影指南,讓攝影像眨眼一樣簡單!
(單反攝影控:smmapp;《毒家攝影指南》原創內容,未經授權嚴禁任何形式的轉載,嚴禁篡改和盜用,違者追究法律責任!)
構造一個可用的ROP可以分7步來操作:
確定目標
針對目標實現步驟,確定需要的ROP樣式
搜索模塊中可用代碼片段。
封裝代碼片段至模塊
書寫簡單的ROP偽指令
組裝代碼片段
調試完成
###一、確定目標
無論做什么都需要有明確的目標:
已知一信息泄漏漏洞(MS13-037)可泄漏 ntdll 的基地址 @ntdll_base;
被攻擊目標為 WIN7_x86 + IE8 ,且 ntdll 版本號為 6.1.7601.17514。
有一任意代碼執行漏洞(任意 EIP 可控漏洞均可)
求一可用的 metasploit 的漏洞利用模塊。
通過閱讀第一篇筆記可以得知:調用ZwProtectVirtualMemory()可以完成關閉DEP的操作,而調用之前需要將棧狀態布置為下圖所示:
此時通過RETN指令調用Zw*函數后才能將shellcode所在區域開DEP保護。所以我們的目標就是構造這樣一片的堆棧結構。
###二、針對目標實現步驟,確定需要的ROP樣式
觀察目標堆棧結構可以發現,構造這樣的堆棧存在以下幾點困難:
1.ShellCode 地址由于是動態分配到堆內存中,無法固定
2.0x00000040 和 0x0000 0400 兩個數據存在格式為%u0000的unicode壞字符,無法直接部署。
于是,這種棧狀態存在7個雙字需要在ROP中動態設置(參照上圖帶紅點的位置)。這可能會用到以下種類的ROP代碼:
1. MOV [ reg ], reg //布置堆棧,操作內存,當然需要寫內存指令了
2. ADD(SUB) reg,reg //計算shellcode -0c、shellcode-04這種地址的值
//計算MOV [reg],reg 指令中 [reg] 的值
3. MOV reg,ESP //這條指令是最重要的,沒有它,根本無法動態定位shellcode地址
4. NOT reg //這條指令可有可沒有,用來計算0x00000040 和 0x00000400 這種值,如果沒有的話,通過Add(SUB) 指令也能實現
5. POP regx //這條指令可用于向寄存器賦值,是寄存器計算前的必要指令。
在這些種指令中,實際查找時會發現除第五條指令外,其他格式的指令均難以尋找。我也是找了一個星期才湊全這5種指令格式。
###三、搜索模塊中可用代碼片段
搜索過程中搜到了很多和最終構造無關但可能有奇效的指令,詳情可參考第二篇筆記。
1. MOV [ reg ], reg
需要 12個字節的垃圾填充。
2. SUB reg,reg
需要 8個字節的垃圾填充。
3. MOV reg,ESP
無需字節填充,但需要在pushad發生前構造各相關寄存器值。
4. NOT reg
需要16字節垃圾填充
5. POP reg
###四、封裝代碼片段至模塊
為了后期使用的方便,最好能夠將個代碼片段封裝成ROP片段,最終ROP_chain構造時直接拷貝粘貼即可。各個指令片段封裝格式如下所示:
MOV [ ecx ], eax
SUB eax,edx
MOV ecx,ESP
MOV eax, ESP
NOT eax
POP ecx
POP edx
###五、書寫簡單的ROP偽指令
這段ROP片段 + Zw* + “調用棧結構” + Shellcode,就可以成功關閉DEP并運行后側的 shellcode 了。
然而在這段偽指令中發現,每次寫地址需要計算兩次,如果都用SUB實現,將會經常備份數據,因為eax只有一個,組織代碼將會相當復雜,如果能找到其他的加法指令就會好多了。 帶著這個問題,我在內存中又簡單的搜索了一下,順利找到了以下代碼:
這處代碼原本是INC ECX \ RETN 如果連續使用4次,正好能夠完成ADD ecx,4的功能。至此“萬事具備,只欠拼接”。
###六、組裝代碼片段
這個沒什么好說的了,就是參照偽代碼,把封裝好的代碼片段組合到一起,如下圖所示:
###七、調試完成
在metasploit中啟動運行,用IE8+Win7訪問,查看是否能夠成功執行shellcode,如果訪問失敗,可以通過設置c3斷點,或在ROP中設置0x41414141進行中斷,另外SUB指令執行時的EDX值,既可以在構造完成后集中計算,也可以單步跟蹤時手動調節。
結尾:
本篇筆記記錄了一個相對復雜的ROP構造過程。
ROP構造是一個奇妙的過程,它和程序設計有著很多相似之處,都是需要先明確目標,然后選擇偽代碼描述,最終用代碼組織完成。然而和普通程序設計不同的是,ROP的語法塊需要在內存中去尋找,并自己定義,只有找全了各種功能的代碼片段,才能完成最終的ROP_chain編寫。