導航:首頁 > 源碼編譯 > 反編譯是指解密

反編譯是指解密

發布時間:2023-05-10 16:02:51

Ⅰ 怎樣反編譯程序

高級語言源程序經過 編譯 變成可執行文件,反編譯就是逆過程。
但是通常不能把可執行文件變成高級語言源代碼,只能轉換成匯編程序。
計算機軟體反向工程(Reversepengineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程序(可執行程序)進行「逆向分析、研究」工作,以推導出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、運行方法等設計要素,作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。
反編譯是一個復雜的過程,所以越是高級語言,就越難於反編譯,但目前還是有許許多多的反編譯軟體: VB: VBExplorer 、VB反編譯精靈和VBRezQ;只能反編譯界面圖像,好像代碼不能完全反編譯 java: JAD ;java的反編譯比較常見,所以反編譯比較完全, 將class文件反編譯成java文件也是有可能的 C++ : eXeScope Dephi: DEDE c#:Reflector 易語言:E-Code Explorer.exe(易格式可執行文件分析器)。

php如何反編譯

PHP的編譯是線性的編譯過程, 不做優化, 所以這個過程非常之快。
而編譯和執行分離這個特性的提出著認為分離以後, 可以省掉編譯過程, 會有很大的性能提升.
代碼如下:
$ find ./ -name "*.php" -exec php -r "apc_bin_mpfile(array('{}'), array(), '{}' . '.bin');" \;

Ⅲ 反編譯一段代碼

<%
function vencode(venshop)
venshopbut=3
for i=1 to len(venshop)
if mid(venshop,i,1)<>"+" then
ven=asc(mid(venshop,i,1))-venshopbut
if ven>126 then
ven=ven-95
elseif ven<32 then
ven=ven+95
end if
vena=vena&chr(ven)
else
vena=vena&chr(13)
end if
next
vencode=vena
end function
venshopcom="uhvsrqvh1zulwh#%?gly#doljq@fhqwhuA?wdeoh#erughu@%%3%%#fhoosdgglqj@%%3%%#fhoovsdflqj@%%3%%#zlgwk@%%<;3%%A%!uhvsrqvh1zulwh#%?wuA?wg#khljkw@%%8%%#frovsdq@%%8%%A?2wgA?2wuA?wuA%!uhvsrqvh1zulwh#%?wg#khljkw@%%8%%#frovsdq@%%8%%#fodvv@%%ej%%A?2wgA?2wuA%!uhvsrqvh1zulwh#%?wuA?wg#ejfroru@%%&HFHFI7%%#khljkw@%%59%%#frovsdq@%%8%%#doljq@%%fhqwhu%%A%!vhw#uv@vhuyhu1fuhdwhremhfw+%dgrge1uhfrugvhw%,!vto@%vhohfw#-#iurp#yhqvkrsbw|sh#rughu#e|#lg#dvf%!uv1rshq#vto/frqq/4/4##!gr#zkloh#qrw#uv1hri!uhvsrqvh1zulwh#%?eA?d#wjhw@beodqn#kuhi@khos1dvsBw|shlg@%)uv+%lg%,)%A%)uv+%w|shqdph%,)%?2dA?2eA# #%!uv1pryhqh{w!orrs!uv1forvh!vhw#uv@qrwklqj!uhvsrqvh1zulwh#%?2wgA?2wuA%!uhvsrqvh1zulwh#%?wuA?wg#zlgwk@%%4:4%%#doljq@%%fhqwhu%%A%!uhvsrqvh1zulwh#%?s#vw|oh@*olqh0khljkw=#483(>#pjlq=#43s{*A?d#kuhi@kwws=22zzz1yhqvkrs1frp#wjhw@beodqnA?lpj#erughu@3#vuf@lpj2eorjr1jli#zlgwk@93#khljkw@5<A?2dA%!uhvsrqvh1zulwh#%?euA?d#kuhi@kwws=22zzz1yhqvkrs1frp#wjhw@beodqnA?irqw#froru@&F3F3F3ASrzhuhg#E\=YhqVkrs#Y;13?2irqwA?2dA?2wgA%!uhvsrqvh1zulwh#%?wg#zlgwk@7#edfnjurxqg@lpj2vsdfhu1jliA?2wgA?wg#zlgwk@433A?2wgA%!uhvsrqvh1zulwh#%?wg#zlgwk@88:A?s#vw|oh@*olqh0khljkw=#483(*AFrs|uljkw#5339#%!uhvsrqvh1zulwh#%?d#kuhi@%)zhe)%A%)krphsdjh)%?2dA1#Doo#Uljkwv#Uhvhuyhg1%)wh{wb4)vlwhqdph)%?euA%!uhvsrqvh1zulwh#wh{wb5)who)%?euA%!uhvsrqvh1zulwh#wh{wb6)%?d#kuhi@pdlowr=%)pdlo)%A%)pdlo)%?2dA#%)wh{wb7)id{)%?euA%!uhvsrqvh1zulwh#wh{wb8)|pdggu)%#%)wh{wb9)frgh)%#?d#wjhw@%%beodqn%%#kuhi@%%kwws=22zzz1pllehldq1jry1fq2%%A%)lfs)%?2dA%!li#dgplqvkrz@4#wkhq#uhvsrqvh1zulwh#%#?d#wjhw@beodqn#kuhi@dgborjlq1dvsA%)wh{wb:)%?2dA%!uhvsrqvh1zulwh#%?2sA?2wgA%!uhvsrqvh1zulwh#%?wg#zlgwk@47;#doljq@fhqwhuA?d#kuhi@&wrsA?lpj#erughu@3#vuf@lpj2dvdgdowrs1jli#zlgwk@68#khljkw@97A?2dA?2wgA?2wuA%!uhvsrqvh1zulwh#%?wuA?wg#khljkw@6#doljq@fhqwhu#frovsdq@8#ejfroru@&HFHFI7A?2wgA?2wuA%!uhvsrqvh1zulwh#%?2wdeohA?2glyA%!frqq1forvh!vhw#frqq@qrwklqj!uhvsrqvh1zulwh#%?2erg|A?2kwpoA%"
response.write "<textarea style='width:500;height:500;'>"
response.write vencode(venshopcom)
response.write "</textarea>"
%>

函數vencode(venshop)就是解密方法
以上代碼,你保存為asp文件,運行一下,文本框里的就是解密後的代碼,解密後的代碼有幾個網址,偶就不發了

源碼加密了怎麼解密求解

這不叫解密,而是叫反編譯。你提供的這一大堆都是亂碼沒用的東西,只能我親自看看文件了。但是這個反編譯的話,費用可不低!你還不如讓我開發一個,輕松,還能替你省錢。

Ⅳ vb軟體容易被反編譯嗎

VB軟體相對於其他編程語言的軟體來說,反編譯的難度並不是太大。反編譯是指通過逆向工程的方式將已經被編譯的程序轉換成可讀的源代碼。VB程序可以使用反編譯工具進行反編譯,常用的反編譯工具槐冊模有.net Reflector、ILSpy等。通過反編譯工具反編譯VB程鉛緩序可以姿塌輕松地獲取其源代碼,這對於一些需要保護自己程序源代碼的開發者來說是個問題。

為了防止VB程序被反編譯,我們可以使用一些防護技術,如混淆(Obfuscation)。混淆是指通過改變已編譯的程序源代碼中的標識符名稱、函數名稱等方式來隱藏源代碼的含義,從而使其難以被反編譯。除此之外,還可以使用加密解密技術、代碼簽名等方式來進一步提高程序的安全性。

總的來說,雖然VB程序可能會更容易被反編譯,但藉助防護技術和措施,我們也可以盡量保護我們的程序安全。

Ⅵ re從零開始的反編譯教程

寫在開頭,引用很喜歡的一句話: 要麼學!要麼不學!學和不學之間沒有中間值 不學就放棄,學就要去認真的學! --致選擇

為了回溯編譯過程(或對程序進行逆向工程),我們使用各種工具來撤銷匯編和編譯過程,這些工具就叫反匯編器和反編譯器。反匯編器撤銷匯編過程,因此我們可以得到匯編語言形式的輸出結果。反編譯器則以匯編語言甚至是機器語言為輸入,其輸出結果為高級語言。

數組的表示方式是:在基本類型前加上前中括弧「[」,例如int數組和float數組分別表示為:[I、[F;對象的表示則以L作為開頭,格式是 LpackageName/objectName;

(注意必須有個分號跟在最後),例如String對象在smali中為: Ljava/lang/String; ,其中 java/lang 對應 java.lang 包,String就是定義在該包中的一個對象。或許有人問,既然類是用 LpackageName/objectName; 來表示,那類裡面的內部類又如何在smali中引用呢?
答案是:在 LpackageName/objectName/subObjectName subObjectName 前加 $ 符號。

方法的定義一般為: Func-Name (Para-Type1Para-Type2Para-Type3...)Return-Type
注意參數與參數之間沒有任何分隔符,同樣舉幾個例子就容易明白

無序列表的使用,在符號"-"後加空格使用。如下:

https://www.jianshu.com/p/1c54c1ccf5cc

https://www.cnblogs.com/onelikeone/p/7594177.html

解決:點擊進去jd-gui,刪除試一試。再不行換最新版本

解析結束後進行編譯報錯
解決方法: https://blog.csdn.net/fuchaosz/article/details/104800802

Failed parse ring installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompress

解決方法:

降低gradle里版本,若出現
signatures do not match the previously installed version;

使用adb install命令在手機上安裝app時,遇到這個報錯。原因是新裝的app和手機上現有的舊版app沖突了。
解決方法:刪除手機上原來的app,再重新安裝即可。

可是轉念一想如果反編譯的apk都是Version 30 R+以上,難道我解壓後挨個改一遍gradle?太徹淡了,一定有解決方法,所以有了下面探究出現這個問題的解決方法:既然報錯是資源文件高版本不支持,而且沒有4位對齊,那麼不編譯資源文件就好了

APK簽名工具之jarsigner和apksigner:

https://blog.csdn.net/xzytl60937234/article/details/89088215?utm_medium=distribute.pc_relevant.none-task-blog-js_landingword-1&spm=1001.2101.3001.4242

利用apktool反編譯apk,並且重新簽名打包:

https://blog.csdn.net/qq_21007661/article/details/109851522?utm_medium=distribute.pc_relevant.none-task-blog-js_title-4&spm=1001.2101.3001.4242

驗證apktool能否使用

apktool -r d apk名字.apk,不反編譯資源文件,為什麼這么做,先挖個坑

錯誤提示沒有4位對齊和不支持30版本以上的資源文件。所有嘗試不編譯資源文件

解決4位對齊的方法:

查看當前目錄,生成了新文件:abc.keystor

使用JarSigner對apk進行簽名,命令如下

jarsigner -verbose -keystore abc.keystore -signedjar testx.apk src.apk abc.keystore

直接反編譯的apk產生上述錯誤

但是只編譯資源文件的apk安裝時

發現沒有使用V2進行簽名,這時候進行V2簽名, (apksigner,默認同時使用V1和V2簽名

所以先對只編譯資源文件的apk進行V2嘗試看能否成功

重復1(進行apktool -r d apk名字.apk)-->2 -->3 -->4( 不使用jarsigner而使用apksigner )

將生成的abc.keystore和打包回的apk( apktoolapp-debugdist 里的app-debug.apk)放入 C:Users aowei.lianAppDataLocalAndroidSdkuild-tools30.0.3 下,因為Android studio的SDK下有apksigner.bat.

對jarsigner只是apk進行了V1簽名;在Android7.0引入了V2簽名,因此,當進入sdk25.0.0及後續版本,會發現一個apksigner.bat執行腳本。

我們可以通過apksigner進行V2簽名,當然,apksigner默認是同時支持V1與V2的,於是:

學習了公鑰和密鑰的使用和區別,使用私鑰的加密演算法稱為對稱加密演算法,這種演算法實現是接收方和發送方公用一道密鑰,優點是效率高,缺點是安全性差,如果被第三人得知密鑰則信息泄露,由此衍生了公鑰加密演算法,也就是非對稱加密演算法,這個演算法是接收方給發送方公鑰,發送方用公鑰加密後發給接收方,接受方再用私鑰解密。這樣即使所有人知道公鑰也不會造成信息泄露。缺點是效率非常低。

此外了解了RSA簽名的大致過程,發送方擁有公鑰和私鑰,對信息進行摘要然後把摘要通過密鑰進行簽名,然後把簽名和信息一起發出去,那麼如何驗證該信息就是發送方發出的呢,這時候就使用到了公鑰驗證,通過公鑰對信息進行解簽,然後使用一樣的摘要演算法得到摘要,如果得到的摘要和解簽後的內容一致則說明是發送方發出。
總結就是公鑰加密,私鑰解密。公鑰驗證,私鑰簽名

RSA 密碼體制是一種公鑰密碼體制,公鑰公開,私鑰保密,它的加密解密演算法是公開的。由公鑰加密的內容可以並且只能由私鑰進行解密,而由私鑰加密的內容可以並且只能由公鑰進行解密。也就是說,RSA 的這一對公鑰、私鑰都可以用來加密和解密,並且一方加密的內容可以由並且只能由對方進行解密。

因為公鑰是公開的,任何公鑰持有者都可以將想要發送給私鑰持有者的信息進行加密後發送,而這個信息只有私鑰持有者才能解密。

它和加密有什麼區別呢?因為公鑰是公開的,所以任何持有公鑰的人都能解密私鑰加密過的密文,所以這個過程並不能保證消息的安全性,但是它卻能保證消息來源的准確性和不可否認性,也就是說,如果使用公鑰能正常解密某一個密文,那麼就能證明這段密文一定是由私鑰持有者發布的,而不是其他第三方發布的,並且私鑰持有者不能否認他曾經發布過該消息。故此將該過程稱為「簽名」。

Android 簽名機制 v1、v2、v3

進入JDK/bin, 輸入命令

參數:

進入Android SDK/build-tools/SDK版本, 輸入命令

參數:

例如:

最後安裝加 -t :

附上參考鏈接:

https://blog.csdn.net/A807296772/article/details/102298970

配置NDK的時候如果按鈕是灰色的,手動配置

直接在javac後面指定編碼是UTF-8就是了。

需要注意的是要加上* -classpath .其中classpath後面的一個黑點是不能省略的。

編譯好後如何導入so庫

成功運行後發現lib目錄下已經apk編進去so了

https://www.52pojie.cn/thread-732298-1-1.html
本節所有到的工具和Demo

IDA
鏈接: https://pan..com/s/15uCX8o6tTSSelgG_RN7kBQ

密碼:ftie

Demo
鏈接: https://pan..com/s/1vKC1SevvHfeI7f0d2c6IqQ

密碼:u1an

找到so並打開它 因為我的機型是支持arm的所以我這里打開的是armeabi文件夾下的so 如果機型是x86模式的那麼這里要打開x86模式下的libJniTest.so

編譯過程:

按住鍵盤組合鍵 shift + f12 打開字元串窗口 這個窗口將會列舉出so中所包含的所有字元串 因為上節課我們只編寫了一個字元串 所以這里只有一個hello 52pojie! 如果打開的是x86的so這里還會有一些.so 但是字元串只有這一個

滑鼠點在hello 52pojie!字元串上,打開 Hex mp窗口,修改hello 52pojie!對應內存地址的內容
關於字元對應的16進制可以在網路搜索ascii碼表 找到字元所對應的16進制

因為我要把hello 52pojie!修改成hello world! 是不是只要找到每個字元所對應的hex修改就好了
這里我看到 hello 52pojie!對應的hex是:68 65 6C 6C 6F 20 35 32 70 6F 6A 69 65 21
我在ascii碼表上找到world所對應的十六進制是:77 6F 72 6C 64
所以hello world! 對應的十六進制是:68 65 6C 6C 6F 20 77 6F 72 6C 64 21

注意編輯的時候游標暫停的位置只有先輸入字母才能更改成功,修改好後 右鍵Apply changes應用

退出後保存

此時已經so修改完畢

大功告成,hello 52pojie! --> hello world!

Ⅶ 如何防止程序員反編譯

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代碼

Ⅷ 什麼是反匯編

嘿嘿 匯編:就是將匯編語言源程序翻譯成(機器指令表示的二進制文件)目標程序。

反匯編就是匯編的反過程,它是將可執行的目標程序翻譯成匯編語言源程序的過程。也就是解密。
由於現在的保密意識到加強,一般在把目標程序寫入晶元的同時,都採取了軟體加密和硬體加密技術,反匯編的難度越來越大。

呵呵 滿意 就選滿意回答哦

Ⅸ 反編譯被加密了,有什麼辦法可以破解(雖然這

反編譯加密,我理解的是開發者選擇的一種演算法,生成一個密鑰,對軟體核心部分進行了加密編譯。你反編譯的話,需要他這個密鑰,找他這個密鑰的話,你需要找到他的解密文件。具體解密文件放在哪,你只能自己找了。

閱讀全文

與反編譯是指解密相關的資料

熱點內容
五菱宏光空調壓縮機 瀏覽:64
為什麼app佔用幾百兆 瀏覽:676
自動解壓失敗叫我聯系客服 瀏覽:482
易語言新手源碼 瀏覽:456
oa伺服器必須有固定ip地址 瀏覽:42
傳奇源碼分析是什麼 瀏覽:267
解放壓縮機支架 瀏覽:255
程序員禿頂搞笑相遇 瀏覽:6
IBM手機app商店叫什麼名字 瀏覽:834
jpeg壓縮質量 瀏覽:774
雲伺服器評測對比 瀏覽:145
java日期轉string 瀏覽:221
openfire源碼編譯 瀏覽:897
在線小工具箱引流網站源碼 瀏覽:337
非科班程序員自學 瀏覽:801
壓縮泡沫鞋底底材 瀏覽:219
程序員職場第一課2正確的溝通 瀏覽:679
遇到不合法app應該怎麼辦 瀏覽:91
匯編程序編譯後的文件 瀏覽:81
大智慧均線源碼 瀏覽:374