2020 神盾盃 reverse 500
===
###### tags: `CTF`
題目給定一個PE檔,執行時出現的字串在IDA string找不到,可能性包含
- 該字串加密存在於檔案中
因此當我執行x32dbg時,執行程式會出現

**sub_402840**
查看這個檔案會發現前面做了很多debug檢查
- isDebugger

- 環境

- 做process list 檢查

**sub_402760**
檢查完會去load一個resource =>**GGsumida**

執行流程如下:

利用resouce hacker去把resource拉出來,並存成bin file,rename成**GGsumida.exe**

用IDA分析一下就可以找到`I can see the shit!`字串
定位在這些字串,可以看到

動態patch掉這些檢查,就可以走到後面的flag運算

但是動態跑出來會是亂碼,原因是key錯誤
動態跑有兩種可能
- 5385891
- -428981405
動態找出要用來做運算的flag

根據ida`LOBYTE(v62) = byte_406018[v61] ^ v95[v61 % 4];`
知道key長度是4,因為flag前四碼是**AEGI**
所以自己用xor算出key,再用這把key來算完整的flag
```python=
s=[0x78,0x72,0x7F,0x79,0x6A,0x4C,0x08,0x58,0x51,0x49,0x46,0x67,0x08,0x1A,0x09,0x5F,0x19,0x4B,0x0D,0x10,0x60,0x78,0x4D,0x42,0x19,0x53,0x78,0x54,0x7D,0x4E,0x07,0x4D]
key_s=['A','E','G','I']
key_int=[None]*4
for i in range(len(key_s)):
key_int[i]=ord(key_s[i])^s[i]
flag=''
for i in range(len(s)):
flag+=chr(s[i]^key_int[i%4])
print(flag)
```
真的很讓人懷疑,有沒有算對的flag:anger:
