反向工程HTTP请求

时间:2017-12-03 02:36:27

标签: android instagram reverse-engineering

我正在尝试解码由Android Instagram应用发送到graph.instagram.com的帖子数据。这个问题与此处的问题相似:

Reverse Engineer HTTP request

似乎iPhone应用程序对Android应用程序的处理方式不同,或者自问题提出以来已发生变化。我使用Burp捕获了流量,似乎主要数据现在作为.gz文件发送给IG:

POST /logging_client_events HTTP/1.1
X-IG-Connection-Type: WIFI
X-IG-Capabilities: 3brTAw==
X-IG-App-ID: 567067343352427
User-Agent: Instagram 24.0.0.11.201 Android (23/6.0; 240dpi; 480x854; LENOVO/Lenovo; Lenovo A2016a40; A2016a40; mt6735; en_GB)
Accept-Language: en-GB, en-US
Content-Type: multipart/form-data; boundary=EuG_-5FMs7IwTX7eBzBDIJ9VEteYsO
Accept-Encoding: gzip, deflate
Host: graph.instagram.com
X-FB-HTTP-Engine: Liger
Connection: close
Content-Length: 4206

--EuG_-5FMs7IwTX7eBzBDIJ9VEteYsO
Content-Disposition: form-data; name="access_token"

567067343352427|f249176f09e26ce54212b472dbab8fa8
--EuG_-5FMs7IwTX7eBzBDIJ9VEteYsO
Content-Disposition: form-data; name="format"

json
--EuG_-5FMs7IwTX7eBzBDIJ9VEteYsO
Content-Disposition: form-data; name="cmsg"; filename="a24cc6f3-23f1-438f-aecb-3f201d312c90_1.batch.gz"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

í][sÚHý/<ÇÞ¾ª»]µÎÈÎâZ‰M›H[[*!HHÀ"0—©ùïûµ„mƒ2v‚�ÎTRCß/ç|§ïú½VÄÿ«�áµp<’Ní¬Æ-�,A¥œ0"j•×m<?ÂNü‡ñ)A|Ú³$ëÃY~IŽ  ¶À¹ß&Q\%GÛ(–�=a´‹NÕ‰dqû$Ʋ’�Ðn‡B”n˜'Ù2øŽ˜E\ÉhXÅ       ‹"«KOÀCDÙ= ã¨}B»PàÅ$RâÌÊÀúÿ¢Ñ°›ô‚¨Gƒ¢¬G[p£H°PѸ2L¥$¡âmÊCÅ"ò  ÚDçqnK×~8ÆüœÄ½YNtK„Ó°vöŸßkÃ0�Á'Ó°7    ó`4é…Ã$
n“xw‚$OªŠ@¬iRÆОĄóSiqpÏG�Y¦}º1DÑ¡²dƒG¼˜N Ÿßky0蘖…±Dq‚1—J   p�âŒa]í°
÷È-¦@AgÊ¢¢t©�(Ï$ŒÉ°LGƒX×7^^ÿëÕ*l©Y=áþv5÷¾fE›\êéXÔólõ•\μւw>ei„ŠòË4$7Ú?÷•ÿïyÒùz3ö«[õô*÷Ó‹¥×tæ�OW©Ÿ~IœfÄ\;Kò7šYæÚ7™ÛúÌ�¦Gœæs싹۬/œæ5k4Ôýw½¨Ý,úY”)Ô&Ó¬�è´/°Ó¬/Ý4ZºÍÏ�æ¥Ü™Æ×9qÓkÔ°ÏWŽ}Í»ö€9«Næ§uÒ«ÔI=ä¥ýÄùt½tí/    ¤Gv6ðs¿ïÚ×Ôµ¯ò†}™5Z/ÿOnâØ=î~ºÊtÞN³ŸøÍÏIê‘lØÎ/QçëUm˜Ô‡èïΣÙ0êa4­ÐõmowGY6š€¤é¬Ðþåo蟲“Eí}

--EuG_-5FMs7IwTX7eBzBDIJ9VEteYsO
Content-Disposition: form-data; name="sent_time"

1512267283.408
--EuG_-5FMs7IwTX7eBzBDIJ9VEteYsO
Content-Disposition: form-data; name="cmethod"

deflate
--EuG_-5FMs7IwTX7eBzBDIJ9VEteYsO--

出于某种原因,我无法粘贴&#39; gibberish&#39;完全低于二进制,并在几行之后切断。

知道这是如何编码的吗?它应该是.gz,但是Burp的输出看起来并不像它。无论如何我可以保存文件,以便我可以检查它? Burp,也不是小提琴手似乎支持这样的事情。

2 个答案:

答案 0 :(得分:2)

要进行解压缩,请使用省略标头检查的充气机

Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(File.read("*.batch.gz"))

在ruby文档中,我们可能会读到

Zlib::Inflate.new(window_bits = Zlib::MAX_WBITS)

创建新的充气流以进行减压。 window_bits设置历史记录缓冲区的大小,并可以具有以下值:

  • 0-膨胀使用zlib标头中的窗口大小 压缩流。

  • (8..15)- 覆盖压缩流中膨胀标头的窗口大小。窗口大小必须大于或等于压缩流的窗口大小。

  • 大于15将32-添加到window_bits以启用zlib和gzip 自动标头检测解码,或加16仅解码 gzip格式(对于非gzip,将引发Zlib :: DataError 流)。

  • (-8 ..- 15)-启用原始放气模式,该模式不会生成检查 值,并且不会在 流的结尾。

这可与其他使用deflate压缩数据格式的格式一起使用,例如zip,它们提供自己的校验值。

https://ruby-doc.org/stdlib-2.6.3/libdoc/zlib/rdoc/Zlib/Inflate.html

答案 1 :(得分:-1)

使用APKTool或类似的东西反编译APK是获得实际编码方法的最佳选择。有许多很棒的库允许你使用私有API(后面是几个Instagram应用程序版本),所以除非你需要新应用程序的特定功能或者你只是想学习,那么这也可能是你的选择。