吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|pipinga.com

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 6919|回復: 94

[CTF] xctf戰疫大賽re-天津垓解法

  [復制鏈接]
樓主
Dyingchen 發表于 2020-3-10 23:10 回帖獎勵
本帖最后由 Dyingchen 于 2020-3-11 12:04 編輯

xctf戰疫大賽re-天津垓解法
這次比賽在攻防世界平臺上面舉辦,有興趣的可以自己去看看,真的是神仙打架,而我這種萌新只能瑟瑟發抖,閑話不多說進入正題



下載題目文件習慣性查一下程序信息:


得到程序是一個無殼64位的控制臺程序,還附帶了一個dll

那么直接先用IDA載入分析,同時打開x64dbg分析程序,然后接下來程序一閃就消失了我立馬反應過來程序有反調試,應該是檢測到了IDA所以閃退了,因為我電腦上面的x64dbg是有sharpod插件的所以不應該是x64dbg的問題。


所以我關掉IDA直接用x64dbg分析,來到程序載入跑起來的界面


顯然這里需要一個授權的字符串,直接到x64dbg里面搜索字符串定位到獲取輸入的點


在搜索字符串的時候能夠看到一堆檢測的代碼,把退出跳轉全部給nop掉,這樣就不會妨礙分析了



發現下面有兩個函數,都給下上斷點,隨便輸入一個字符串進行測試一下發現斷不下來于是跟進到4011f6函數里面分析



發現了獲取輸入的call,下斷,成功斷下但是發現字符串長度不夠(0x12)程序馬上就要退出了,于是修改匯編使其跑到真假碼對比的地方


緊接著發現程序在進行循環對比,結合上面有大量的賦值mov語句可以判定應該是在進行某種加密,于是重新打開IDA分析得到如下邏輯



根據要求需要滿足v43 = ~(j & b[i%14]) & (j | b[i%14]),并且v43和數組v1的值相等

這里看起來一頭霧水,因為之前去掉了反調試所以現在直接用IDA對程序進行動態調試(注意用自帶調試器調試時路徑里面不能有中文否則IDA報錯)
在內存中可以看到v39的字符串被替換成了一個字符串而不是之前的數據
現在可以直接把IDA反編譯出來的邏輯復制過來使用,寫一個腳本進行爆破
其中:v39為上圖的字符串str是我們輸入進去的字符串,v43是對比的數據

[C++] 純文本查看 復制代碼
#include <iostream>
using namespace std;
int main() 
{
	long long int a[18]={17,8,6,10,15,20,42,59,47,3,47,4,16,72,62,0,7,16};
	long long int b[14]={0x52,0x69,0x73,0x69,0x6E,0x67,0x5F,0x48,0x6F,0x70,0x70,0x65,0x72,0x21};
	long long int find=0;
	
	int i=0;
	int j=0;
while(i!=18)
{
    j=0;
	while(j!=255)
	{
		find = ~(j & b[i%14]) & (j | b[i%14]);
		if(find==a[i])
		{
			
			cout<<(char)j;
			break;
		}
		
		
		j++;
	}
	i++;
}
	
	
return 0; 
}


得到授權字符串為Caucasus@s_ability

于是輸入字符串進入下一步


然后程序要求你找到flag,但是從這里開始程序就沒法搜索到任何可以定位的字符串了于是我找到程序的退出點進行堆棧回溯



然后定位到關鍵點


找到這個函數頭的地址:10040164d 然后去IDA分析




然后發現IDA反編譯出來的代碼是這樣的



初看我還以為代碼被v了然后我在IDA里面找到了一個解碼的函數



然后我突然發現之前定位關鍵點的時候在x64dbg里面程序是正常的說明程序在跑到校檢的地方的時候這些字節碼會被還原成原來的代碼所以進行動態調試

輸入之前得到的授權字符串:Caucasus@s_ability

然后按g跳轉到10040164d


此時的代碼應該被還原了所以按c轉換成匯編代碼,右鍵新建函數

然后按F5反編譯成偽代碼

得到如下結果



終于得到邏輯了,然后根據邏輯我們發現這是一段運算大概邏輯是

校對碼的每一位 =   19683*輸進去的字符串每一位%(-2147483637)

中間有些數據IDA有時候會反編譯成&unk_D83E7這種類型的地址,

此時需要等到程序運行過賦值之后鼠標移動上去就可以發現是一個64位的數據

解決了一堆問題之后

現在我們終于可以寫腳本了

[C++] 純文本查看 復制代碼
#include <iostream>
using namespace std;
int main() 
{
        long long int a[52]={2007666,2125764,1909251,2027349,2421009,1653372,2047032,2184813,2302911,2263545,1909251,2165130,1968300,2243862,2066715,2322594,1987983,2243862,1869885,2066715,2263545,1869885,964467,944784,944784,944784,728271,1869885,2263545,2283228,2243862,2184813,2165130,2027349,1987983,2243862,1869885,2283228,2047032,1909251,2165130,1869885,2401326,1987983,2243862,2184813,0xD83E7,2184813,2165130,1987983,2460375};//這些我們輸入進去字符串之后經過變換之后需要對比的數據
        long long int find=0;
        int is_find=0;
        int i=0;
        
while(i!=52)
{

        while(is_find==0)
        {
                if((19683*find)%(-2147483637)==a[i])
                {
                        cout<<(char)find;
                        i++;
                        find=0;
                        is_find=0;
                        break;
                }
                find++;
                
        }
        
}
        
        
return 0; 
}


最后得到flag

flag{Thousandriver_is_1000%_stronger_than_zero-one}


最后再附上原題


天津垓.7z

856.57 KB, 下載次數: 28, 下載積分: 吾愛幣 -1 CB

原題

免費評分

參與人數 51吾愛幣 +48 熱心值 +43 收起 理由
DearDavies + 1 + 1 過程很清楚 思路也清晰 棒!
kilkilo502 + 1 + 1 IDA分析很厲害啊!這程序估計可以爆破。作者的逆向算法玩的鎮流!表示拜膜.
Jerry_bean + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
魅夜 + 1 + 1 用心討論,共獲提升!
肆零柒柒 + 1 謝謝@Thanks!
往復不息 + 1 + 1 我很贊同!
回蕩 + 1 + 1 熱心回復!
此用戶無法顯示 + 1 + 1 我很贊同!
QJ520 + 1 + 1 熱心回復!
Denny + 1 我很贊同!
dabenlong + 1 + 1 用心討論,共獲提升!
忘今今 + 1 + 1 熱心回復!
尋Nina的紅狼 + 1 + 1 用心討論,共獲提升!
shuiyu + 1 + 1 熱心回復!
夢天DreamSky + 1 + 1 謝謝@Thanks!
wjsjwr + 1 熱心回復!
干燒魚蛋炒飯 + 1 + 1 我很贊同!
月六點年一倍 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
soulwaiting + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
weigaojing + 1 + 1 謝謝@Thanks!
HG/飛飛 + 1 + 1 用心討論,共獲提升!
不諳世事的騷年 + 1 + 1 我很贊同!
Cizel + 1 + 1 我很贊同!
wjp187 + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
不怕黑的夜晚 + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
gaosld + 1 + 1 用心討論,共獲提升!
MFC + 1 + 1 謝謝@Thanks!
薛花樊凱 + 1 + 1 用心討論,共獲提升!
waterxx + 1 + 1 我很贊同!
輕冬云 + 1 + 1 用心討論,共獲提升!
yixi + 1 + 1 謝謝@Thanks!
Wwwhunter + 1 + 1 用心討論,共獲提升!
Rclear + 1 + 1 膜拜,大一萌新只能看著這波操作行云流水666
unexus + 1 + 1 謝謝@Thanks!
當我入夢 + 1 + 1 用心討論,共獲提升!
wisoft + 1 謝謝@Thanks!
town_l + 1 熱心回復!
CHINAWSF + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
笙若 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
SinnerDusk + 1 + 1 用心討論,共獲提升!
kswzy + 1 + 1 熱心回復!
thinkpad_420 + 1 + 1 這種神操作,對于剛入門的我,真是望塵莫及呀
WYCKSY + 1 我很贊同!
wataxi + 1 用心討論,共獲提升!
zooah212 + 1 + 1 很厲害!!!
Id!0tNe + 1 熱心回復!
XhyEax + 1 + 1 熱心回復!
smile5 + 1 熱心回復!
朱朱你墮落了 + 1 + 1 用心討論,共獲提升!
來自天堂的問候 + 1 + 1 謝謝@Thanks!
jamescookers988 + 1 + 1 謝謝@Thanks!

查看全部評分

發帖前要善用論壇搜索广西快三功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
15553506162 發表于 2020-3-17 14:56
樓主想問一下  第一個算授權碼的時候  那個j!=255咋來的啊
我看網上最后一步算出flag的腳本里面也有255
Number=[2007666,2125764,1909251,2027349,2421009,1653372,2047032,2184813,2302911,2263545,1909251,2165130,1968300,2243862,2066715,2322594,1987983,2243862,1869885,2066715,2263545,1869885,964467,944784,944784,944784,728271,1869885,2263545,2283228,2243862,2184813,2165130,2027349,1987983,2243862,1869885,2283228,2047032,1909251,2165130,1869885,2401326,1987983,2243862,2184813,0xD83E7,2184813,2165130,1987983,2460375]
for i in range(0x33):
        for n in range(255):
            if Number[i] == 19683 * n % 0x8000000B:
                Result.append(chr(n))
                break
print Result
一直搞不明白這個255是從哪里分析來的
推薦
 樓主| Dyingchen 發表于 2020-3-12 20:00 <
JANlittle 發表于 2020-3-12 18:32
當時做這題的時候沒插件,然后這程序坑爹的地方在于有兩個反調試的函數,我就用IDA跳了一個,但另一個當時 ...

動態調試打ctf是比較難練,我以前搞過破解才有現在的水平,只能說多刷題 見得多了自然水到渠成,比如這次比賽里面的那道cycle graph就比較考你匯編,那段循環對比IDA反編譯出來的東西我就看不太懂不過通過匯編分析發現只需要盯著eax和esi就能得到flag了
沙發
我愛你H大 發表于 2020-3-10 23:38
3#
mojie666 發表于 2020-3-11 00:23
感謝分享,思路非常清晰~
4#
dagang 發表于 2020-3-11 00:49
很給力,吾愛論壇有你更精彩
5#
netspirit 發表于 2020-3-11 06:45
厲害啊。。。。。
6#
來自天堂的問候 發表于 2020-3-11 07:53
感謝分享,這種比賽不錯呀,挺好玩的
7#
RZJ-YQJY 發表于 2020-3-11 08:39
這種比賽不錯呀,挺好玩的
8#
辰星PsychoPrior 發表于 2020-3-11 08:41
謝謝樓主了,感覺復現一下。
9#
冰神蓋聶 發表于 2020-3-11 09:07
厲害。。。。。。。。。。。。
10#
longggggg_2000 發表于 2020-3-11 09:18
厲害啊。。。。。學習了
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:本版塊禁止灌水或回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( )

GMT+8, 2020-4-3 12:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表