大家好,我是東哥。
今天,我看到有網友因為同事被開,老板讓他接手同事的計畫,當他看到下面這幾段程式碼後,整個人都emo了~
說實話,要是我碰上了,整個人也得要崩潰,真可謂世上「最強防禦程式碼」,留下這段程式碼的大哥,真的是人才啊,擁有了宙斯盾裝備,完全撼動不了,開他的老板有苦頭吃了😂
說實話,上面這段程式碼, 感覺多半是被混淆的 ,你 不看原函式根本不知道幹啥的,把所有函式全用數位宏定義,根本不知道幹什麽用的,而且全是指標,就算你有原始碼一個—個看函式都得看—天嗎,想起當年剛畢業給某安全公司寫Cpp程式碼的時候,經常被領導戲稱「 宏孩兒 」,看了這位老哥的程式碼後,自侃不如😁
上次跟幾位做技術的朋友聊天,一起聊到「程式設計師如何擺脫35歲的魔咒?」,一致認為「在不影響系統效能的基礎上,寫出同事無法維護的程式碼」,也許是一種好的辦法, 自己寫了一個程式碼混淆器,可讀程式碼自己留檔 ,這樣接手你程式碼的人一定會emo的,就算老板招一個新人,如果是一個「菜雞」,看到這樣的程式碼,也一定會知難而退;說不定後面老板搞不定的時候,會聯系你去幫忙解決,這樣議價權就在你手上了~
在沒有AI之前,也許這樣能擺脫35歲的危機,有了AI也許這種辦法也不行了,我們一起來試試,把這段源碼發給AI, 讓它幫我們分析並重新整理成人能看懂的程式碼, 讓它 看看這段程式碼究竟在搞什麽鬼 😂
這裏,我還是只給一個簡單的提示詞,沒有寫針對性的結構化提示詞,如果對提示詞感興趣的話,可以存取這個提示詞倉庫。
網站地址:https://www.songshuhezi.com/tools/short.html
具體提示詞如下:
你現在是一名具有資深開發經驗的C++程式設計師,擅長將混淆程式碼還原成可讀程式碼,我將發給你一段C++程式碼,站在你的角度來分析這段程式碼的作用,將宏定義去掉,並給出你的最佳化建議,以中文輸出。
好了,我們來看看AI給出的回答,如下圖:
這便是AI給出的最終最佳化程式碼,如下:
#include "bal.h"
extern void ( *1142[ 1 ][ 6 ] )( void );
extern void ( *1143[ 1 ][ 6 ] )( void );
extern void ( *1144[ 1 ][ 6 ] )( void );
extern void ( *1145[ 1 ][ 6 ] )( void );
extern void ( *1146[ 1 ][ 6 ] )( void );
extern void ( *113 )( void );
void call_function(int x, int index) {
void ( * ( *array[ 1 ][ 6 ] ) ( void ) ) = { 1142, 1143, 1144, 1145, 1146 };
(***(*( ( void ( * ( * )[ 6 ] )( void ) ) 114[array[x]] ) + index ))( );
}
int main( void )
{
call_function(0, 0);
while( 1 )
{
call_function(1, 0);
}
return 0;
}
從整個過程中,我們可以看出來AI就做了這麽2件事:
將宏定義替換為直接的函式呼叫。
使用函式指標陣列進行函式呼叫。
由於AI沒辦法閱讀整個計畫的程式碼,它也只能幫你到這一步了,總的來說,這種混淆後的程式碼真的讓人很頭疼,我反正是打死都不想去分析,太費時間了,因為我以前經常用ollydbg分析exe,知道這裏面的痛苦,我現在是沒得精力研究這塊了,對這塊感興趣的同學,可以去逛一下 吾愛破解、看雪 這兩個論壇,裏面有很多脫殼破解的大神😓
好了,說回防禦性編程,可以去看看耗子哥之前寫的一篇文章【 】,最近,我正在看耗子哥寫得一本書【 左耳聽風——傳奇程式設計師練級攻略 】挺不錯的,在這裏推薦給大家讀讀,也許對你的程式碼修養有一定的提升。
比如書中提到了如何成為一名有競爭的程式設計師?如何度過中年危機?整體來說,這本書更多是偏向於底層功底,「道」的層面。
上面關於屎山程式碼,純屬調侃瞎聊,切勿當真。作為程式設計師我們要具備基本的職業素養,
拿了別人的錢,就得要好好幹事,提高程式碼的品質,使其更加健壯、易於維護和擴充套件。
說真的,要是你真的遇上這類程式碼, 咱們能不動就不動! 畢竟 這程式碼一看就讓人血壓飆升,稍不註意,kpi沒了,再改,就真的要原地去世了 😂
要是真的沒得辦法了,也得硬著頭皮上,耐心和細致的分析,如果你覺得自己難以搞定,或者非改不可,建議借助AI工具來協助你。
最後,想學編程的同學,可以關註一下這個網站,上面的內容很全哦
網站地址: https://www.j301.cn
熱門推薦