求助一段代码的逆向
有一段加密算法是下面这样子的for ( l = 1; l <= v5; ++l ) //v5是输入字符串的长度
{
v12 = byte_409910;
if ( (char)(byte_409910 + 13) < 61 )
v13 = v12 ^ 0x34;
else
v13 = v12 ^ 0x37;
byte_409910 = v13;
}
我想问一下应该如何求逆算法 主要是不知道原文是经过if还是else 本帖最后由 无符号整形 于 2018-8-1 14:20 编辑
那么 byte_409910是不是输入字符串? 给你个思路,反向求if,else的话可以这样:
for (int i = s.length(); i >= 0; --i)
{
if (~(s ^ 0x34) + 13 < 61)
ch = ~(s ^ 0x34);
else
ch = ~(s ^ 0x37);
} #include <stdio.h>
#include <string.h>
void Encryption(char *data, int len)
{
for(int i = 0; i < len; ++i)
{
if(data + 13 < 61)
{
data ^= 0x34;
}
else
{
data ^= 0x37;
}
}
}
void Decryption(char *data, int len)
{
for(int i = 0; i < len; ++i)
{
char byte = data ^ 0x34;
if(byte + 13 < 61)
{
data ^= 0x34;
}
else
{
data ^= 0x37;
}
}
}
int main(void)
{
char str[] = "hello world!";
int len = strlen(str) + 1;
Encryption(str, len);
for(int i = 0; i < len; ++i)
{
printf("0x%.2X -> %c\n", str, str);
}
printf("\n");
Decryption(str, len);
for(int i = 0; i < len; ++i)
{
printf("0x%.2X -> %c\n", str, str);
}
printf("\n");
return 0;
}
人造人 发表于 2018-8-1 15:01
大佬 好像这个并不行
不知道为什么上传不了图片 我直接复制吧
flags = raw_input('')
flag = []
def jiami():
for i in flags:
if ord(i) + 13 < 61:
flag.append(ord(i)^0x34)
else:
flag.append(ord(i)^0x64)
def jiemi():
for i in range(len(flag)):
if (i^0x34) + 13 < 61:
flag = flag^0x34
else:
flag = flag^0x64
jiami()
jiemi()
for i in range(len(flag)):
flag = chr(flag)
print flag
这是我的代码
这是我的输入和输出
aaaaaafffffffffffffaa12365
['a', 'a', 'a', 'a', 'a', 'a', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', '6', '6', '6', '1', '1', 'a', 'b', 'c', 'f', 'e']
前面还行就是后面就不对了再经过加密和解密之后
如果是字符串长度较小的话就ok
avddf25df
['a', 'v', 'd', 'd', 'f', '2', '5', 'd', 'f']
要不我把题目给你看看?这是一道ctf的逆向题目
无符号整形 发表于 2018-8-1 14:43
给你个思路,反向求if,else的话可以这样:
取反不行 取反的话 数字会超出ascii的范围 但是如果去掉取反的话也不行 qq1258187869 发表于 2018-9-1 19:12
大佬 好像这个并不行
不知道为什么上传不了图片 我直接复制吧
flags = raw_input('')
def jiemi():
for i in range(len(flag)):
if (i^0x34) + 13 < 61:
flag = flag^0x34
else:
flag = flag^0x64
flag 是什么? python中有这样的语法吗? qq1258187869 发表于 2018-9-1 19:12
大佬 好像这个并不行
不知道为什么上传不了图片 我直接复制吧
flags = raw_input('')
def Encryption(data):
encryption_data = []
for i in data:
if ord(i) + 13 < 61:
encryption_data.append(chr(ord(i) ^ 0x34))
else:
encryption_data.append(chr(ord(i) ^ 0x37))
return encryption_data
def Decryption(data):
decryption_data = []
for i in data:
byte = ord(i) ^ 0x34
if byte + 13 < 61:
decryption_data.append(chr(ord(i) ^ 0x34))
else:
decryption_data.append(chr(ord(i) ^ 0x37))
return decryption_data
data = input('请输入: ')
data = list(data)
encryption_data = Encryption(data)
print(encryption_data)
decryption_data = Decryption(encryption_data)
print(decryption_data)
请输入: aaaaaafffffffffffffaa12365
'V', 'V', 'V', 'V', 'V', 'V', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'V', 'V', '\x06', '\x05', '\x04', '\x01', '\x02']
'a', 'a', 'a', 'a', 'a', 'a', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'a', 'a', '1', '2', '3', '6', '5'] 人造人 发表于 2018-9-1 20:23
好的 谢谢大佬 明明是复制的 不懂我上次的代码和我这里的不一样
页:
[1]