本人與大家一樣,原來只是乙個普通的程式設計師,靠給軟體公司打工謀生。後來感覺這樣長期幹下去沒有什麼前途,雖然現在年輕還可以加班加點靠拼身體吃飯,以後年紀大了怎麼辦?聽說很多人自己單幹每年靠共享軟體都可以賺幾十萬,我為什麼就不行?仗著自己技術好,並且當時已經有了成熟軟體的思路,我就辭職出來加入共享軟體這一行當了。
通過半年多的日夜苦幹,軟體終於編出來了。由於我覺得自己的軟體功能比較新穎,程式設計的技術也很好,以為只要一發布就會大家搶著註冊購買,也可以像那些成名的共享軟體作者一樣每月坐拿幾萬元,結果卻是令我想象不到的,在發布後的第一年,只有1個人註冊,只得到可憐的幾十元。我這下才認識到了軟體推廣的重要性 — 我們作為技術人員,往往是重技術輕營銷,結果是再好的軟體也由於無人知曉而只能孤芳自賞。我這時就有意在網上搜尋軟體推廣方面的文章,國內的資料少就到國外的共享軟體論壇去查,另外還結合自己在實際推廣中的經驗教訓不斷改進自己的推廣技巧,慢慢地在第二年軟體推廣有了初步起色,拿到了一千多元。接連在共享軟體領域摸爬滾打了幾年後,現在終於每月都有近萬元入賬。雖然比起那些共享大牛們來說這點錢還不足掛齒,但自己認為還算不錯了。為了避免程式設計師們重走像我當初的很多彎路,現在把自己的經驗教訓寫出來,給大家在軟體推廣方面一點啟示。
第一、 對軟體本身的要求。
第二、 軟體推廣的常用方法
第三、 軟體如何推向海外
你的軟體已經在國內推廣了,還要不要走向海外?回答是肯定的。由於國內存在對盜版解密等活動打擊不力的問題,你辛辛苦苦工作出來的勞動成果,給別人破解後可能全部付諸東流。所以在國內防止軟體被破解是乙個重大的課題,對付破解的問題我留到下一點再仔細講。而在國外,由於對於盜版以及破解打擊的力度較大,另外使用者的正版意識普遍比國內要高,所以付錢註冊購買的人也相對較多。所以你的軟體在國外推廣是很有必要的。就拿我來說,現在軟體收入的大部分就是來自海外使用者。
在國內推廣軟體,你要面對的最大問題莫過於軟體被破解了。很多軟體作者反映說,原來軟體在被破解前交費註冊的人還不少,但被破解後收入就直線下降,連成本都收不回來。您想,有了免費的東西人們還交那個錢幹什麼?
在這裡,我借鑑了乙個軟體作者的防破解經驗:發行1.0版時2.0版已經寫的差不多的。發行1.0版時要把1.0版的防破解或者註冊演算法寫的簡單些等著別人去破解。一但出現1.0的破解,等待幾周,這幾周的時間足以使網上1.0的破解版遍天下。然後,分析破解過程更改2.0版演算法(層層加密,複雜再複雜),雖無法**破解但可以浪費破解者的時間和耐力!一般情況下,在網上一搜你的軟體已經有破解版了(1.0的)新的破解者很少會再去破解,何況2.0版本更複雜些。我的乙個軟體用了此法,推出一月後被破解組織破解,公開破解過程及註冊演算法,並做成破解教程。其實破解從某種意義上說是幫我宣傳了軟體。我在乙個月後推出早已經寫好的新版本,還註冊成了「特別版」以迷惑想要破解版的人。使用上述方法後至少在我更新了幾次軟體後的今天仍沒出現破解。但在網上搜破解版、特別版、註冊版到處都是,可沒乙個是真的。其實一些破解高手只是想試探自己的能力,破解乙個軟體後,一般會把目標定在下乙個軟體上。不過如果你的軟體成為人手必備的工具,此法怕是不靈了。
另外,從技術上講也有一些防破解的方法。假設你的註冊部分有300行,你可以分成30個inline函式呼叫(一定要inline),func1(),func2()... func30(). 將他們隨意放到程式的各個部分,一定不能放在一起。不要用memcpy等常用系統呼叫拷貝註冊碼,盡可能自己寫,像memcpy很好寫,效能差點無所謂。經過編譯後inline函式展開,註冊部分和其他**混在一起,他要寫出序號產生器就很困難,因為要向在幾十萬甚至上百萬彙編**裡找出有用的註冊部分那簡直就像是在大海浬撈針。另外註冊碼也不要放在一起,假設你的註冊碼是12位,千萬不要用乙個12位的陣列放註冊碼,你可以在程式的不同位置定義12個全域性字元變數,每個放一位,這樣註冊碼在記憶體就不連續了。最好再加密處理一下(簡單的字元異或就可以),驗證時再解密。只要破解者找不到你驗證結束的地方,暴力和loader破解也沒有可能。很重要的一點是不要用連續記憶體儲存驗證用到的變數,盡量將用到的驗證臨時變數分散定義在程式的不同處,再在驗證中,不斷轉移一些值到其他變數中,對付暴力和loader會比較有效。沒有必要用複雜的加密演算法,更容易成為追蹤的目標。只要你將註冊部分隱藏的足夠好,也沒有漏洞,你花1天寫的加密演算法,破解者可能會花100-1000倍的時間破解。大部分人都會放棄。你將註冊做在一起,就像將你的財寶放在現代保險箱裡,雖然非常堅固難以解密,對於開鎖高手兩分鐘就開啟了。對於一些比較專業的破解者採用上面的方法也是很有效的但是,還是要避免一些低階失誤例如:不要在記憶體中直接出現註冊碼和明顯的註冊碼比較部分不要給使用者太多的有關註冊驗證的資訊,也不要接收到註冊碼後立刻就進行比較。在軟體的不同功能處實現驗證時的好處還有就是不會立刻執行到驗證**註冊碼,可以分多次驗證,也可以分成幾部分驗證,還可以分成幾層驗證驗證時,可以盡量多執行一些無用的操作,加上一些象遞迴之類難於除錯追蹤的**,但在其中要穿插實現軟體功能的**,否則人家直接就跳了過去。反正就是越不引人注意越好,亦即越亂越好。
其實要想徹底防止破解也是不現實的,除了研究一下破解方法,在發布前加殼外,並採用以上所說的方法外,不斷公升級程式也是比較好的方法。
總之,推廣軟體對於搞慣了技術的軟體作者來說一開始會走一些彎路,但只要不斷學習成功者的經驗,不斷吸取自己失敗的教訓,你也會成功的。最後,祝大家個個都成為共享高手。
乙個程式設計師如何月進萬金的?
本人與大家一樣,原來只是乙個普通的程式設計師,靠給軟體公司打工謀生。後來感覺這樣長期幹下去沒有什麼前途,雖然現在年輕還可以加班加點靠拼身體吃飯,以後年紀大了怎麼辦?聽說很多人自己單幹每年靠共享軟體都可以賺幾十萬,我為什麼就不行?仗著自己技術好,並且當時已經有了成熟軟體的思路,我就辭職出來加入共享軟體...
如何成為乙個優秀的程式設計師
programming achievements how to level up as a developer 翻譯而來。文章內容如下 乙個優秀的程式設計師如何能練就成乙個卓越的程式設計師?先等等,暫時不談卓越,先談談如何成為乙個優秀的程式設計師。從第一步到第n步並沒有明確的路線圖。事實上,第n步到...
如何摧毀乙個程式設計師的效率?
如何摧毀乙個程式設計師的效率?如何摧毀乙個程式設計師的效率 有時我什麼事都幹不了。當然,我走進辦公室,到處閒逛,十秒鐘就檢查一次電郵,看網頁,甚至幹些不用腦子的事,比如支付美國運通的賬單。但就是不會回到寫 的流程上來。這樣的低效症一發作一般都要持續一兩天。但在我的職業生涯裡,作為程式設計師,曾經好幾...