DASCTF安恒三月赛re部分复现
Drinksometea
題目給了exe和一個tea.png.out(加密完生成的文件),哇這個第一題做了我一天啊。。。已知是tea就卡在不會文件讀寫是真的難受住了嗚嗚嗚嗚
邏輯是很清晰的,CreateFile,ReadFile 這些句柄可自行百度,理解是在干什么即可(但要是要像我一樣想仿著這個寫個C++腳本逆回去。。。。就各種報錯。。。一言難盡了。。wtcl)
關鍵就在loc_4010A0的位置,但是不能F5,因為加了花指令
哇今天最大的收獲就是k1ee師傅給一步步教的去花(感謝!!
Undefine+C(emmm早有耳聞。。。)我以為這就結束了。。
師傅說還要把jz jnz 和 db 0E8h 給nop掉,用的 010editor (長見識了~
jz jnz 機器碼 74 75,還有下面用到的nop 是90,常識了
搜索 ,然后 Ctrl + R (五個都要改成 90 吖。。。
然后就可以看到正常的函數了,確實是tea,之前有見過類似的題
傳入了假的flag作密鑰,我本來以為密鑰就是flag四個字母
動調了一下發現我還是太天真了(是四個一組,還要考慮大小端序,如果沒有動調,廢物就當場gg了
哦對,這道題動調會秒退的。。是這個函數作怪,在這兒下斷
有個get,out!哈,這。。一步步繞唄,走右邊那條路就繞過了
ps:解密函數里delta是個負數,不太好辦得看看十六進制
拿到了這些,tea解密腳本還是好寫的。。。但是!寫入二進制文件我是真的真的不會啊(哭泣。。。。)
這里先貼一個學長寫的C#腳本叭
#include <stdio.h> #include <stdint.h> #define _CRT_SECURE_NO_WARNINGS//注意注意,本題為算數移位,不能用uint!!! //加密函數 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; } //解密函數 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; }解完就是個圖片。。嗚嗚好丑。。真就卡我一天啊,哭死
Enjoy_it
看了一下別的師傅的wp,覺得。。。這才是簽到題吧(唉。。既然不復雜就復現一下了)
ida打開發現不對勁,是個.NET程序,上dnSpy
b.b和b.c是對輸入的校驗,flag好像是取這個輸入的bytes進行運算生成的
關鍵是它會輸出flag!!那豈不是很友好。。(但要想辦法跳過那個Sleep
所以先看看輸入的text2是什么,base64既視感(表換了。。。
解出輸入,驗證正確~
到了關鍵了,怎么跳過Sleep,這要是ida就好了。。不會用dnSpy啊。。我是廢物。。。然后,去問了那個寫wp的師傅~~
師傅說動調的時候用右鍵設置下一條語句,誒還有這么神奇的功能嘛
好耶!!! 學到了學到了,復現完成啦
總結
以上是生活随笔為你收集整理的DASCTF安恒三月赛re部分复现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南邮Android Studio应用高德
- 下一篇: 互相关函数的实际应用