【總結】對大量函數進行trace調用流程+國際AIS3題

現在混淆的主要目的之一就有讓逆向分析人員不清楚函數的調用流程,給你一堆函數,加了高強度的OLLVM,更不能看了。那么Trace跟蹤技術就顯得很重要的,如果清楚了函數調用流程,那么逐個分析,距離成功不就很快了。

萬事開頭難,逆向程序難在不知道從哪開始。

前幾天做了一道AIS3的題目,內含50個加密函數,加密的流程很簡單,關鍵是對這50個加密函數進行了ollvm控制流平坦化魔改(去除也很簡單),主要是想拋磚引玉,鍛煉和練習trace的技術。這樣在以后遇到高強度的混淆干擾也能有一戰的能力。

題目附件如下:

[stateful]

本文的重點在于總結trace技巧,題目本身不算很難。

分析

打開題目,進入main函數

圖片

{width="5.75in" height="3.4270833333333335in"}

發現邏輯不是很難,進入state_machine函數

好家伙,一大坨

圖片

{width="5.75in" height="3.4166666666666665in"}

嘗試使用OBPO插件去除,發現直接卡死。使用D810也是卡死。

更高級的玩法使用Unicorn進行去除,類似deflat

本文的重點是在不去除平坦化的前提下去trace函數調用流程

圖片

{width="5.75in" height="3.09375in"}

發現有50多個state函數,并且每個函數的功能很簡單,我們的目的是:

trace每一個函數,并在梳理調用流程的過程中,輸出關鍵的加密流程,從而寫出解密流程

注意調試的時候,記得傳入參數

圖片

{width="5.75in" height="2.4895833333333335in"}

Trace

方法一:手動trace

最簡單粗暴的方法,對每一個state函數下斷點,然后運行程序,逐一拿到調用流程。

如果函數過多,這種方法就不太行了

圖片

{width="5.75in" height="2.1770833333333335in"}

最終筆者運行拿到了調用的流程


?a1[14]?+=?a1[35]?+?a1[8];a1[9]?-=?a1[2]?+?a1[22];*a1?-=?a1[18]?+?a1[31];a1[2]?+=?a1[11]?+?a1[8];a1[6]?+=?a1[10]?+?a1[41];a1[14]?-=?a1[32]?+?a1[6];a1[16]?+=?a1[25]?+?a1[11];a1[31]?+=?a1[34]?+?a1[16];a1[9]?+=?a1[11]?+?a1[3];a1[17]?+=?*a1?+?a1[7];a1[5]?+=?a1[40]?+?a1[4];a1[37]?-=?a1[29]?+?a1[3];a1[23]?+=?a1[7]?+?a1[34];a1[39]?-=?a1[25]?+?a1[38];a1[27]?+=?a1[18]?+?a1[20];a1[20]?+=?a1[19]?+?a1[24];a1[15]?+=?a1[22]?+?a1[10];a1[30]?-=?a1[33]?+?a1[8];a1[1]?-=?a1[29]?+?a1[13];a1[19]?+=?a1[10]?+?a1[16];*a1?+=?a1[33]?+?a1[16];a1[36]?+=?a1[11]?+?a1[15];a1[24]?+=?a1[20]?+?a1[5];a1[7]?+=?a1[21]?+?*a1;a1[1]?+=?a1[15]?+?a1[6];a1[30]?-=?a1[13]?+?a1[2];a1[1]?+=?a1[16]?+?a1[40];a1[31]?+=?a1[1]?+?a1[16];a1[32]?+=?a1[5]?+?a1[25];a1[13]?+=?a1[25]?+?a1[28];a1[7]?+=?a1[10]?+?*a1;a1[21]?+=?a1[34]?+?a1[15];a1[21]?-=?a1[13]?+?a1[42];a1[18]?+=?a1[29]?+?a1[15];a1[4]?+=?a1[7]?+?a1[25];*a1?+=?a1[28]?+?a1[31];a1[2]?+=?a1[34]?+?a1[25];a1[13]?+=?a1[26]?+?a1[8];a1[41]?-=?a1[3]?+?a1[34];a1[37]?+=?a1[27]?+?a1[18];a1[4]?+=?a1[27]?+?a1[25];a1[23]?+=?a1[30]?+?a1[39];a1[18]?+=?a1[26]?+?a1[31];a1[10]?-=?a1[12]?+?a1[22];a1[4]?+=?a1[6]?+?a1[22];a1[37]?+=?a1[12]?+?a1[16];a1[15]?+=?a1[40]?+?a1[8];a1[17]?+=?a1[38]?+?a1[24];a1[8]?+=?a1[14]?+?a1[16];a1[5]?+=?a1[37]?+?a1[20];

其實手都快殘了

方法二:IDA-trace

程序動態調試的時候才可以使用trace功能

圖片

{width="5.75in" height="2.40625in"}

圖片

{width="5.75in" height="2.8854166666666665in"}

IDA自動進行trace跟蹤,然后稍等片刻

圖片

{width="5.75in" height="2.6041666666666665in"}

可以發現成功的trace了調用了流程

圖片

{width="5.75in" height="2.4375in"}

但是有一點不方便的是,有了調用流程,但是我們還要進入每一個函數,提取加密的流程才行。

IDA快捷鍵Ctrl+F5可以導出整個程序的偽代碼

然后進一步提取和分析

圖片

{width="5.75in" height="3.6875in"}

這里可以使用IDA-python自動下斷點


??Goimport?idcbpt_addr?=?0x5599F331ADA7bpt_size=1idaapi.add_bpt(bpt_addr,bpt_size)print("Final")

當然還不夠,我們要達到的效果是,觸發斷點然后輸出相關加密信息到output函數窗口,就是有斷點回調函數


??import?idaapi#?定義回調函數def?my_bpt_callback(bptno):print("Breakpoint?%d?hit!"?%?bptno)#?添加斷點bpt_addr?=?0x5599F331ADA7bpt_size=1bpt?=?idaapi.add_bpt(bpt_addr,bpt_size)#?設置斷點回調idaapi.add_bpt_chngev_cnd(bpt,?idaapi.BPT_EXEC,?my_bpt_callback)#設置執行斷點-----------------------------------------------------------------------idaapi.BPT_EXEC?表示執行事件

方法三:trace_natives

https://github.com/Pr0214/trace_natives

按照說明,進行輸出,發現是這樣的效果(IDA中,Edit-Plugins-traceNatives)

圖片

{width="5.75in" height="1.125in"}

解密

有了調用流程,剩下的就很簡單了


?#define?_CRT_SECURE_NO_WARNINGS#include?<stdio.h>#include?<iostream>int?main()?{unsigned?char?a1[]?={0x0F,?0x77,?0xEC,?0x33,?0x44,?0x16,?0x13,?0x59,?0x1D,?0x42,0x84,?0x75,?0x5F,?0xE4,?0x83,?0xC0,?0x3B,?0xC1,?0x95,?0xCF,0xDB,?0x33,?0x6C,?0xD2,?0xED,?0x72,?0x5F,?0x0D,?0x74,?0x41,0x5B,?0x73,?0xA0,?0x33,?0x53,?0x24,?0x02,?0x59,?0x74,?0x60,0x33,?0xCC,?0x7D};a1[5]?-=?a1[37]?+?a1[20];a1[8]?-=?a1[14]?+?a1[16];a1[17]?-=?a1[38]?+?a1[24];a1[15]?-=?a1[40]?+?a1[8];a1[37]?-=?a1[12]?+?a1[16];a1[4]?-=?a1[6]?+?a1[22];a1[10]?+=?a1[12]?+?a1[22];a1[18]?-=?a1[26]?+?a1[31];a1[23]?-=?a1[30]?+?a1[39];a1[4]?-=?a1[27]?+?a1[25];a1[37]?-=?a1[27]?+?a1[18];a1[41]?+=?a1[3]?+?a1[34];a1[13]?-=?a1[26]?+?a1[8];a1[2]?-=?a1[34]?+?a1[25];*a1?-=?a1[28]?+?a1[31];a1[4]?-=?a1[7]?+?a1[25];a1[18]?-=?a1[29]?+?a1[15];a1[21]?+=?a1[13]?+?a1[42];a1[21]?-=?a1[34]?+?a1[15];a1[7]?-=?a1[10]?+?*a1;a1[13]?-=?a1[25]?+?a1[28];a1[32]?-=?a1[5]?+?a1[25];a1[31]?-=?a1[1]?+?a1[16];a1[1]?-=?a1[16]?+?a1[40];a1[30]?+=?a1[13]?+?a1[2];a1[1]?-=?a1[15]?+?a1[6];a1[7]?-=?a1[21]?+?*a1;a1[24]?-=?a1[20]?+?a1[5];a1[36]?-=?a1[11]?+?a1[15];*a1?-=?a1[33]?+?a1[16];a1[19]?-=?a1[10]?+?a1[16];a1[1]?+=?a1[29]?+?a1[13];a1[30]?-=?a1[33]?+?a1[8];a1[15]?-=?a1[22]?+?a1[10];a1[20]?-=?a1[19]?+?a1[24];a1[27]?-=?a1[18]?+?a1[20];a1[39]?+=?a1[25]?+?a1[38];a1[23]?-=?a1[7]?+?a1[34];a1[37]?+=?a1[29]?+?a1[3];a1[5]?-=?a1[40]?+?a1[4];a1[17]?-=?*a1?+?a1[7];a1[9]?-=?a1[11]?+?a1[3];a1[31]?-=?a1[34]?+?a1[16];a1[16]?-=?a1[25]?+?a1[11];a1[14]?+=?a1[32]?+?a1[6];a1[6]?-=?a1[10]?+?a1[41];a1[2]?-=?a1[11]?+?a1[8];*a1?+=?a1[18]?+?a1[31];a1[9]?+=?a1[2]?+?a1[22];a1[14]?-=?a1[35]?+?a1[8];printf("%s",?a1);return?0;}

得到flag


AIS3{4re_YOu_@_sTATEfUl_0r_StA03L3S$_ctF3R}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712693.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712693.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712693.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前段時間公司招人,面了一個要20K的,一問自動化只會點皮毛···

前段時間公司要招2個自動化測試&#xff0c;同事面了幾十個候選人&#xff0c;發現了一個很奇怪的現象&#xff0c;面試的時候&#xff0c;如果問的是框架api、腳本編寫這些問題&#xff0c;基本上個個都能對答如流&#xff0c;等問到實際項目的時候&#xff0c;類似“怎么從0開…

Spring - InitializingBean、@PostConstruct、@Bean(initMethod = “init“)和構造方法執行優先級比較

執行順序優先級 構造方法 > postConstruct > afterPropertiesSet > init方法 代碼案例 Component public class InitializingBeanTest implements InitializingBean {public InitializingBeanTest(){System.out.println("構造方法");}Overridepublic void…

《滴滴》24校招Java后端

1.問項目 2.Java的基本數據類型&#xff1f; 3.浮點型從二進制的視角是怎么存儲的&#xff1f;&#xff08;IEEE 754&#xff09;小數位如何計算出來的&#xff1f; 4.浮點型的正4.5和負4.5轉為int會怎么樣&#xff1f; 5.Int型999除float的100再乘100結果&#xff1f; 6.Strin…

實現窗簾系統監控功能-代碼實現

自定義監控指標是實現窗簾系統監控功能的關鍵一步。這通常涉及到你想要跟蹤和衡量的系統特定方面的數據。以下是一些步驟和考慮因素&#xff0c;可以幫助你自定義監控指標&#xff1a; 1.明確監控目標&#xff1a; 確定你想要監控的窗簾系統的具體方面。這可能包括窗簾的開關狀…

基于yolov8的半自動標注

一、前言介紹 在深度學習領域中&#xff0c;標注是一項非常重要的工作&#xff0c;因為許多深度學習模型都依賴于有標注的數據進行訓練。然而&#xff0c;標注數據是一個費時費力的工作&#xff0c;因此人們希望有一種方式來對標注過程進行自動化。這就是“半自動標注”的來源…

Linux入門攻堅——16、Linux系統啟動流程

CentOS5、6的啟動流程 Linux&#xff1a;kernel rootfs&#xff0c;Linux系統就是內核加上根文件系統。 內核之上是庫&#xff1a; 庫&#xff1a;函數集合&#xff0c;function&#xff0c;函數具有調用接口&#xff0c;庫函數不能單獨執行&#xff0c;必須被其他程序調用…

【前端素材】推薦優質在線電影院商城電商網頁Hyper平臺模板(附源碼)

一、需求分析 1、系統定義 在線電影商城是指一個通過互聯網提供電影服務的平臺&#xff0c;用戶可以在該平臺上瀏覽電影資源、租借或購買電影&#xff0c;以及觀看在線影片。 2、功能需求 在線電影商城是指一個通過互聯網提供電影服務的平臺&#xff0c;用戶可以在該平臺上…

四川尚熠電子商務有限公司電商服務領域的佼佼者

在數字化浪潮席卷全球的今天&#xff0c;電子商務已成為推動企業轉型升級、拓展市場渠道的重要力量。四川尚熠電子商務有限公司&#xff0c;作為一家專注于抖音電商服務的公司&#xff0c;憑借其獨特的服務模式和創新的營銷策略&#xff0c;在激烈的市場競爭中脫穎而出&#xf…

Linux 系統安裝/卸載 Nginx教程

優質博文&#xff1a;IT-BLOG-CN 一、安裝Nginx 【1】首先通過Nginx官網確定需要安裝的版本&#xff0c;如果Linux聯網則直接在Linux服務上使用wget命令將Nginx安裝包下載到/usr/local/目錄下&#xff1a; [rootxxx local]# wget -c http://nginx.org/download/nginx-1.22.1.…

【C++精簡版回顧】14.(重載2)流重載

1.流重載 istream ostream 1.class class MM {friend ostream& operator<<(ostream& out, MM& mm);friend istream& operator>>(istream& in, MM& mm); public:MM() {}MM(int age,string name):age(age),name(name) {} private:int age;st…

Three.js-05坐標軸AxesHelper

1.構建對象 說明&#xff1a;參數一表示坐標軸的長度。紅色代表 X 軸. 綠色代表 Y 軸. 藍色代表 Z 軸. const axesHelper new THREE.AxesHelper( 1 ); 2.設置位置 axesHelper.position.y1 axesHelper.position.x1 axesHelper.position.z1 3. 網格 說明&#xff1a;立方體…

沒有項目經歷,該如何寫簡歷?

沒有項目經歷&#xff0c;我該如何寫簡歷 一、前言二、挖掘自己三、看現成的項目經驗&#xff0c;轉化成自己的語言1、硬件方面2、軟件方面 四、最后 一、前言 相信有很多剛出來找工作的人會遇到這種情況&#xff0c;因為自身沒有項目經歷&#xff0c;投了很多的簡歷都石沉大海…

在python中,設置json支持中文字符串

# 省略以上環節 ... # 假設json格式如下 system_info_dict {uptime: uptime.split(".")[0],cpu_usage: cpu_usage,memory_usage: memory_usage,disk_usage: disk_usage,battery_percentage: battery_percentage,battery_status: batteryStatus }# 設置json支持中文字…

Day05:反彈SHELL不回顯帶外正反向連接防火墻出入站文件下載

目錄 常規基本滲透命令 文件上傳下載-解決無圖形化&解決數據傳輸 反彈Shell命令-解決數據回顯&解決數據通訊 防火墻繞過-正向連接&反向連接&內網服務器 防火墻組合數據不回顯-ICMP帶外查詢Dnslog 思維導圖 章節知識點&#xff1a; 應用架構&#xff1a;W…

Vue全家桶:vue2+vue3全部搞懂:第五篇,Vue的watch監視器

前提&#xff0c;建議先學會前端幾大基礎&#xff1a;HTML、CSS、JS、Ajax&#xff0c;不然不好懂 這一專欄知識將一次性將vue、vue2、vue3全部講明白 一、何為watch監視器 其實我個人理解&#xff0c;就跟原本的表單的input事件一樣&#xff0c;實時監視事件發生并同步更新數…

kswapd0挖礦病毒攻擊記錄

文章目錄 一、起因與病毒分析1、起因2、阿里云告警2.1 惡意腳本代碼執行12.2 惡意腳本代碼執行22.3惡意腳本代碼執行32.4 惡意腳本代碼執行4 3、病毒簡單分析3.1 病毒的初始化3.2 病毒本體執行 4、總結 二、ubuntu自救指南1、病毒清理2、如何防御 一、起因與病毒分析 1、起因 …

3D城市模型可視化:開啟智慧都市探索之旅

隨著科技的飛速發展&#xff0c;我們對城市的認知已經不再局限于平面的地圖和照片。今天&#xff0c;讓我們領略一種全新的城市體驗——3D城市模型可視化。這項技術將帶領我們走進一個立體、生動的城市世界&#xff0c;感受前所未有的智慧都市魅力。 3D城市模型通過先進的計算機…

SLAM基礎知識-高斯分布

???????正態分布&#xff08;高斯分布&#xff09;學習筆記 - 知乎 偏差(bias)、方差(variance)和噪音(noise)_noise variance-CSDN博客 --------------------------------------待更新---------------------------------------------------------------------------

Android的硬件接口HAL

我一直覺得&#xff0c;現代計算機不是一門科學&#xff0c;起碼快算不上一門理科科學。上上下下全是人造&#xff0c;左左右右全是生意&#xff0c;用管理學&#xff0c;經濟學去學計算機&#xff0c;也許更看得懂很多問題。HAL就是一個典型例子。 傳統Linux繞開了微軟的霸權…

圖片的處理庫Thumbnailator

摘要&#xff1a;最近遇到圖片處理的問題&#xff0c;借助了Thumbnailator庫&#xff0c;記錄下使用步驟如下…… 圖片處理&#xff0c;JDK中也提供了對應的工具類&#xff0c;不過處理較麻煩&#xff0c;Thumbnailator 是Google一個 開源Java 圖像處理庫&#xff0c;用于簡化 …