新手一枚,如有錯誤(不足)請指正,謝謝!!
題目鏈接:Youngter-drive
參考資料:
1. IDA sp-analysis failed 不能F5的 解決方案之(一)-『軟件逆向』-看雪安全論壇
2. IDA sp-analysis failed 不能F5的 解決方案之(二)-『軟件逆向』-看雪安全論壇
3. ReleaseMutex 百度百科
4. WaitForSingleObject 百度百科
直接拖入IDA32,提示警告……
首先函數就倆,,,在UPX1,僞代碼第一句是pusha,保存所有寄存器
而最上面的條也沒被讀取出來,顯示灰色
exe文件,使用官網下載的upx進行脫殼進行脫殼
UPX-3.95-win64
脫殼之後成功加載
然後跳轉到_main_0查看
F5僞代碼
簡單分析一下
在sub_411190()函數中
發現source存的和off_418004進行了一個比較
進入off_418004查看,可以看到裏面存的啥
題不可能這麼簡單,所以source肯定經過處理了
點擊source,x鍵進入交叉引用
挨個進去查看,發現第二個是對source進行處理的,也就是對main_0函數裏的StartAddress函數進行分析
WaitForSingleObject
WaitForSingleObject是一種Windows API函數,當等待仍在掛起狀態時,句柄被關閉,那麼函數行爲是未定義的。該句柄必須具有 SYNCHRONIZE 訪問權限。
WaitForSingleObject函數用來檢測hHandle事件的信號狀態,在某一線程中調用該函數時,線程暫時掛起,如果在掛起的dwMilliseconds毫秒內,線程所等待的對象變爲有信號狀態,則該函數立即返回;如果超時時間已經到達dwMilliseconds毫秒,但hHandle所指向的對象還沒有變成有信號狀態,函數照樣返回。
ReleaseMutex
ReleaseMutex是一種線性指令,具有釋放線程擁有的互斥體的控制權。
線程也能告訴系統,它不想在某個時間段內被調度。這是通過調用Sleep函數來實現的:
VOID Sleep(DWORD dwMilliseconds);
該函數可使線程暫停自己的運行,直到dwMilliseconds過去爲止。
另一個進程是sub_41119F
而這裏面是沒有操作的。
結合這兩個進程,可以得到
當第一個進程執行到第10行時候,該線程被凍結,轉向執行另一個線程,也就是函數sub_41119F,也就是說,dword_418008=29,執行循環,在第9行自減一,dword_418008=28 然後執行第十行sleep,線程被凍結,另一個函數sub_41119F開始執行,然後執行到sleep再凍結,再執行第一個進程(因爲WaitForSingleObject函數在等着)
大概是這種變化……
可以發現,dword_418008=29,28,26,24,22的時候對字符串進行了處理,也就是說,當dword_418008爲奇數的時候,對字符串進行處理。當下標爲偶數的時候不進行處理。
然後進入線程1的sub_41112C()函數
提示了這個錯誤。。
然後查看參考資料1和2
先在菜單欄的Options→General,然後勾選stack pointer
然後找到出問題的411A04
在View窗口裏查看他的彙編代碼
根據參考資料,我猜想是這裏的跳轉出現了問題
選中跳轉那一行,然後Edit→
然後將其改成jmp跳轉
然後F5試一下……
發現可以進行反編譯了!
好了都分析清楚開始寫代碼
#include <stdio.h>
int main(void)
{
char off1[] = "TOiZiZtOrYaToUwPnToBsOaOapsyS";
char off2[] = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
char flag[30]={0};
int i,j;
for(i=28;i>-1;i--)
{
if(i%2==0)
{
flag[i] = off1[i];
continue;
}
for(j=0;j<52;j++)
{
if(off1[i] == off2[j])
{
flag[i] = j+38;
if(!(flag[i]>=65 &&flag[i]<=90))
flag[i] = j+96;
break;
}
}
}
puts(flag);
return 0;
}
輸出
因爲比較的時候最後一位沒有比較,試了半天最後一位爲E
所以最終的flag爲flag{ThisisthreadofwindowshahaIsESE}
往期回顧
小白學習筆記(0) CG-CTF-re-3 py交易
小白學習筆記(1) BUUCTF-re xor
小白學習筆記(2)BUUCTF-re-新年快樂
小白學習筆記(3) CG-CT re ReadAsm2
小白學習筆記(4)BUUCTF-re-reverse_1
小白學習筆記(5)BUUCTF-re-內涵軟件
小白學習筆記(6)BUUCTF-re-SimpleRev
小白學習筆記(7)BUUCTF-re-rsa
小白學習筆記(8)BUUCTF-re-CrackRTF
小白學習筆記(9)BUUCTF-re-刮開有獎