December 29, 2021

SCTF2019-Who is he

0x00 日常查壳?image-20211229225910145

0x01 分析主函数

image-20211229230046533

image-20211229230101581

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import base64

from Crypto.Cipher import DES



key = b'1\x002\x003\x004\x00' #注意C#中是unicode码 而且DES加密肯定要8个字节于是这样子刚好

lun = DES.new(key, mode = DES.MODE_CBC, iv = key)

c1 = base64.b64decode("1Tsy0ZGotyMinSpxqYzVBWnfMdUcqCMLu0MA+22Jnp+MNwLHvYuFToxRQr0c+ONZc6Q7L0EAmzbycqobZHh4H23U4WDTNmmXwusW4E+SZjygsntGkO2sGA==")

# 这里本一直想着用C怎么保存这些再怎么解密 但其实py可以很好解决这些问题

p1 = lun.decrypt(c1)

print(p1.decode('UTF-16')) #用utf-16解

image-20211229230142534

结束了?还没有 提交并不对

很明显我感觉是中间肯定改变了什么 但unity逆向我有些摸不着头脑

动调也不知道怎么调 于是看了wp发现两种解法

0x02 GetFlag

方法一:CE查询解

CE下载:https://cheatengine.org/

意思大概是跑的时候搜寻Emmm字符串找到真正的字符串

  1. 运行who is he.exe

  2. 打开进程列表

  3. 选中who is he!!!(截图的时候选错了)

image-20211229230221244

image-20211229230232053

发现两个base字符串后面可想而知就是密钥了

image-20211229230257411

image-20211229230303413

第二个才是flag一样的脚本一跑即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import base64

from Crypto.Cipher import DES



key = b'1\x002\x003\x004\x00' #注意C#中是unicode码 而且DES加密肯定要8个字节于是这样子刚好

lun = DES.new(key, mode = DES.MODE_CBC, iv = key)



c1 = base64.b64decode("1Tsy0ZGotyMinSpxqYzVBWnfMdUcqCMLu0MA+22Jnp+MNwLHvYuFToxRQr0c+ONZc6Q7L0EAmzbycqobZHh4H23U4WDTNmmXwusW4E+SZjygsntGkO2sGA==")

\#这里本一直想着用C怎么保存这些 但其实py可以很好解决这些问题

p1 = lun.decrypt(c1)

print(p1.decode('UTF-16')) #用utf-16解



\# c2 = [0x78, 0x00, 0x5A, 0x00, 0x57, 0x00, 0x44, 0x00, 0x5A, 0x00, 0x61, 0x00, 0x4B, 0x00, 0x45, 0x00, 0x68, 0x00, 0x57, 0x00, 0x4E, 0x00, 0x4D, 0x00, 0x43, 0x00, 0x62, 0x00, 0x69, 0x00, 0x47, 0x00, 0x59, 0x00, 0x50, 0x00, 0x42, 0x00, 0x49, 0x00, 0x6C, 0x00, 0x59, 0x00, 0x33, 0x00, 0x2B, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x7A, 0x00, 0x4F, 0x00, 0x39, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x77, 0x00, 0x72, 0x00, 0x59, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x56, 0x00, 0x4C, 0x00, 0x34, 0x00, 0x6E, 0x00, 0x6A, 0x00, 0x53, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x32, 0x00, 0x52, 0x00, 0x59, 0x00, 0x4D, 0x00, 0x32, 0x00, 0x57, 0x00, 0x77, 0x00, 0x73, 0x00, 0x47, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x6E, 0x00, 0x6A, 0x00, 0x43, 0x00, 0x44, 0x00, 0x6E, 0x00, 0x48, 0x00, 0x73, 0x00, 0x37, 0x00, 0x4E, 0x00, 0x34, 0x00, 0x33, 0x00, 0x61, 0x00, 0x46, 0x00, 0x76, 0x00, 0x4E, 0x00, 0x45, 0x00, 0x35, 0x00, 0x34, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x53, 0x00, 0x61, 0x00, 0x64, 0x00, 0x50, 0x00, 0x39, 0x00, 0x46, 0x00, 0x38, 0x00, 0x65, 0x00, 0x45, 0x00, 0x70, 0x00, 0x76, 0x00, 0x54, 0x00, 0x73, 0x00, 0x35, 0x00, 0x51, 0x00, 0x50, 0x00, 0x47, 0x00, 0x2B, 0x00, 0x4B, 0x00, 0x4C, 0x00, 0x30, 0x00, 0x54, 0x00, 0x44, 0x00, 0x45, 0x00, 0x2F, 0x00, 0x34, 0x00, 0x30, 0x00, 0x6E, 0x00, 0x62, 0x00, 0x55, 0x00, 0x3D]

\# for i in range(0, len(c2), 2): #不太知道用CE怎么直接提取 于是用老实的方法

\# print(chr(c2[i]), end = "")



key = b't\x00e\x00s\x00t\x00'

lun = DES.new(key, mode = DES.MODE_CBC, iv = key)



c2 = base64.b64decode("xZWDZaKEhWNMCbiGYPBIlY3+arozO9zonwrYLiVL4njSez2RYM2WwsGnsnjCDnHs7N43aFvNE54noSadP9F8eEpvTs5QPG+KL0TDE/40nbU=")

p2 = lun.decrypt(c2)

print(p2.decode('UTF-16'))

image-20211229230330861

方法二:动调回溯

动调最先的想法就是定位关键位置,但unity该怎么断呢,一开始我就想到能不能再那加密位置设个断点,然后直接没加密的flag,但断不住,于是查阅资料知道丢进x64动调回溯法。

那我们该如何定位到底关键位置,由于输入之后就会跳一大段,由动调回溯还是能找到判断位置。

1. 首先是直接把程序丢进x64

image-20211229230404198

https://blog.csdn.net/pijianzhirui/article/details/107373846

参考这篇文章

image-20211229230419108

于是在刚丢进去的时候设置一下,再F9跑即可

2. 找到判断函数

image-20211229230425052

现在可能有点不知道干什么 但弹出这些东西 栈窗口是有迹可循的

image-20211229230438325

image-20211229230442988

image-20211229230451666

image-20211229230650050.png

image-20211229230848071

image-20211229231348987

于是就找到了我们的关键判断位置

image-20211229231410316

0x03 分析判断函数

文献参考:

https://blog.csdn.net/m0_46296905/article/details/115960117

https://blog.csdn.net/a5555678744/article/details/118371570?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&utm_relevant_index=2

https://www.notion.so/SCTF2019-Who-is-he-unity-ea5310edb004464fae2d61bce92d6bb3

http://www.manongjc.com/detail/23-glwhbnsjrclkuoq.html#%E5%8D%95%E7%BA%AF%E7%9A%84des%E5%8A%A0%E5%AF%86%EF%BC%9F

DASCTF X SU
🍬
HFCTF2022
🍪

About this Post

This post is written by P.Z, licensed under CC BY-NC 4.0.