国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

矩陣爆破逆向之條件斷點的妙用

這篇具有很好參考價值的文章主要介紹了矩陣爆破逆向之條件斷點的妙用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

不知道你是否使用過IDA的條件斷點呢?在IDA進階使用中,它的很多功能都有大作用,比如:ida-trace來跟蹤調(diào)用流程。同時IDA的斷點功能也十分強大,配合IDA-python的輸出語句能夠大殺特殺!

那么本文就介紹一下這個功能點,使用z3來秒解題目。

條件斷點

什么是條件斷點呢?

條件斷點(ConditionalBreakpoint)是一種在代碼調(diào)試過程中設置的斷點,它可以根據(jù)特定的條件暫停程序的執(zhí)行。當程序執(zhí)行到設置了條件斷點的代碼行時,如果該條件為真,則程序會暫停執(zhí)行;如果該條件為假,則程序會繼續(xù)執(zhí)行。這種調(diào)試技術常用于復雜的程序調(diào)試,能夠幫助程序員更快地發(fā)現(xiàn)程序中的錯誤,并提高調(diào)試的效率。條件斷點可以應用于多種編程語言和開發(fā)環(huán)境中,如C++、Java、Python等。

與普通的斷點大差不差,不同點在于,程序運行到條件斷點處時,不會讓程序暫停,而是繼續(xù)執(zhí)行,并執(zhí)行我們設置好的腳本。

OK,接下來讓我們分析這道題目

初次分析

main函數(shù)

flag的格式

打開main函數(shù),發(fā)現(xiàn)使用了SIMD指令賦值了一些關鍵數(shù)據(jù)

繼續(xù)分析

看來cry1和cry2是很關鍵的函數(shù)

密文:

cry1

發(fā)現(xiàn)對我們的輸入flag,進行一些轉(zhuǎn)換:

比如:位置順序和對我們的flag異或一個固定的值。

異或的值是由上下文決定的,但是總是單字節(jié)固定

將輸入的flag運算完后,轉(zhuǎn)換為 一個int類型的矩陣

初次分析到此結(jié)束

【----幫助網(wǎng)安學習,以下所有學習資料免費領!加vx:dctintin,備注 “博客園” 獲取!】

?、?網(wǎng)安學習成長路徑思維導圖
?、?60+網(wǎng)安經(jīng)典常用工具包
 ③ 100+SRC漏洞分析報告
?、?150+網(wǎng)安攻防實戰(zhàn)技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
?、?超1800頁CTF實戰(zhàn)技巧手冊
 ⑦ 最新網(wǎng)安大廠面試題合集(含答案)
?、?APP客戶端安全檢測指南(安卓+IOS)

cry2

條件斷點妙用

經(jīng)過動調(diào),我發(fā)現(xiàn)關鍵的加密就這三個匯編指令。

意思:取flag->與一個固定的矩陣相乘->輸出加密之后的矩陣

如果我們能夠打印,加密前的flag和相乘的矩陣元素,就可以逆推明文啦

主要是不清楚,矩陣相乘的順序,可能是打亂的,那樣只能這樣來做。

使用了:條件斷點

這三個斷點依次使用下面3個條件輸出

主要是這兩個命令:

get_reg_value("rbx") 獲取rbx寄存器的值

idc.get_wide_dword() 獲取某地址的值(4字節(jié)讀?。?/p>


 ?print("[rbx] = ",hex(idc.get_wide_dword(get_reg_value("rbx"))))
 ?
 ?print("rax = ",hex(get_reg_value("rax")),"[rdi]=
 ?",hex(idc.get_wide_dword(get_reg_value("rdi"))))
 ?
 ?print("output,rax = ",hex(get_reg_value("rax")),"n")

然后edit breakpoint

OK,見證奇跡的時刻到了,運行程序,成功輸出:

推導

因為密文說16字節(jié)的,我們將真正的密文提取出來和我們輸入假flag產(chǎn)生的密文也提取出來,進行對比


Python

 密文
 ?unsigned int data[16] = {
 ?0x00000436, 0x000002B4, 0x000002AF, 0x00000312, 0x000002EA, 0x00000253,
 ?0x0000020A, 0x0000028E,
 ?0x000001C6, 0x0000015C, 0x0000017C, 0x0000017A, 0x0000069E, 0x000004AE,
 ?0x000004B1, 0x00000522
  };
 ?
 ?假flag輸出的結(jié)果密文
 ?unsigned int data[16] = {
 ?0x00000466, 0x000002F9, 0x00000329, 0x0000046E, 0x00000290, 0x00000184,
 ?0x000001E4, 0x0000023A,
 ?0x00000183, 0x000000C1, 0x0000011E, 0x00000122, 0x00000646, 0x00000467,
 ?0x000004F7, 0x000005EA
  };
 ?
 ?這是根據(jù)條件輸出得到的規(guī)律;
 ?
 ?x1*1+x2*5+x3*4+x4*3=0x436
 ?y1*1+y2*5+y3*4+y4*3=0x2B4
 ?z1*1+z2*5+z3*4+z4*3=0x2AF
 ?n1*1+n2*5+n3*4+n4*3=0x312
 ?
 ?x1*2+x2*1+x3*2+x4*3=0x2EA
 ?y1*2+y2*1+y3*2+y4*3=0x253
 ?z1*2+z2*1+z3*2+z4*3=0x20A
 ?n1*2+n2*1+n3*2+n4*3=0x28E
 ?
 ?x1*2+x2+x3+x4=0x1c6
 ?y1*2+y2+y3+y4=0x15c
 ?z1*2+z2+z3+z4=0x17c
 ?n1*2+n2+n3+n4=0x17a
 ?
 ?x1*3+x2*5+x3*4+x4*7=0x69e
 ?y1*3+y2*5+y3*4+y4*7=0x4ae
 ?z1*3+z2*5+z3*4+z4*7=0x4b1
 ?n1*3+n2*5+n3*4+n4*7=0x522

z3解密

解密腳本:


Python

 from z3 import *
 ?
 ?# 定義變量
 ?x = [Int(f'x{i}') for i in range(1, 5)]
 ?y = [Int(f'y{i}') for i in range(1, 5)]
 ?z = [Int(f'z{i}') for i in range(1, 5)]
 ?n = [Int(f'n{i}') for i in range(1, 5)]
 ?
 ?# 定義目標值
 ?goal = [
 ?0x466,
 ?0x2f9,
 ?0x329,
 ?0x46e,
 ?0x290,
 ?0x184,
 ?0x1e4,
 ?0x23a,
 ?0x183,
 ?0xc1,
 ?0x11e,
 ?0x122,
 ?0x646,
 ?0x467,
 ?0x4f7,
 ?0x5ea
  ]
 ?
 ?# 定義約束條件
 ?constraints = [
 ?x[0]*1 + x[1]*5 + x[2]*4 + x[3]*3 == goal[0],
 ?y[0]*1 + y[1]*5 + y[2]*4 + y[3]*3 == goal[1],
 ?z[0]*1 + z[1]*5 + z[2]*4 + z[3]*3 == goal[2],
 ?n[0]*1 + n[1]*5 + n[2]*4 + n[3]*3 == goal[3],
 ?x[0]*2 + x[1]*1 + x[2]*2 + x[3]*3 == goal[4],
 ?y[0]*2 + y[1]*1 + y[2]*2 + y[3]*3 == goal[5],
 ?z[0]*2 + z[1]*1 + z[2]*2 + z[3]*3 == goal[6],
 ?n[0]*2 + n[1]*1 + n[2]*2 + n[3]*3 == goal[7],
 ?x[0]*2 + x[1] + x[2] + x[3] == goal[8],
 ?y[0]*2 + y[1] + y[2] + y[3] == goal[9],
 ?z[0]*2 + z[1] + z[2] + z[3] == goal[10],
 ?n[0]*2 + n[1] + n[2] + n[3] == goal[11],
 ?x[0]*3 + x[1]*5 + x[2]*4 + x[3]*7 == goal[12],
 ?y[0]*3 + y[1]*5 + y[2]*4 + y[3]*7 == goal[13],
 ?z[0]*3 + z[1]*5 + z[2]*4 + z[3]*7 == goal[14],
 ?n[0]*3 + n[1]*5 + n[2]*4 + n[3]*7 == goal[15]
  ]
 ?
 ?# 創(chuàng)建求解器
 ?solver = Solver()
 ?
 ?# 添加約束條件
 ?solver.add(constraints)
 ?
 ?# 求解
 ?if solver.check() == sat:
 ?model = solver.model()
 ?for i in range(1, 5):
 ?print(f'x{i} = {model[x[i-1]]}')
 ?print(f'y{i} = {model[y[i-1]]}')
 ?print(f'z{i} = {model[z[i-1]]}')
 ?print(f'n{i} = {model[n[i-1]]}')
 ?else:
 ?print('無解')

得到的結(jié)果,將其按照數(shù)組來填充

得到


Python

這是真flag解密后的結(jié)果:
 ?x1 = 100
 ?y1 = 89
 ?z1 = 119
 ?n1 = 92
 ?
 ?x2 = 66
 ?y2 = 5
 ?z2 = 69
 ?n2 = 4
 ?
 ?x3 = 84
 ?y3 = 83
 ?z3 = 4
 ?n3 = 104
 ?
 ?x4 = 104
 ?y4 = 82
 ?z4 = 69
 ?n4 = 86
 ?
 ?100,89,119,92,66,5,69,4,84,83,4,104,104,82,69,86
 ?

這是假flag解密后的結(jié)果:

x1 = 60
 ?y1 = 1
 ?z1 = 47
 ?n1 = 4
 ?
 ?x2 = 88
 ?y2 = 87
 ?z2 = 86
 ?n2 = 95
 ?
 ?x3 = 89
 ?y3 = 13
 ?z3 = 14
 ?n3 = 94
 ?x4 = 90
 ?y4 = 91
 ?z4 = 92
 ?n4 = 93
 ?
 ?60,1,47,4,88,87,86,95,89,13,14,94,90,91,92,93

按照我的思路來填充結(jié)果數(shù)組;

因為剛才說了,異或的值不清楚,但是一直為單字節(jié)固定值,所以使用Cybe的爆破功能。

根據(jù)程序的驗證功能可知,flag以Sn@K開頭,所以找到了真正的flag

但是順序發(fā)生了變化,下面是假flag生成密文解密之后的結(jié)果,發(fā)現(xiàn)密文變化了

+-----------------------------------------------------------------------+

| Sn@ku2r3cd3__era? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

| Sn@k78906ba15432? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

| Sn@k0123456789ab? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

| 經(jīng)過交換后的結(jié)果:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

| Sn@k78906ba15432? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

| 按照我們構(gòu)造的flag交換順序后的字符串來恢復? ? ? ? ? ? |

| 恢復? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

| Sn@k3_are_cu2r3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

+-----------------------------------------------------------------------+

成功驗證!

更多網(wǎng)安技能的在線實操練習,請點擊這里>>

??文章來源地址http://www.zghlxwxcb.cn/news/detail-837675.html

到了這里,關于矩陣爆破逆向之條件斷點的妙用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 安全開發(fā)-JS應用&原生開發(fā)&JQuery庫&Ajax技術&加密編碼庫&斷點調(diào)試&逆向分析&元素屬性操作

    安全開發(fā)-JS應用&原生開發(fā)&JQuery庫&Ajax技術&加密編碼庫&斷點調(diào)試&逆向分析&元素屬性操作

    1、布置前端頁面 2、JS獲取提交數(shù)據(jù) 3、JS對上傳格式判斷 4、后端對上傳數(shù)據(jù)處理 前端JS進行后綴過濾,后端PHP進行上傳處理 架構(gòu):html js php - upload.php 安全問題: 1、過濾代碼能看到分析繞過 2、禁用JS或刪除過濾代碼繞過 前端白名單很輕易就能繞過 0、布置前端頁面 1、獲取

    2024年02月12日
    瀏覽(29)
  • 7.JS里表達式,if條件判斷,三元運算符,switch語句,斷點調(diào)試

    7.JS里表達式,if條件判斷,三元運算符,switch語句,斷點調(diào)試

    表達式就是可以被求值的代碼比如什么a = 1 語句就是一段可以執(zhí)行的代碼比如什么if else 直接給B站的黑馬程序員的老師引流一波總結(jié)的真好 就是基本上所有的語言都會有的if else 語句就是滿足不同的條件執(zhí)行不同的代碼,讓計算機有條件判斷的能力。 注意在if的括號里面除了

    2024年02月20日
    瀏覽(29)
  • VSCode調(diào)試Python程序需要設置斷點、運行調(diào)試、單步調(diào)試、查看變量值、監(jiān)視變量、條件斷點、調(diào)試器設置、調(diào)試工具欄等功能,讓Python調(diào)試輕松愉悅。

    使用VSCode調(diào)試Python程序的常用功能及其快捷鍵如下: 設置斷點:在代碼中點擊行號區(qū)域設置斷點,或使用快捷鍵 F9 。 運行調(diào)試:按下 F5 運行程序并進入調(diào)試模式。 單步調(diào)試:使用快捷鍵 F10 單步執(zhí)行當前行,使用 F11 單步進入當前行中的函數(shù)。 調(diào)試停止:使用快捷鍵 Shif

    2024年02月05日
    瀏覽(23)
  • 如何知道服務器的某個端口是否打開

    如何知道服務器的某個端口是否打開

    注意:服務器的TCP端口,比如1886端口,出方向 和進方向 都打開才可以用 1、telnet 命令:telnet ip port,port即端口,我們一般最常見的命令就是telnet,但是telnet使用的是tcp協(xié)議,換句話說telnet 只能檢測tcp 的這個端口打開了沒 若是端口打開,會出現(xiàn)下列信息 失敗的是這個 如果

    2024年02月07日
    瀏覽(36)
  • 概率論和隨機過程的學習和整理20:條件概率我知道,但什么是條件期望?可用來解決遞歸問題

    概率論和隨機過程的學習和整理20:條件概率我知道,但什么是條件期望?可用來解決遞歸問題

    目錄 1 目標問題: 什么是條件期望? 條件期望有什么用? 2 條件期望,全期望公式 3?條件期望,全期望公式 和 條件概率,全概率公式的區(qū)別和聯(lián)系 3.1 公式如下 3.2 區(qū)別和聯(lián)系 3.3 概率和隨機過程 4 有什么用:---可以解決很多遞歸的問題 4.1 使用前有個前提:界定清楚你要求

    2024年02月15日
    瀏覽(23)
  • 怎么知道自己的賬號是否被打上標簽?

    最近刷短視頻的時候經(jīng)常刷到官方播間的講解,說賬號標簽的問題。 然后都說要打好標簽,告訴你無數(shù)方法,但卻不知道自己按照他們的方法做了,到底有沒有打上標簽呢? 經(jīng)過48小時的搜索查找,最終在我贏上找到了一個還算靠譜的答案,分享給大家,希望對大家有所幫助

    2024年02月10日
    瀏覽(24)
  • linux Shell 命令行-05-test 檢查某個條件是否成立

    linux Shell 命令行-00-intro 入門介紹 linux Shell 命令行-02-var 變量 linux Shell 命令行-03-array 數(shù)組 linux Shell 命令行-04-operator 操作符 linux Shell 命令行-05-test 驗證是否符合條件 linux Shell 命令行-06-flow control 流程控制 linux Shell 命令行-07-func 函數(shù) linux Shell 命令行-08-file include 文件包含 linu

    2024年03月12日
    瀏覽(13)
  • mysql判斷查詢條件是否包含某字符串的7種方式

    like 也就是模糊查詢 如:select * from user where user_name \\\'%李%\\\' locate 判斷是否包含某字符串 如:select * from user where locate(\\\'李\\\',user_name)0 position 判斷是否包含某字符串 如:select * from user where position(\\\'李\\\' in user_name)0 instr 判斷是否包含某字符串 如:select * from user where instr(user_name,\\\'李\\\'

    2024年02月16日
    瀏覽(93)
  • 你是否想知道如何應對高并發(fā)?Go語言為你提供了答案!

    你是否想知道如何應對高并發(fā)?Go語言為你提供了答案!

    并發(fā)編程是當前軟件領域中不可忽視的一個關鍵概念。隨著CPU等硬件的不斷發(fā)展,我們都渴望讓我們的程序運行速度更快、更快。而Go語言在語言層面天生支持并發(fā),充分利用現(xiàn)代CPU的多核優(yōu)勢,這也是Go語言能夠廣泛流行的一個重要原因。 在Java中,要支持高并發(fā)有幾種方案

    2024年02月04日
    瀏覽(25)
  • 【Unity】一鍵切換是否允許#if UNITY_EDITOR條件編譯生效

    【Unity】一鍵切換是否允許#if UNITY_EDITOR條件編譯生效

    在項目中經(jīng)常會條件編譯的方式來讓編譯器環(huán)境和非編譯器環(huán)境跑不同的代碼,但這種方式會讓非編譯器環(huán)境的代碼測試變得十分不方便。UNITY_EDITOR也是Unity預定義的宏,不能直接在PlayerSettings里面增加或刪除。 用#undef UNITY_EDITOR可以取消unity預定義的UNITY_EDITOR宏,這樣就可以

    2024年02月11日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包