normal 18

因为没有users的密钥,谷歌了一下,是BUUCTF的crackMe

题目描述:小张从网上下载到一个黑客软件,然而开发者并不打算共享,所以小张注册了一个用户名叫welcomebeijing,但是密码需要进行逆向计算,请求出密码,进行MD5的32位小写哈希,进行提交。 注意:得到的 flag 请包上 flag{} 提交

整体逻辑

一些函数已经被我重新命名了

进入init看看

类似rc4的s状态向量初始化

success_or_not里面存放的是成功或者失败的状态

而encode里面装的就是rc4的加密了吧

encode内部(上半)

这个是hexstring,转byte,因为要求输入是md5,32位捏

encode下半

encode1是什么捏

进来看看

似乎是个程序启动自检的反调试第一 部分是直接返回值

第二部分是进行异或,不过似乎不影响

compare内部

这个rc4可以不用解,越过反调试直接获取每次sbox异或的值就行

但是直接动调得出的结果不正确

因为有反调试

nop掉跳转就行

然后提取出数据

0x2A, 0xD7, 0x92, 0xE9, 0x53, 0xE2, 0xC4, 0xCD

1
2
3
4
5
6
7
s='dbappsec'
data=[0x2A, 0xD7, 0x92, 0xE9, 0x53, 0xE2, 0xC4, 0xCD]
password=""
for i in range(8):
data[i]^=ord(s[i])
password+='%x'%data[i]
print(password)

4eb5f3992391a1ae