導航:首頁 > 源碼編譯 > c防止反編譯

c防止反編譯

發布時間:2022-01-25 19:32:45

❶ 怎樣防止編譯後的C語言文件被反編譯

app反編譯後防止介面泄露的方法,就是使用谷歌提供的混淆工具,將不要反編譯的文件保留,其他的都進行混淆,這樣之後反編譯看到的都是一些亂碼,例如abc之類的。

❷ 如何阻止APK反編譯查看源代碼

apk如何防止反編,就用反編譯工具來舉例,例如dex2jar和JD-GUI。dex2jar是將APK中的classes.dex轉化成Jar文件,而JD-GUI是一個反編譯工具,可以直接查看Jar包的源代碼。

具體步驟:首先將APK文件後綴改為zip,解壓,得到其中的classes.dex,它就是java文件編譯再通過dx工具打包而成的;解壓下載的
dex2jar,將classes.dex復制到dex2jar.bat所在目錄。在命令行下定位到dex2jar.bat所在目錄(在DOS命令下CD
目錄)。運行dex2jar.bat classes.dex生成classes.dex.dex2jar.jar
運行JD-GUI(jd-gui.exe),打開上面生成的jar包,即可看到源代碼了。
apk如何防止反編,現在大多開發者已經意識到了App加密保護的重要性,愛加密正是順應行業的發展,對APK進行加密保護,防止反編譯,保護開發者的創意不再被剽竊的第三方加密服務平台。
加密原理:通過對源碼進行加殼保護,然後生成類似虛像的DEX殼文件,即使反編譯也無法看到APK包的源碼,達到防止反編譯的目的。

另外,愛加密的三層加密保護技術:DEX加殼保護,DEX指令動態載入保護,高級混淆保護,可以保證App的動態安全和靜態安全,年前推出的SO庫保
護,使C/C++層面的代碼得到了專業保護,讓APK包無懈可擊。並且,不斷加強對App的保護力度,強力遏制打包黨的橫行,凈化android應用市
場,打造一個綠色的移動互聯網生態鏈。

❸ C++程序可以被反編譯嗎

c/c++程序是不能被反編譯的,除非是debug版本(包含各種標識符及調試信息),release版本沒有任何有關源碼的信息,是不能被反編譯的

❹ 如何防止代碼被反編譯

由於apk是Android虛擬機載入的,它有一定的規范,加密apk後Dalvik無法識別apk了。完全避免是不可能的,總有人能夠破解你的代碼。但是有幾種方式來提高被反編譯取代碼的難度。
1 關鍵代碼使用jni調用本地代碼,用c或者c++編寫,因此相對比較難於反編譯

2 混淆java代碼。混淆是不改變代碼邏輯的情況下,增加無用代碼,或者重命名,使反編譯後的源代碼難於看懂。 網上開源的java代碼混淆工具較多,一般是用ant的方式來編譯的。

1 . 在工程文件project.properties中加入下proguard.config=proguard.cfg , 如下所示:
target=android-8
proguard.config=proguard.cfg
Eclipse會通過此配置在工程目錄生成proguard.cfg文件

2 . 生成keystore (如已有可直接利用)
按照下面的命令行 在D:\Program Files\Java\jdk1.6.0_07\bin>目錄下,輸入keytool -genkey -alias android.keystore -keyalg RSA -validity 100000 -keystore android.keystore
參數意義:-validity主要是證書的有效期,寫100000天;空格,退格鍵 都算密碼。
命令執行後會在D:\Program Files\Java\jdk1.6.0_07\bin>目錄下生成 android.keystore文件。

3. 在Eclipce的操作
File -> Export -> Export Android Application -> Select project -> Using the existing keystore , and input password -> select the destination APK file

經過混淆後的源代碼,原先的類名和方法名會被類似a,b,c。。。的字元所替換,混淆的原理其實也就是類名和方法名的映射。
但4大組件並沒有混淆(所有在清單文件定義的組件不能被混淆),因為系統需要通過清單文件來查找和運行應用程序。

proguard.cfg 文件代碼解讀
-optimizationpasses 5 ->設置混淆的壓縮比率 0 ~ 7
-dontusemixedcaseclassnames -> Aa aA
- ->如果應用程序引入的有jar包,並且想混淆jar包裡面的class
-dontpreverify
-verbose ->混淆後生產映射文件 map 類名->轉化後類名的映射

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* ->混淆採用的演算法.

-keep public class * extends android.app.Activity ->所有activity的子類不要去混淆
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
native <methods>; -> 所有native的方法不能去混淆.
}

-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
-->某些構造方法不能去混淆
}

-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}

-keepclassmembers enum * { -> 枚舉類不能去混淆.
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable { -> aidl文件不能去混淆.
public static final android.os.Parcelable$Creator *;
}

❺ 如何防止程序員反編譯

Java從誕生以來,其基因就是開放精神,也正因此,其可以得到廣泛愛好者的支持和奉獻,最終很快發展壯大,以至於有今天之風光!但隨著java的應用領域越來越廣,特別是一些功能要發布到終端用戶手中(如Android開發的app),有時候,公司為了商業技術的保密考慮,不希望這裡面的一些核心代碼能夠被人破解(破解之後,甚至可以被簡單改改就發布出去,說嚴重點,就可能會擾亂公司的正常軟體的市場行為),這時候就要求這些java代碼不能夠被反編譯。

這里要先說一下反編譯的現象。因為java一直秉持著開放共享的理念,所以大家也都知道,我們一般共享一個自己寫的jar包時,同時會共享一個對應的source包。但這些依然與反編譯沒有什麼關系,但java的共享理念,不只是建議我們這樣做,而且它自己也在底層上「強迫」我們這么做!在java寫的.java文件後,使用javac編譯成class文件,在編譯的過程,不像C/C++或C#那樣編譯時進行加密或混淆,它是直接對其進行符號化、標記化的編譯處理,於是,也產生了一個逆向工程的問題:可以根據class文件反向解析成原來的java文件!這就是反編譯的由來。

但很多時候,有些公司出於如上述的原因考慮時,真的不希望自己寫的代碼被別人反編譯,尤其是那些收費的app或桌面軟體(甚至還有一些j2ee的wen項目)!這時候,防止反編譯就成了必然!但前面也說過了,因為開放理念的原因,class是可以被反編譯的,那現在有這樣的需求之後,有哪些方式可以做到防止反編譯呢?經過研究java源代碼並進行了一些技術實現(結果發現,以前都有人想到過,所以在對應章節的時候,我會貼出一些寫得比較細的文章,而我就簡單闡述一下,也算偷個懶吧),我總共整理出以下這幾種方式:

代碼混淆

這種方式的做法正如其名,是把代碼打亂,並摻入一些隨機或特殊的字元,讓代碼的可讀性大大降低,「曲線救國」似的達到所謂的加密。其實,其本質就是打亂代碼的順序、將各類符號(如類名、方法名、屬性名)進行隨機或亂命名,使其無意義,讓人讀代碼時很累,進而讓人乍一看,以為這些代碼是加過密的!

由其實現方式上可知,其實現原理只是擾亂正常的代碼可讀性,並不是真正的加密,如果一個人的耐心很好,依然可以理出整個程序在做什麼,更何況,一個應用中,其核心代碼才是人們想去了解的,所以大大縮小了代碼閱讀的范圍!

當然,這種方式的存在,而且還比較流行,其原因在於,基本能防範一些技術人員進行反編譯(比如說我,讓我破解一個混淆的代碼,我寧願自己重寫一個了)!而且其實現較為簡單,對項目的代碼又無開發上的侵入性。目前業界也有較多這類工具,有商用的,也有免費的,目前比較流行的免費的是:proguard(我現象臨時用的就是這個)。

上面說了,這種方式其實並不是真正加密代碼,其實代碼還是能夠被人反編譯(有人可能說,使用proguard中的optimize選項,可以從位元組流層面更改代碼,甚至可以讓JD這些反編譯軟體可以無法得到內容。說得有點道理,但有兩個問題:1、使用optimize對JDK及環境要求較高,容易造成混淆後的代碼無法正常運行;2、這種方式其實還是混淆,JD反編譯有點問題,可以有更強悍的工具,矛盾哲學在哪兒都是存在的^_^)。那如何能做到我的class代碼無法被人反編譯呢?那就需要我們下面的「加密class」!

加密class

在說加密class之前,我們要先了解一些java的基本概念,如:ClassLoader。做java的人已經或者以後會知道,java程序的運行,是類中的邏輯在JVM中運行,而類又是怎麼載入到JVM中的呢(JVM內幕之類的,不在本文中闡述,所以點到為止)?答案是:ClassLoader。JVM在啟動時是如何初始化整個環境的,有哪些ClassLoader及作用是什麼,大家可以自己問度娘,也不在本文中討論。

讓我們從最常見的代碼開始,揭開一下ClassLoader的一點點面紗!看下面的代碼:

Java代碼

❻ 為何C和C++編寫生成的可執行程序不可反編譯回源程序

因為不同的源程序經過編譯可能得到相同的可執行程序,因此如果反向操作就存在二義性了

❼ 哪位大哥研究過UNIX下C的反編譯,敬請指點

C/C++和C#、JAVA不一樣。像C#、JAVA這種解釋型語言是運行在虛擬機上的,建立在虛擬機規范之上,反編譯過程較容易實現。
而C/C++更接近底層系統實現和依賴於編譯器,不同編譯器生成的二進制代碼會相對不同平台有所區別,甚至同一操作系統不同系列的編譯器都會有一點差異,比如在linux下編譯C/C++得到的二進制代碼就很難或無法運行在windows平台上,反之亦然
所以反編譯很困難,現在大多數反編譯軟體都只能反編譯成匯編。有一些號稱可以反編譯成C或者C++的工具,但反編譯出來的結果大多看不明白,還不如用匯編。

❽ C語言反編譯求教

你好,網上有不少mips反編譯的軟體,不過都是只能反編譯獲得對應的匯編代碼。沒有可以輸出c語言的。

❾ C#如何防止被別人反編譯

C# 編寫的代碼通過VS編譯器生成 dll 或 exe ,很容易被一些反編譯工具查看到源碼或對源碼進行修改。
為防止代碼被反編譯或被篡改,我們可以進行一定的防範措施。但不能杜絕,因為DotNet編寫代碼運行必須編譯成IL 中間語言,IL是很規則,同時也很好反編譯。

反編譯防範措施:

❿ c語言怎麼防止別人抄襲

這個問題嘛。不太好解決。
以下方法僅供參考:
1、做注釋,在注釋中寫明author,一般來說都放在函數前。每個c文件也應該在開頭部分這樣做
2、在變數名稱中嵌入自己的名字簡寫或者直接就是名字
3、C測試數據中使用的數據用與自己相關的數據。
4、在C語言中設置類似水印的東西,例如,在某些程序的某些地方,悄悄的輸出自己的名字(當然,你不能讓別人知道你都什麼地方輸出了這些信息)。

暫時就想到這么多,如果,一個人能把上面的所有東西都改掉,那麼,我感覺他還不如自己做一個呢。。。
就是,你確定一個宗旨,讓他們改起來比做起來更加浪費時間和精力就ok了!

閱讀全文

與c防止反編譯相關的資料

熱點內容
android圖片變灰 瀏覽:268
linuxvi下一個 瀏覽:975
安卓手機的應用鎖怎麼解 瀏覽:735
linux增加路徑 瀏覽:849
sql身份證號最後四位加密 瀏覽:533
xp系統表格加密 瀏覽:856
光遇安卓軍大衣什麼時候上線 瀏覽:840
android應用商店圖標 瀏覽:341
java計算圓的面積 瀏覽:643
應用編譯優化recovery 瀏覽:577
域控命令n 瀏覽:258
php導出文件 瀏覽:15
谷歌地圖網頁版無法連接伺服器地址 瀏覽:298
菜鳥工具在線編譯python 瀏覽:858
柵格化命令有何作用 瀏覽:825
為什麼壓縮文件不能解壓 瀏覽:311
足球app哪個軟體好 瀏覽:96
產品經理逼瘋程序員的一天 瀏覽:17
修改svn伺服器ip地址 瀏覽:584
下列關於編譯說法正確的是 瀏覽:246