2011-10-20 2 views
0

내 함수에 문제가 있습니다. 나는 왜 그것이 한 방향으로 작용하고 다른 방향으로 작용하지 않는지를 알아낼 수 없다.누락 된 함수 인수를 해결하는 방법

내가 여기 http://adcrun.ch/ZJzV HTML 소스에 가서 javascript 인코딩 된 문자열을 함수에 넣으면 문자열이 잘 디코딩됩니다.

echo js_unpack('$(34).39(4(){$(\'29.37\').7($(34).7()-$(\'6.41\').7()-($(\'6.44\').7()*2))});$(\'29.37\').39(4(){3 1=-2;3 5=4(){9(1<0){$.26(\'15://25.22/21/24.20.19\',{14:\'46\',13:{16:18,17:23}},4(40){3 28=38(\'(\'+40+\')\');9(28.12&&1!=-2){45(31);3 8=$(\'<6 48="47"><27 36="#">49</27></6><!--43.42-->\');$(\'6.41 33#35\').57().60(\'59\',\'61\').30(8);8.62(4(){$.26(\'15://25.22/21/24.20.19\',{14:\'50\',13:{63:0,16:18,17:23,58:\'\'}},4(5){3 11=38(\'(\'+5+\')\');9(11.12&&1!=-2){52.51.36=11.12.53}});8.30(\'54...\')})}32{1=10}})}32{$(\'33#35\').56(1--)}};5();3 31=55(5,64)});',10,65,explode('|','|a0x1||var|function|rr|div|height|skip_ad|if||jj|message|args|opt|http|lid|oid|4106|php|fly|links|ch|188|ajax|adcrun|post|a|j|iframe|html|si|else|span|document|redirectin|href|fly_frame|eval|ready|r|fly_head|button|end|fly_head_bottom|clearInterval|check_log|continue_button|class|Continue|make_log|location|top|url|Loading|setInterval|text|parent|ref|margin|css|6px|click|aid|1000')); 

하지만 그것은 실패하고 나에게 다음과 같은 오류가 제공이 echo js_unpack($full_code);처럼 사용 암탉.

Warning: Missing argument 2 for js_unpack(), 
Warning: Missing argument 3 for js_unpack(), 
Warning: Missing argument 4 for js_unpack(), 

다음은 현재 사용중인 PHP 소스입니다.

//function to extract string between 2 delimiters 
function extract_unit($string, $start, $end) 
{ 
    $pos = stripos($string, $start); 
    $str = substr($string, $pos); 
    $str_two = substr($str, strlen($start)); 
    $second_pos = stripos($str_two, $end); 
    $str_three = substr($str_two, 0, $second_pos); 
    $unit = trim($str_three); 
    return $unit; 
} 

//html source 
$html = file_get_contents('http://adcrun.ch/ZJzV'); 
//extract everything beteen these two delimiters 
$unit = extract_unit($html, 'return p}(\'', '.split'); 

//full encoded strning 
$string = $unit; 
//the part here ne values ill be inserted 
$expression = "',10,65,"; 
//inserted value 
$insertvalue = "explode('|',"; 

//newly formatted encoded string 
$full_code = str_replace($expression,$expression.$insertvalue,$string).')'; 

//function to decode the previous string 
function js_unpack($p,$a,$c,$k) 
{ 
    while ($c--) 
    if($k[$c]) $p = preg_replace('/\b'.base_convert($c, 10, $a).'\b/', $k[$c], $p); 

    return $p; 
} 

//return decoded 
echo js_unpack($full_code); 
+0

'Fail'과'Warning'은 PHP에서 같은 수준의 오류가 아닙니다. –

+1

@ Jared : 요점은 단지 ... 작동하지 않는다고 생각합니다. –

+0

@ IgnacioVazquez-Abrams - 이해합니다. 내 요점은 "오류"가 오도 된 것일 수도 있고 그렇지 않을 수도 있다는 것입니다. 지혜롭게 말하면, 귀하의 의견은 완전히 계몽되지 않습니다. ';)' –

답변

2

나는 모든 코드를 설명하지는 않았지만 첫 번째 2 가지 예에는 근본적인 차이가 있습니다.

이 줄은 js_unpack 기능에 사 개 인수를 전달합니다

echo js_unpack('$(......);', 10, 65, explode('|', '|............')); 

이 줄은 통과 그것을 1 개 인자 :이 다른 문제의 루트의 경우

echo js_unpack($full_code); 

나도 몰라 그러나 그것은 "첫 번째 방법으로 작동하지만 두 번째 방법으로는 작동하지 않는다"고 말하는 것은 좋지 않습니다. 경고는 당신이 알아야 할 것을 정확히 알려줍니다 : 당신은 논증이 없습니다.

편집 :
귀하의 의견을 바탕으로, 나는 당신이 진정 무슨 일이 일어나고 있는지 이해하지 못하는 것 같아요. 당신은 "문자열을 복사하여 함수에 넣었다"고 말합니다. 이것은 잘못되었습니다. 실제로 복사 한 것은 1 문자열, 2 정수 및 1 배열이었습니다. 함수에이 4 개의 인수를 두었습니다.

echo js_unpack( 
    $full_code      // <-- Just 1 argument 
); 

이이 같은 서명이 간단하지 않습니다 :

echo js_unpack( 
    '$(......);',      // <-- Argument #1 (a long string) 
    10,        // <-- Argument #2 (int) 
    65,        // <-- Argument #3 (int) 
    explode('|', '|............') // <-- Argument #4 (array) 
); 

과 함께 것을 비교 :

은 아마 당신이 당신의 기능이 방법을 포맷하면 도움이됩니다. 일부 PHP 함수에는 default argument values이 있지만 js_unpack에는 해당하지 않으며 올바르게 호출하지 않는다는 명확한 경고를 제공합니다.

+0

모자'echo js_unpack ($ full_code);를 사용합니다. 아래 코드를 사용합니다. URL로 이동하여 코드를 추출하면 최종 문자열은'$ full_code'가되지만 첫 번째 예제에서는 url에 수동으로 입력하고 문자열을 복사하여 함수에 배치합니다. – bammab

+0

@bammab 내가 뭘하고 있는지 잘 모르겠다.하지만이 코드에 들어가기 전에 먼저 PHP 튜토리얼을 읽는 것이 좋다. –

+0

@bammab 나는 당신이 그 문제를 깨닫지 못했다고 생각합니다. 첫 번째 예에서는 함수에 단일 문자열을 전달하지 않습니다. 두 번째 시험에서, 당신은 그렇습니다. – Stephen

관련 문제