0%

使用ChatGPT进行逆向的一次尝试

本文仅作为技术讨论及分享,严禁用于任何非法用途。

前言

最近ChatGPT很火,笔者也进行了尝试,发现惊为天人,可谓颠覆性的产品。下面是通过ChatGPT进行一道简单的CTF逆向题的过程。

正文

题目选取了攻防世界的一道简单逆向,题目名称为”logmein”。

首先拖动文件到ida打开,代码如下:

直接复制这部分代码发送给ChatGPT

它会给你解释这段代码,这时候可以让它给你用python把代码写出来,便于理解

它给出的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def main():
v9 = 0
v8 = ":\"AL_RT^L*.?+6/46"
v7 = "ebmarah"
v6 = 7
print("Welcome to the RC3 secure password guesser.")
print("To continue, you must enter the correct password.")
print("Enter your guess: ", end="")
guess = input()
v3 = len(guess)
if v3 < len(v8):
sub_4007C0(v8)
for i in range(len(guess)):
if i >= len(v8):
sub_4007C0()
if guess[i] != chr(ord(v7[i % v6]) ^ ord(v8[i])):
sub_4007C0()
sub_4007F0()

此时可以帮它优化一下代码:

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
def sub_4007C0():
print('error')
exit()


def sub_4007F0():
print('correct')

def main():
v9 = 0
v8 = ":\"AL_RT^L*.?+6/46"
v7 = "ebmarah"
v7 = v7[::-1]
v6 = 7
print("Welcome to the RC3 secure password guesser.")
print("To continue, you must enter the correct password.")
print("Enter your guess: ", end="")
guess = input()
v3 = len(guess)
if v3 < len(v8):
sub_4007C0(v8)
for i in range(len(guess)):
if i >= len(v8):
sub_4007C0()
if guess[i] != chr(ord(v7[i % v6]) ^ ord(v8[i])):
sub_4007C0()
sub_4007F0()


main()

然后可以运行一下看看,能不能运行,手动测试能运行之后,告诉ChatGPT我给它修正了代码:

接下来尝试引导它解出密码:

尝试一段时间无果,遂让它给我写成解密代码:

继续尝试让它运行代码,告诉我结果,然而并没有成功:

但是,现在已经可以通过它给我写的解密代码,手动运行解出答案了!

完整代码如下:

1
2
3
4
5
6
7
8
9
10
def decrypt(ciphertext: str, key: str, v7: str) -> str:
v7 = v7[::-1]
v6 = 7
plaintext = ""
for i in range(len(ciphertext)):
plaintext += chr(ord(v7[i % v6]) ^ ord(key[i]))
return plaintext


print(decrypt(":\"AL_RT^L*.?+6/46", ":\"AL_RT^L*.?+6/46", "ebmarah"))

小结

从本次尝试中可以看出ChatGPT强大的能力,本次实验选用了一道简单的逆向题目,同时也进行了一些人工干预,但是毫无疑问ChatGPT成功写出了逆向代码,这对于逆向新手来说是一个巨大的帮助,相信随着不断的探索,ChatGPT必然能发挥更大的作用。

最后,本文旨在讨论ChatGPT在逆向中的应用,请勿滥用AI影响比赛平衡。