三道不同平臺的Reverse題目帶你入逆向坑
本文為原創文章,轉載請註明出處!
第一道(APK)
Re100
下載下來發現沒有字尾,IDA載入 發現是apk檔案
直接載入jeb分析 找到關鍵程式碼 右鍵反編譯這個類(或者可以按快捷鍵Tab)
先判斷我們輸入的字串(記作input)長度是否小於5 若成立 則輸出“tryagain!”
不成立的話將input進行逆序 然後md5加密接著進行base64編碼最後與
“NzU2ZDJmYzg0ZDA3YTM1NmM4ZjY4ZjcxZmU3NmUxODk=“
進行比較 若相同 則輸入正確
得到}321nimda{galflj,逆序一次得到jlflag{admin123}
第二道(PE檔案)
ransomware
0x01:
PEiD查殼無殼執行之後也沒中毒 無毒
0x02:
執行一下看看 可用的只有一個輸入框和一個按鈕(Decrypt),這裡可以通過Restorator進行分析
隨意輸入123456789 點選Decrypt 彈出對話方塊,看到關鍵點
一個是觸發的MessageBox (通過下API斷點)
一個是關鍵字串 Wrong,The password is error
兩種方法都可以定位到關鍵程式碼 (通過搜尋ASCII字串),下邊採用API斷點進行定位
0x03
先載入Olydbg分析一波,右鍵任意空白處或者直接(Ctrl+ N)
或者在命令欄中輸入bpGetDlgItemTextA,bp MessageBoxA
下好斷點之後,直接F9執行,隨意輸入12456789,程式會中斷到這裡
選中堆疊視窗buffer這一行 右鍵資料視窗中跟隨
接著除錯執行到返回(快捷鍵Ctrl+ F9)
這時可以看到資料視窗出現了我們的input123456789
接著F7 然後F8單步向下分析即可
具體分析結果:
1.程式先判斷我們的輸入是否等於18
2.關鍵程式碼就是地址00AE12A3 這個call
OD分析不方便敘述,還是用IDA吧
0x04
可以直接shift+F12找關鍵字串,也可以像下邊這樣
雙擊DialogBoxFunc
接著F5進行分析
所以我們只需byte_404000[]提取出來 與0xCC進行異或就可以得到flag
有一個簡單的辦法 就是選中所有資料 shift + E 即可
提取出的直接是C程式碼
最後得到flag{1_dO_n0t_wAnna_cry}
第三道(ELF檔案)
cracking_game載入IDA,Shift + f12 雙擊Bingo!....
雙擊通過Xref查詢引用Bingo處(sub_4E0)
接著按下空格切換成文字模式
程式碼向上翻 分析可知sub_4E0就是關鍵但是發現不可以使用F5
OptionàGeneralà,勾選上Stackpointer,然後就可以看到多了一列綠色的
然後alt+k可以修改
原來數值是0x2C改為0x0就可以
int__cdecl sub_4E0(inta1)
{
intv1;//ST18_4
intv2;//ST1C_4
intv3;//ST20_4
intv4;//ST24_4
intv5;//ST28_4
intv6;//ST2C_4
intresult;//eax
intv8;//[esp-10h] [ebp-3Ch]
intv9;//[esp-Ch] [ebp-38h]
intv10;//[esp-Ch] [ebp-38h]
intv11;//[esp-8h] [ebp-34h]
intv12;//[esp-8h] [ebp-34h]
intv13;//[esp-4h] [ebp-30h]
intv14;//[esp-4h] [ebp-30h]
intv15;//[esp+0h] [ebp-2Ch]
intv16;//[esp+4h] [ebp-28h]
intv17;//[esp+8h] [ebp-24h]
intv18;//[esp+Ch] [ebp-20h]
unsignedintv19;//[esp+10h] [ebp-1Ch]
int*v20;//[esp+20h] [ebp-Ch]
v20=&a1;
v19=__readgsdword(0x14u);
__printf_chk(1,&unk_A50,aCanYouSolveThi,v8,v9,v11,v13,v15,v16,v17,v18);
__printf_chk(1,"Giveme the flag please: ",v1,v2,v3,v4,v5,v6,v16,v17,v18);
__isoc99_scanf("%x%x %x",&v16,&v17,&v18);
if((((((((((((((((((((v17+1514584764)^0x58E7773A)-907520011)^0x74A4134B)+1299160922)^0x2A3457E6)
+1267464377)^0xBB5D6AFF)
+1051920565)^0x3C5A9BE1)
-1324494254)^0x9D91B40F)
-1113157154)^0x5D8ACD6E)
+1467566340)^0x481EE77)
-754063826)^0x5702EC35)
+1739736031)^0x80CAFC7B|((((((((((((((((((v18^0x63074EB7)-257813895)^0x3D898713)-515561400)^0xD4A1204D)
-309222932)^0xDB034E6B)
-1757999315)^0x85AEAF52)
+551686536)^0xCDC4D471)
+1687331817)^0x5BF4CECF)
+686778677)^0x97C13118)
-1982126587)^0x5B589A)
+1689812494)^0xDF2FFB19|(((((v16+929931831)^0x5039B3AD)+427557174)^0x1363F241)
-1960340062))
puts("Hmm...");
else
__printf_chk(
1,
"Bingo!The flag is flag{subflag0:subflag1:subflag2}`n",
(((((((((((((((((((v17+1514584764)^0x58E7773A)-907520011)^0x74A4134B)+1299160922)^0x2A3457E6)
+1267464377)^0xBB5D6AFF)
+1051920565)^0x3C5A9BE1)
-1324494254)^0x9D91B40F)
-1113157154)^0x5D8ACD6E)
+1467566340)^0x481EE77)
-754063826)^0x5702EC35)
+1739736031)^0x80CAFC7B,
(((((((((((((((((((v17+1514584764)^0x58E7773A)-907520011)^0x74A4134B)+1299160922)^0x2A3457E6)
+1267464377)^0xBB5D6AFF)
+1051920565)^0x3C5A9BE1)
-1324494254)^0x9D91B40F)
-1113157154)^0x5D8ACD6E)
+1467566340)^0x481EE77)
-754063826)^0x5702EC35)
+1739736031)^0x80CAFC7B,
v10,
v12,
v14,
((((((((((((((((((v17+1514584764)^0x58E7773A)-907520011)^0x74A4134B)+1299160922)^0x2A3457E6)
+1267464377)^0xBB5D6AFF)
+1051920565)^0x3C5A9BE1)
-1324494254)^0x9D91B40F)
-1113157154)^0x5D8ACD6E)
+1467566340)^0x481EE77)
-754063826)^0x5702EC35)
+1739736031,
v16,
v17,
v18);
result=0;
if(__readgsdword(0x14u)!=v19 )
sub_A20();
returnresult;
}
很明顯,程式對輸入的三個數,進行一系列的加減和異或,那麼我們只需要將+換成- 逆向操作就好了
計算程式碼:
intv0 =((((((((((((((((((((0^0x80CAFC7B)-1739736031) ^0x5702EC35)+754063826)^0x481EE77)-1467566340)^0x5D8ACD6E)+1113157154)^0x9D91B40F)+1324494254)^0x3C5A9BE1)-1051920565)^0xBB5D6AFF)-1267464377)^0x2A3457E6)-1299160922)^0x74A4134B)+907520011)^0x58E7773A)-1514584764);
intv1 =(((((((((((((((((((0^0xDF2FFB19)-1689812494)^0x5B589A)+1982126587)^0x97C13118)-686778677)^0x5BF4CECF)-1687331817)^0xCDC4D471)-551686536)^0x85AEAF52)+1757999315)^0xDB034E6B)+309222932)^0xD4A1204D)+515561400)^0x3D898713)+257813895)^0x63074EB7);
intv2 =(((((0+1960340062)^0x1363F241)-427557174)^0x5039B3AD)-929931831);
if((((((((((((((((((((v0+1514584764)^0x58E7773A)-907520011)^0x74A4134B)+1299160922)^0x2A3457E6) +1267464377)^0xBB5D6AFF) +1051920565)^0x3C5A9BE1) -1324494254)^0x9D91B40F) -1113157154)^0x5D8ACD6E) +1467566340)^0x481EE77) -754063826)^0x5702EC35) +1739736031)^0x80CAFC7B|((((((((((((((((((v1^0x63074EB7)-257813895)^0x3D898713)-515561400)^0xD4A1204D) -309222932)^0xDB034E6B) -1757999315)^0x85AEAF52) +551686536)^0xCDC4D471) +1687331817)^0x5BF4CECF) +686778677)^0x97C13118) -1982126587)^0x5B589A) +1689812494)^0xDF2FFB19|(((((v2+929931831)^0x5039B3AD)+427557174)^0x1363F241) -1960340062))
{
printf("%x",v0);
printf("%x",v1);
printf("%x",v2);
}
根據v0,v1,v2的輸入順序進行排序最後得到:
flag{e698830d:8dd70651:c1ecd292}
題目下載連結:
第一道:
https://pan.baidu.com/s/1bPZnjEXFODiZEAmegjYcPg密碼: 9yjv
第二道:
https://pan.baidu.com/s/1Qy_uL1H9LvChcFejAkGmlA密碼: ti5n
第三道:
https://pan.baidu.com/s/1mBlcZ5AwQ9GiIsmbbn3c5w密碼: 2mu4
課程推薦時間(via合天網安實驗室)
1、逆向工具大全
http://www.hetianlab.com/cour.do?w=1&c=C9d6c0ca797abec2016080315291800001
2、逆向遊樂園
http://www.hetianlab.com/cour.do?w=1&c=C9d6c0ca797abec2016080315412500001
文章僅用於普及網路安全知識,提高小夥伴的安全意識的同時介紹常見漏洞的特徵等,若讀者因此做出危害網路安全的行為後果自負,與合天智匯以及原作者無關,特此宣告。
相關文章
- 帶你入坑大資料(三) --- MapReduce介紹大資料
- Reverse a String-freecodecamp演算法題目演算法
- Android跨平臺入門:手把手帶你快速入門Flutter!AndroidFlutter
- 帶你快速搭建自己的Online Judge平臺
- 【JS 逆向百例】網洛者反爬練習平臺第三題:AAEncode 加密JS加密
- bugku一道逆向題目分析
- 三大場景,讓你快速“入坑” DevOpsdev
- Chaining If Else Statements 巨坑的題目AI
- 三個點帶你解讀Smartbi商業智慧大資料分析平臺大資料
- 微信開放平臺 第三方平臺開發踩坑記錄
- 帶你7天玩轉視覺化建站平臺視覺化
- 對VM逆向的分析(CTF)(比較經典的一個虛擬機器逆向題目)虛擬機
- 一道關於逆向的實戰CTF題目分析
- 三篇文章帶你快速入門Kotlin(上)Kotlin
- 踩坑:array_reverse 轉換改變了數值鍵問題
- Next.js踩坑入門系列(三)— 目錄重構&&再談路由JS路由
- 新版本重慶高校平臺逆向解析
- 前端工程不瞭解?帶你踩坑加爬坑。前端
- 三分鐘帶你入門瞭解openstack的Nova專案
- 三分鐘帶你入門瞭解openstack的cinder專案
- 三分鐘帶你入門瞭解openstack的keystone專案
- 三分鐘帶你入門瞭解openstack的glance專案
- js逆向爬蟲實戰(2)--快手第三方平臺之加密引數JS爬蟲加密
- 手摸手帶你入門ionic3(三):新建專案
- Atcoder 題目選做(三)
- 【JS 逆向百例】網洛者反爬練習平臺第四題:JSFuck 加密JS加密
- 【JS 逆向百例】網洛者反爬練習平臺第二題:JJEncode 加密JS加密
- windeployqt.exe的使用與避坑(windows平臺)QTWindows
- 九個問題帶你-從入門到熟悉 HTTPSHTTP
- 逆向WeChat(三)
- 帶你瞭解基於Ploto構建自動駕駛平臺自動駕駛
- 演算法分析:看雪CTF2019的一道逆向題目演算法TF2
- 【題目整理】dfs入門
- 帶你掌握如何檢視並讀懂昇騰平臺的應用日誌應用日誌
- 明星直播帶貨的平臺都有哪些功能?
- 談談接入各種第三方推送平臺的技術方案和坑點
- 帶你高效入門 FlutterFlutter
- 帶你ECharts入個門Echarts