Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


6 questions online user: 21

0
votes
answers
29 views
+10

逆向工程HTTP請求

2

我試圖解碼由Android的Instagram應用程序發送到graph.instagram.com的發佈數據。現在的問題是呈三角到一個在這裏找到:逆向工程HTTP請求

Reverse Engineer HTTP request

看來,無論是iPhone應用程序不同的方式處理這對Android應用或事情已經改變,因爲這個問題被問。我已經捕獲使用打嗝交通,似乎現在的主要數據發送到IG作爲.GZ文件:

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-- 

出於某種原因,我無法完全粘貼下面二進制「胡言亂語」,它削減幾行後關閉。

任何想法如何編碼?它應該是.gz,但Burp的輸出看起來不像它。無論如何,我可以保存文件,以便我可以檢查它?布爾普和提琴手似乎都支持這樣的事情。

+0

您可以使用fiddler輕鬆保存文件! –

+0

我是一個提琴手用戶,不知道如何將字節保存到Burp中的文件中。但是,如果您只關心獲取文件而不管從哪個軟件獲取它,我可以幫助您! –

+0

'任何想法如何編碼? '。就像你已經說過的那樣。 '文件名= 「a24cc6f3-23f1-438f-AECB-3f201d312c90_1.batch.gz」'。和'Content-Transfer-Encoding:binary'。 – greenapps

沙发
0
-1

使用APKTool或類似的工具來反編譯APK將是您獲得實際編碼方法的最佳選擇。有許多偉大的圖書館允許您使用私人API(這是幾個Instagram應用程序版本背後),所以除非您需要新應用程序的特定功能,或者您只想學習,那麼也可以一個選項給你。

0
votes
answers
18 views
+10

Best practice for storing and protecting private API keys in applications

Most app developers will integrate some third party libraries into their apps. If it's to access a service, such as Dropbox or YouTube, or for logging crashes. The number of third party libraries and services is staggering. Most of those libraries and services are integrated by somehow authenticating with the service, most of the time, this happens through an API key. For security purposes, services usually generate a public and private, often also referred to as secret, key. Unfortunately, in order to connect to the services, this private key must be used to authenticate and hence, probably be part of the application. Needless to say, that this faces in immense security problem. Public and private API keys can be extracted from APKs in a matter of minutes and can easily be automated.

Assuming I have something similar to this, how can I protect the secret key:

public class DropboxService  {

    private final static String APP_KEY = "jk433g34hg3";
    private final static String APP_SECRET = "987dwdqwdqw90";
    private final static AccessType ACCESS_TYPE = AccessType.DROPBOX;

    // SOME MORE CODE HERE

}

What is in your opinion the best and most secure way to store the private key? Obfuscation, encryption, what do you think?

0
votes
answers
28 views
+10

使用哪些API將輸出寫入命令提示符?

0

我正在使用OllyDbg爲我的實驗任務逆向工程一個可執行文件。我的教授問了一個問題,要求提供負責將輸出寫入命令提示符的API。使用的DLLS是ntdll,kernel32,msvcr100使用哪些API將輸出寫入命令提示符?

沙发
0
0

實現此目的的方法有很多種,但着名的兩種方法是WriteConsoleWriteFile

從MSDN文檔:

WriteConsole

寫入一個字符串在 當前光標位置開始一個控制檯屏幕緩衝器。

BOOL WINAPI WriteConsole(
    _In_    HANDLE hConsoleOutput, 
    _In_  const VOID *lpBuffer, 
    _In_    DWORD nNumberOfCharsToWrite, 
    _Out_   LPDWORD lpNumberOfCharsWritten, 
    _Reserved_  LPVOID lpReserved 
); 

WriteFile的

將數據寫入指定的文件或輸入/輸出(I/O)設備。這個功能是爲同步和異步操作而設計的。

BOOL WINAPI WriteFile(
    _In_  HANDLE  hFile, 
    _In_  LPCVOID  lpBuffer, 
    _In_  DWORD  nNumberOfBytesToWrite, 
    _Out_opt_ LPDWORD  lpNumberOfBytesWritten, 
    _Inout_opt_ LPOVERLAPPED lpOverlapped 
); 

...
...
字符可以被寫入到使用WriteFile的一個 手柄控制檯輸出屏幕緩衝區。該功能的確切行爲是由控制檯模式確定的 。數據寫入當前的光標位置 。在寫入 操作後更新光標位置。

0
votes
answers
21 views
+10

如何把一個HASH字節的內存地址與OllyDbg的

0

我使用OllyDbg的修改應用程序,但我對彙編語言很新,我需要放置在一個內存地址的MD5哈希值,目的存儲器地址存儲在EAX。我該怎麼做?如何把一個HASH字節的內存地址與OllyDbg的

enter image description here

,我需要插入的哈希dba2d8bf7063faf1275e693661bc9651。我嘗試過以下幾種方式:

MOV DWORD PTR DS:[EAX],32616264 
MOV DWORD PTR DS:[EAX+4],66623864 
MOV DWORD PTR DS:[EAX+8],33363037 
MOV DWORD PTR DS:[EAX+12],31666166 
MOV DWORD PTR DS:[EAX+16],65353732 
MOV DWORD PTR DS:[EAX+20],36333936 
MOV DWORD PTR DS:[EAX+24],63623136 
MOV DWORD PTR DS:[EAX+28],31353639 

但是我覺得它很長很低效。我也曾嘗試保存散列另一個地址,並將其移動到哪裏,我需要它與MOV指令,但我不能讓它工作:

MOV DWORD PTR DS:[EAX], 012B2C60 

哪裏012B2C60是哈希地址。

發生在我身上的另一個問題是,當我啓動程序(我猜他們必須是動態地址)時,修改了帶黃色下劃線的字節,所以我在程序啓動時修改了該地址中寫入的內容,我該如何防止這發生了什麼?

enter image description here

沙发
0
1

順便說一句,你爲什麼需要複製32個字節? MD5 hashes are 16 bytes。你是否複製它的ASCII表示?

MOV DWORD PTR DS:[EAX], 012B2C60

,而無需修改寄存器無法複製存儲器到存儲器。而且,即使可編碼,具有32位絕對地址的mov指令序列也不會更短,因爲每條指令都需要012B2C60地址。


如果可以揍的XMM或YMM寄存器(或保存/堆棧上恢復它),可以複製使用2 XMM SSE加載/存儲對,或單個AVX vmovdqu ymm4, [012B2C60]/vmovdqu [eax], ymm4 32個字節

如果性能事項程序後,你這樣做,如果周圍的代碼已經在使用AVX AVX使用。否則,使用帶有XMM寄存器的SSE movups。 (Avoid AVX/SSE transition stalls or Skylake false dependencies)。

相反AVX和SSE,你可以通過推ESI,EDI和ECX和使用ecx=8/rep movsd實現的memcpy,然後恢復暫存器。 (對於代表MOVSD,然後sub edi, 32,然後xchg再次之前EDI你可以xchg eax, edi。因爲如果這是比任何推/彈出更好地節省/它與其他一起恢復,雖然性能IDK。

或者,如果你不這樣做如果你的代碼只在程序啓動時運行一次,那麼除非代碼大小是真正的問題,否則它可能是最容易使用的立即數數據而不是複製。這對於總空間效率來說並不好,因爲每個數據字需要3個額外的字節:操作碼,模塊和disp8(除了第一個使用尋址模式的[eax]push對於直接數據具有更好的密度,但只能推。到堆棧

64位模式下僅略有幫助; mov r64, imm64爲10個字節,但只有一個目標寄存器工作

+0

謝謝,是的,它是一個ASCII表示,我選擇使用XMM註冊表移動字節,這樣我就可以只用兩個命令移動32個字節。但我仍然有地址的問題,我在第一次出版中提到... – Manuel23

+0

@ Manuel23:4指示:2加載/ 2商店。 (你想要的單詞是「寄存器」,而不是[「註冊表」](http://www.dictionary.com/browse/registry))。 –

+0

@ Manuel23:我不明白你的地址有什麼問題。 'movdqu xmm0,[012B2C60]'或'[012B2C60 + 16]'加載,並且您已經在'eax'中有地址,所以您可以使用'[eax]'和'[eax + 16]'尋址模式進行存儲。 –

板凳
0
0
  • 店的哈希碼在你的代碼段的底部,通常你可以。在代碼段中看到很多空閒的字節,它們永遠不會改變,它們是零數據段是用於你的全局變量的,所以它們可能會改變,但代碼段字節不會改變
  • 使用memcpy函數將這些字節複製到您的目標內存地址。
0
votes
answers
32 views
+10

Dalvik什麼是lfm的意思

0

我正在看編程的android smali代碼,我碰到這個聲明Dalvik什麼是lfm的意思

。現場市民K:LFM

什麼數據類型是K. JesusFreke沒有提到它https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields

沙发
0
3

我假定你的意思

.field public K:Lfm; 

(與分號結尾)。

K不是一個類型,這是該字段的名稱。類型是Lfm;,它是名爲fm的類的類型描述符。

+0

我從來沒有料到從smali HIMSELF的創作者那裏聽說過。謝謝 –

0
votes
answers
26 views
+10

如何在radare2中獲得漂亮的堆棧視圖?

1

這是進入視覺面板模式之後我得到在radare2堆棧視圖:如何在radare2中獲得漂亮的堆棧視圖?

enter image description here

這是從免疫的調試器的視圖:

enter image description here

如何我可以得到類似於radare2中的免疫調試器的視圖嗎?

沙发
0
0

無論誰在這裏結束,我沒有得到任何迴應,所以我把問題發佈到Reverse Engineering和radare2 github。你可以找到答案here