<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    少量虛假控制流混淆后的算法還原案例

    VSole2021-10-17 15:21:43

    目標apk輸出的結果和第一題很像:

    Java層也幾乎一樣:

    Sign1函數在Native層中和之前一樣是在JNI_OnLoad方法中通過RegisterNatives方法動態注冊。在sub_11088方法中可以定位到相關代碼。

     

    還是用一樣的腳本,獲取sign1代碼的實際偏移地址:

    Sub_10618方法的代碼結構和第一題有相似之處,于是打算由結果開始倒推分析。

    根據經驗,變量V20中應該存有結果字節數組。

    V20由v22格式化后得到,而v22是通過sub_17030方法生成。

    Sub_17030的第一個參數由前面的sub_16248方法生成。

    那就直接hook sub_16248和sub_17030兩個方法。當然hook之前還是先固定好傳入的字符串內容。


     

    由結果可以看出,先調用sub_16248方法,將隨機字符串進行處理。得到的結果

    ‘d5 d6 92 3c a6 bf 4f 04 bc dc 6b 26 50 f8 c7 e9’就是第一題md5哈希后的結果。


    而sub_17030是將哈希后的結果再次處理,得到‘ce c6 a6 4a 75 a2 d2 b7 90 6b d8 51 e9 73 ca a7’。


     

    先確認下sub_16248是否和之前的md5一樣。Sub_16248調用了sub_15B68。

    其中關鍵代碼為:

    Sub_1510C疑似md5_update,hook一下。果然第一部分還是相同的內容,第二部分就是隨機的字符串。

    存儲第一部分字節內容的地址為0x420F0。靜態查看時內容與運行時不一致。運行時才是需要的內容,可以判斷是運行時進行了解密操作。

    根據交叉引用,定位到運行時進行解密操作的代碼位置:

    因為這部分產生的內容不變,暫且就不深入分析了。直接回過頭分析sub_17030方法。

     

    Sub_17030內部實現分為兩部分,分別進行逐字節操作:


     

    這部分靜態分析稍微有點吃力,就嘗試用stalker打印指令流來分析。

     

    在課上的腳本上稍作更改后,對sub_17030進行hook。



    同時,固定傳入的字符串。(這里為了與后續的迭代計數器區分,輸入字符串換成了’ fedcba9876543210’)

    再次點擊按鈕,就可以得到一長串指令流了。


     

    回到sub_17030的實現,它分為①和②兩部分。


     

    部分①處匯編指令為:


     

    隨便取一個地址”0x171f0”,去前面導出的指令流中搜索,發現沒有執行到。

    而部分②的匯編指令是可以搜索到的,說明執行到了。

    這么看,估計部分①是虛假控制流。實際執行的只有部分②的指令。那么就只用看部分②的指令了。 

    部分②反編譯后的第一條語句為:

    Index & 0xf對應的匯編指令為:

     

    在指令流日志中搜索所有執行AND操作時index的值,發現從0x0開始遞增到0xf。猜測就是index迭代計數器。


     

    V18指向0x35F50。

     

    其初始化的值為:

     

    整個第一行語句用處就是從0x35F50處逐字節取值。取字節對應的匯編指令為:

     

    可以搜索所有取到的字節值。

    發現和初始化的值一致,說明沒有后續的處理。

     

    第二條語句:

     

    后半部分的(index ^ 0xFFFFFFF8) & index 相當于對index作mod 8處理。然后再將結果作為索引從0x42180處逐字節取值。這部分匯編為:

     

    0x42180處的初始化值為:

     

    而日志中打印的所取出的值和初始化的值不同。


     

    應該是在前面的解密函數里做了解密操作,因為結果是固定的(0x65, 0x39, 0x66, 0x30, 0x33, 0x34, 0x32, 0x61),沒有深究。

    第三條語句就是一系列的字節操作,后面算法還原時直接照著抄一下就行:

    第四條語句是將第三條語句生成的結果與輸入字符串做逐字節操作,也可以照搬一下。

    根據剛才的分析寫還原代碼:

    用相同的參數進行調用:

     可以得到與sign1算法相同的結果:

    再hook一組參照組:

    運行得到的結果也相同。

    代碼混淆sub
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    本文介紹如何利用可逆多項式和線性MBA表達式構造多項式MBA表達式,并用LLVM Pass實現一種簡單的多項式MBA混淆。MATH WARNING: 本文涉及少量抽象代數知識,基本上都是網安專業信安數學必修課中學到的內容。
    免殺知識匯總
    2021-08-25 23:11:00
    免殺知識匯總
    由于廠商對于app安全方面的認識不斷提升,當前iOS上的調試對抗愈演愈烈。有了思路,那接下來我們要如何找到kernproc的內核地址呢?根據上邊的線索,我們可以通過逆向kernelcache鏡像文件找到他的偏移。找到偏移后,下一個問題來了,由于ASLR的存在,我們必須要獲取到kernbase才能配合偏移量定位kernproc位置,進行進一步操作。
    上網搜索這個hdhcms是開源的,我們下載源碼,搜索我們需要利用的文件。上線后第一步,查看自己所獲取的權限whoami。可惜,
    00 摘要 2020年2月,Cybereason報告稱發現了Spark和Pierogi后門,其很可能被用于針對巴勒斯坦官員的定向攻擊活動。研究人員認為攻擊是由Molerats組織(又名Gaza Cybergang)發動的,這是一個講阿拉伯語,有政治動機...
    這凸顯了開發檢測惡意 PowerShell 命令的有效方法的迫切需要。在這項工作中,我們通過實施幾個新穎的惡意 PowerShell 命令檢測器并評估它們的性能來應對這一挑戰。在這項工作中,我們使用 AMSI 提供的信息對惡意 PowerShell 代碼檢測進行了首次研究。
    因前段時間退出了內網的學習,現在開始復習web方面的漏洞了,于是乎,開始了挖洞之旅,當我像往常一樣上傳冰蝎的webhsell時,發現冰蝎的馬子居然被殺了.......于是便有了該文章.....
    前言在系統被入侵后,需要迅速梳理出黑客的攻擊路徑,本文總結windows系統攻擊溯源過程中必要的排查范圍。排查項目用戶查看當前登錄用戶query user
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类