2016-06-10 150 views
0

我试图对第三方项目使用的base64编码的应用程序进行逆向工程,所以我可以创建一个自定义用户界面。我的方法在一个例子中取得了成功,但在其他例子中似乎并未达到标准(少数字符不太正确)。数据库中base64解码/编码不一致

AQAAAAAAGQBec2lwOigwMjAxMjM0NTZbMC05XSspQC4qFwBzaXA6MDIwMTIyMTEzQDEyNy4wLjAuMQAA 

^^实际base64编码

AQAAAAAAEABec2lwOigwMjAxMjM0NTZbMC05XSspQC4qEwBzaXA6MDIwMTIyMTEzQDEyNy4wLjAuMQoA 

,以配合PHP方法

由于控制字符^^最好的尝​​试,我实现了一些JSON编码,以使其更容易识别正在用于变量的字符串。该字符串与本例匹配,但base64编码结果与预期的实际不同。

$actualfour = 'AQAAAAAAGQBec2lwOigwMjAxMjM0NTZbMC05XSspQC4qFwBzaXA6MDIwMTIyMTEzQDEyNy4wLjAuMQAA'; 
echo "".$actualfour; 
echo "<br />"; 

    $four = chr(01); 
    $four .= chr(00); 
    $four .= chr(00); 
    $four .= chr(00); 
    $four .= chr(00); 
    $four .= chr(00); 
    $four .= chr(16); 
    $four .= chr(00); 
    $four .= '^sip:(02[0-9]+)@.*'; 
    $four .= chr(19); 
    $four .= chr(00); 
    $four .= 'sip:[email protected] 
'.chr(00); 

$jsonfour = json_encode($four); 
echo "unencoded: ".$jsonfour; 
echo "<br />"; 
$encodefour = base64_encode($four); 
echo "".$encodefour; 
echo "<br />"; 
$jsonencodefour = json_encode(base64_decode($encodefour)); 
echo "encoded: ".$jsonencodefour; 
echo "<br />"; 

if ($encodefour != $actualfour) { echo "FAIL"; } else { echo "PASS"; } 

^^代码方法

AQAAAAAAGQBec2lwOigwMjAxMjM0NTZbMC05XSspQC4qFwBzaXA6MDIwMTIyMTEzQDEyNy4wLjAuMQAA 
unencoded: "\u0001\u0000\u0000\u0000\u0000\u0000\u0010\u0000^sip:(02[0-9]+)@.*\u0013\u0000sip:[email protected]\n\u0000" 
AQAAAAAAEABec2lwOigwMjAxMjM0NTZbMC05XSspQC4qEwBzaXA6MDIwMTIyMTEzQDEyNy4wLjAuMQoA 
encoded: "\u0001\u0000\u0000\u0000\u0000\u0000\u0010\u0000^sip:(02[0-9]+)@.*\u0013\u0000sip:[email protected]\n\u0000" 
FAIL 

^^输出

回答

1

您在$four有几个错误。

  • chr(16)chr(0x19)chr(25)
  • chr(13)chr(0x17)chr(23)
  • 127.0.0.1之后的换行符应该是chr(00)

这里是正确的$four

$four = chr(01); 
$four .= chr(00); 
$four .= chr(00); 
$four .= chr(00); 
$four .= chr(00); 
$four .= chr(00); 
$four .= chr(0x19); 
$four .= chr(00); 
$four .= '^sip:(02[0-9]+)@.*'; 
$four .= chr(0x17); 
$four .= chr(00); 
$four .= 'sip:[email protected]'.chr(00).chr(00); 

您可以通过比较json_encode(base64_decode($actualfour))json_encode($four)找到所有这些差异。请记住,当它显示的控制字符为\u####时,数字为十六进制,而不是十进制。