日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DASCTF安恒三月赛re部分复现

發(fā)布時(shí)間:2024/3/26 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DASCTF安恒三月赛re部分复现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Drinksometea

題目給了exe和一個(gè)tea.png.out(加密完生成的文件),哇這個(gè)第一題做了我一天啊。。。已知是tea就卡在不會(huì)文件讀寫是真的難受住了嗚嗚嗚嗚

邏輯是很清晰的,CreateFile,ReadFile 這些句柄可自行百度,理解是在干什么即可(但要是要像我一樣想仿著這個(gè)寫個(gè)C++腳本逆回去。。。。就各種報(bào)錯(cuò)。。。一言難盡了。。wtcl)
關(guān)鍵就在loc_4010A0的位置,但是不能F5,因?yàn)榧恿嘶ㄖ噶?br /> 哇今天最大的收獲就是k1ee師傅給一步步教的去花(感謝!!

Undefine+C(emmm早有耳聞。。。)我以為這就結(jié)束了。。

師傅說還要把jz jnz 和 db 0E8h 給nop掉,用的 010editor (長見識(shí)了~
jz jnz 機(jī)器碼 74 75,還有下面用到的nop 是90,常識(shí)了

搜索 ,然后 Ctrl + R (五個(gè)都要改成 90 吖。。。

然后就可以看到正常的函數(shù)了,確實(shí)是tea,之前有見過類似的題

傳入了假的flag作密鑰,我本來以為密鑰就是flag四個(gè)字母

動(dòng)調(diào)了一下發(fā)現(xiàn)我還是太天真了(是四個(gè)一組,還要考慮大小端序,如果沒有動(dòng)調(diào),廢物就當(dāng)場gg了

哦對(duì),這道題動(dòng)調(diào)會(huì)秒退的。。是這個(gè)函數(shù)作怪,在這兒下斷

有個(gè)get,out!哈,這。。一步步繞唄,走右邊那條路就繞過了

ps:解密函數(shù)里delta是個(gè)負(fù)數(shù),不太好辦得看看十六進(jìn)制

拿到了這些,tea解密腳本還是好寫的。。。但是!寫入二進(jìn)制文件我是真的真的不會(huì)啊(哭泣。。。。)

fin=open('tea.png.out','rb') tea=fin.read() fin.close()def sub(b1,b2):v5=0xC6EF3720a0=0X67616C66a1=0x6B61667Ba2=0x6C665F65a3=0x7D216761v3=b1v6=b2for i in range(32):v6 -= (a3 + (v3 >> 5)) ^ (v5 + v3) ^ (a2 + 16 * v3)v3 -= (a1 + (v6 >> 5)) ^ (v5 + v6) ^ (a0 + 16 * v6)v5 -= 0x9e3779b9b1=v3b2=v6 flag='' l=len(tea) v8=l>>3 for i in range(v8):sub(tea[i],tea[i+1])i+=2

這里先貼一個(gè)學(xué)長寫的C#腳本叭

#include <stdio.h> #include <stdint.h> #define _CRT_SECURE_NO_WARNINGS//注意注意,本題為算數(shù)移位,不能用uint!!! //加密函數(shù) void encrypt(int* v, int* k) {int v0 = v[0], v1 = v[1], sum = 0, i; /* set up */int delta = 0x9e3779b9; /* a key schedule constant */int k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /* cache key */for (i = 0; i < 32; i++) { /* basic cycle start */sum += delta;v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);} /* end cycle */v[0] = v0; v[1] = v1; } //解密函數(shù) void decrypt(int* v, int* k) {int v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i; /* set up */int delta = 0x9e3779b9; /* a key schedule constant */int k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /* cache key */for (i = 0; i < 32; i++) { /* basic cycle start */v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);sum -= delta;} /* end cycle */v[0] = v0; v[1] = v1; }int main() {int v[2], k[4] = { 1734437990, 1801545339, 1818648421, 2099341153 };FILE* fin = fopen("tea.png.out", "rb");//注意不是"r"!!!FILE* fout = fopen("tea.png", "wb");while (fread(v, sizeof(v), 1, fin)){//printf("%d %d\n",v[0],v[1]);decrypt(v, k);//encrypt(v,k);//printf("%d %d\n",v[0],v[1]);fwrite(v, sizeof(v), 1, fout);}fclose(fin);fclose(fout);return 0; }

解完就是個(gè)圖片。。嗚嗚好丑。。真就卡我一天啊,哭死

Enjoy_it

看了一下別的師傅的wp,覺得。。。這才是簽到題吧(唉。。既然不復(fù)雜就復(fù)現(xiàn)一下了)
ida打開發(fā)現(xiàn)不對(duì)勁,是個(gè).NET程序,上dnSpy

b.b和b.c是對(duì)輸入的校驗(yàn),flag好像是取這個(gè)輸入的bytes進(jìn)行運(yùn)算生成的
關(guān)鍵是它會(huì)輸出flag!!那豈不是很友好。。(但要想辦法跳過那個(gè)Sleep

所以先看看輸入的text2是什么,base64既視感(表換了。。。

解出輸入,驗(yàn)證正確~

import base64 import stringstr='yQXHyBvN3g/81gv51QXG1QTBxRr/yvXK1hC='flag='' string1="abcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZ=" string2="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="flag=str.translate(str.maketrans(string1,string2)) flag=base64.b64decode(flag)print(flag) #combustible_oolong_tea_plz


到了關(guān)鍵了,怎么跳過Sleep,這要是ida就好了。。不會(huì)用dnSpy啊。。我是廢物。。。然后,去問了那個(gè)寫wp的師傅~~

師傅說動(dòng)調(diào)的時(shí)候用右鍵設(shè)置下一條語句,誒還有這么神奇的功能嘛

好耶!!! 學(xué)到了學(xué)到了,復(fù)現(xiàn)完成啦

總結(jié)

以上是生活随笔為你收集整理的DASCTF安恒三月赛re部分复现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。