三道不同平臺的Reverse題目帶你入逆向坑

weixin_34290000發表於2018-09-04

本文為原創文章,轉載請註明出處!


第一道(APK)

Re100

下載下來發現沒有字尾,IDA載入  發現是apk檔案

48820-4e06b1b471b1b76d
48820-6d9223deaa53d63a

直接載入jeb分析 找到關鍵程式碼  右鍵反編譯這個類(或者可以按快捷鍵Tab)

48820-5cbfd5275fa8723a

先判斷我們輸入的字串(記作input)長度是否小於5  若成立  則輸出“tryagain!”

不成立的話將input進行逆序 然後md5加密接著進行base64編碼最後與

“NzU2ZDJmYzg0ZDA3YTM1NmM4ZjY4ZjcxZmU3NmUxODk=“

進行比較 若相同 則輸入正確

48820-ef68d36cda947770
48820-9032c3d4179415c2
48820-b9acd01418b72924

得到}321nimda{galflj,逆序一次得到jlflag{admin123}

第二道(PE檔案)

ransomware

0x01:

PEiD查殼無殼執行之後也沒中毒 無毒

48820-4c97aa422280ccf3

0x02:

執行一下看看 可用的只有一個輸入框和一個按鈕(Decrypt),這裡可以通過Restorator進行分析

48820-c494aaa643902619

隨意輸入123456789  點選Decrypt   彈出對話方塊,看到關鍵點  

一個是觸發的MessageBox  (通過下API斷點)

一個是關鍵字串 Wrong,The password is error

兩種方法都可以定位到關鍵程式碼 (通過搜尋ASCII字串),下邊採用API斷點進行定位

48820-4724efef9999ee0a

0x03

先載入Olydbg分析一波,右鍵任意空白處或者直接(Ctrl+ N)

48820-fe1866c9c9f72acd
48820-6888f41fd0b52688

或者在命令欄中輸入bpGetDlgItemTextA,bp MessageBoxA

下好斷點之後,直接F9執行,隨意輸入12456789,程式會中斷到這裡

48820-584b8409e4baa40c

選中堆疊視窗buffer這一行  右鍵資料視窗中跟隨

48820-b81d9ad9a799e645

接著除錯執行到返回(快捷鍵Ctrl+ F9)

48820-d00c6449b4d72645

這時可以看到資料視窗出現了我們的input123456789

48820-5040cd452710abb5

接著F7 然後F8單步向下分析即可

48820-d1648ee614daaa69

具體分析結果:

1.程式先判斷我們的輸入是否等於18

2.關鍵程式碼就是地址00AE12A3 這個call

48820-37119f0c2e216eca
48820-b008fda8e75ba87d
48820-2df249f9ac7baf93

OD分析不方便敘述,還是用IDA吧

0x04

可以直接shift+F12找關鍵字串,也可以像下邊這樣

48820-0583232faa762f30

雙擊DialogBoxFunc

48820-07096cc3d5831ccd

接著F5進行分析

48820-a502e4d373ec0a68
48820-442375cda5255738

所以我們只需byte_404000[]提取出來 與0xCC進行異或就可以得到flag

有一個簡單的辦法 就是選中所有資料   shift + E  即可

48820-02f7b637dd9a3f6a

提取出的直接是C程式碼

48820-d1a6d5d90da1cb2c
48820-75391c011b6b5436

最後得到flag{1_dO_n0t_wAnna_cry}

第三道(ELF檔案)

cracking_game載入IDA,Shift + f12 雙擊Bingo!....

48820-fbaea7b053b0395f

雙擊通過Xref查詢引用Bingo處(sub_4E0)

48820-81d790c3a47fbb65

接著按下空格切換成文字模式

48820-d5f0e756819ef204
48820-bf890a80f3f85596

程式碼向上翻 分析可知sub_4E0就是關鍵但是發現不可以使用F5

48820-94c2eee233c6f9cf

OptionàGeneralà,勾選上Stackpointer,然後就可以看到多了一列綠色的

48820-0ac3ecefd655ce06
48820-fb50346b08b28a9e
48820-0248eadb9fabeca1

然後alt+k可以修改

48820-e2aae8e8ea92e875

原來數值是0x2C改為0x0就可以

48820-8e0d9f4b4fd82f54
48820-c62bcb0ddbd49bfd

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




文章僅用於普及網路安全知識,提高小夥伴的安全意識的同時介紹常見漏洞的特徵等,若讀者因此做出危害網路安全的行為後果自負,與合天智匯以及原作者無關,特此宣告。

相關文章