zend反編譯 dezender 使用

2021-06-06 16:38:14 字數 2766 閱讀 9635

網上找了一圈,各種名字的zend反編譯軟體,核心就是 40,960 位元組 的 php.exe。

原理其實比較簡單,網上也有很多介紹。

主要是在php源**的基礎上,在zend_execute_scripts函式中,zend_compile_file與zend_execute之間插入我們的函式,然後把eg(active_op_array)解密並且反編譯成源**。當然,這項工作是比較繁雜的。因為zend optimizer對這個指令陣列處理過(主要是優化和加密),並且我們只能通過php源**和測試案例推測它的處理規律。

php.exe 讀入zend 過的 php 檔案,經過處理,還原出了原始碼,但是如果 檔案 在zend加密的時候選擇了變數、函式、類名  混淆,那麼php.exe得到的就是混淆後的名字,一般都是亂碼(含有回車、換行等字元),php.exe 為了讓還原後的**視覺化,統一把那些混淆的名字進行了base64_encode處理,處理後的名字有三個字元:= + / 不符合php變數名規範,於是把 = 替換成 \xff ,把 / 替換成 \x7f  ,把 + 替換成 _ 。 大家用winhex 開啟 dezend後的檔案,就會看到這3個字元。

----------------

config.ini 的原理:

zend engine v2.3.0 之前 函式、類、變數的混淆函式演算法 是固定的。所以在 config.ini 裡放入一些 php的內部函式等字串, php.exe 執行的時候,從 config.ini 讀取這些字串,然後按照混淆演算法處理,得到了其對應的混淆後的值; php.exe 在反編譯理的時候,得到了乙個混淆的名字,就可以對應找出其 明文。 這跟其他的字典破解密碼的方法一樣。

上面是我猜測的,當時在論壇沒有看到這方面的說法。 為了驗證這點,我把 header 從config.ini 裡刪掉,然後反編譯,檔案裡對應 header 的位置變成了 _obfuscate_d1x0capj ,再加回去,再反編譯一次,對應位置又變成了 header 。經過測試, config.ini 裡的字串大小些沒有影響,字串header,反編譯後檔案裡對應位置是 header ;字串是 header,dezend檔案裡對應位置就是 header。

所以收集到的 config.ini 裡的字串越多, 反編譯出來的 原始碼裡的 _obfuscate_ 名字就會越少。

mr.dezend 那個 gui 在解單個檔案時,挺好的,但是如果資料夾裡檔案數較多時,他就不能列出檔案來,待解檔案裡就一片空白。 用 php 寫個程式,遍歷全部檔案,然後呼叫php.exe命令列來dezend。

system("d:/dezend/php.exe $file /i /f /tab /stack:160 /string:40960 /level:10-1 /config:d:\\dezend\\config.ini");
/i /f  2個引數一起用,才會讀入 config.ini。 說明文件裡沒有,我是用 檔案監視器,監視php.exe執行時,配上不同引數,最後發現加上這 2個引數時, php.exe才讀取了 config.ini。

1、把 反編譯後檔案裡 _obfuscate_ 這樣的字串提取出來

2、把 混淆演算法弄成 exe檔案,輸入乙個 字串檔案,每行乙個字元,然後程式把混淆後的值跟 我們要求解的進行對比,才有窮舉的辦法。

3、這樣似乎沒什麼必要,有那麼個力氣,自己去改個變數名就足夠了。

作者還說:

據我所知,zend提供的混淆函式(zend_obfuscate_class_name)有bug,不是嚴格的一一對應,也就是說不同的函式名混淆後的名字可能是相同的,我就發現乙個。這個檔案可能就是這個問題,php說有函式重定義,編譯階段就停止了,反編譯就進行不了了。

要是人為了製造這樣的情況,那麼處理後的檔案,目前流出來的這個php.exe 就不能被反編譯了。  黑刀 提供php的防反編譯服務,說是把原始碼給他,經他處理後,就可以防止被反編譯了,不知道是不是利用的這個原理。

php index.php /i /f /tab /stack:160 /string:40960 /level:10-1
反編譯的時候,遇到這種異常,不知道是不是這個原因呢。

header( "content-type:text/html;charset=utf-8" );

session_start( );

set_time_limit( 0 );

error_reporting( e_all ^ e_notice );

[exception occured]

******************************==

exception code[ c0000005 ]

compiler[ 009a2da0 ]

executor[ 009a2820 ]

oparray[ 00aabeb8 ]

file< e:\index.php >

class< main >

function< main >

stack[ 00145ad0 ]

step[ 7 ]

offset[ 17 ]

lastoffset[ 284 ]

17 add [-] 0[0] $tmp_4 - $tmp_1 - $tmp_6

如果加上 /r 引數,可以看到 raw op code ,就是純執行流程,雖然不能還原原始碼,但是可以看到一些演算法。

反編譯 PB反編譯 2020 PB反編譯大師

1 反編譯powerbuilder編譯後的pbd檔案,支援版本5,6.5,7,8,9,10,10.5,11,11.5,12,12.5,12.6,2017,2018,2019,pkb2.5,共計16個版本。2 主要用於工程文件丟失後的恢復,即工程恢復。3 在此demo中釋放出全部版本作為測試,囊括了5...

Python反編譯 pyc檔案反編譯

最近一直在研究python反編譯的問題,以前的decompyle只支援到2.2就不再公升級了,而且國內的depython 也不知道怎麼回事,上面說是支援2.4 2.5,但是每次我提交後,返回的內容都是空的。在網上找了乙個專案,自己改了很長時間,總算有點起色了,大部分的2.5特性都是支援的,只是2.5...

Android 反編譯方法 防止反編譯方法

android反編譯方法 android 防止反編譯的方法 1.自己的apk要簽名 簽名之後的apk 反編譯之前與之後的源 就會變成這樣 之前 public class mainactivity extends activity override public boolean oncreateopt...