ChatGPT可以反編譯?

ChatGPT好好『善用』,他就是一個好幫手。最近在台灣駭客年會HITCON CMT 2023第一天的議程中又看到一種用法-反編譯。

於是拿很久前接觸OPCode時整理的內容作範例試試看。在之前的文章中有將一個很簡單的PHP程式利用VLD轉成OPCode,我選用該篇文章中的PHP 5.2.17版本OPCode(如下)嘗試讓ChatGPT轉回PHP


number of ops:  22
compiled vars:  !0 = $temp, !1 = $count, !2 = $i
line     # *  op                     fetch      ext  return  operands
-----------------------------------------------------------------------
   3     0  >   INIT_ARRAY                             ~0      1
         1      ADD_ARRAY_ELEMENT                      ~0      2
         2      ADD_ARRAY_ELEMENT                      ~0      3
         3      ADD_ARRAY_ELEMENT                      ~0      4
         4      ASSIGN                                         !0, ~0
   4     5      SEND_VAR                                       !0
         6      DO_FCALL                            1  $2      'count'
         7      ASSIGN                                         !1, $2
   5     8      ASSIGN                                         !2, 0
         9  >   IS_SMALLER                             ~5      !2, !1
        10    > JMPZNZ                              E          ~5, ->18
        11  >   POST_INC                               ~6      !2
        12      FREE                                           ~6
        13    > JMP                                            ->9
   6    14  >   ECHO                                           !2
        15      FETCH_CONSTANT                         ~7      'PHP_EOL'
        16      ECHO                                           ~7
   7    17    > JMP                                            ->11
   8    18  >   SEND_VAR                                       !0
        19      DO_FCALL                            1          'var_dump'
        20    > RETURN                                         1
        21*   > ZEND_HANDLE_EXCEPTION
下面為ChatGPT傳回的結果

<?php
$temp = array();
$temp[] = 1;
$temp[] = 2;
$temp[] = 3;
$temp[] = 4;

$count = count($temp);

$i = 0;
while ($i < $count) {
    echo $i;
    echo PHP_EOL;
    $i++;
}

var_dump($temp);
?>
下面,則是原本測試時的PHP原始碼。雖然寫法不同,但ChatGPT回傳的PHP code是對的。

<?php
$temp = array(1, 2, 3, 4);  
$count = count($temp);  
for ($i = 0; $i < $count; $i++) {  
    echo $i , PHP_EOL;  
}  
var_dump($temp);
後記:
  • ChatGPT問兩次以上,回覆的PHP就和我原本測試時的PHP原始碼不同了、而且是錯的! XD
  • 一開始我用『將下面opcode轉回 php』,ChatGPT回覆了一堆原因,就是沒回傳PHP。改用『下面OPCODE的PHP是什麼? 』,他才回傳PHP

留言