还是一般步骤,发现没有壳,同时也ELF文件,打开IDA进行分析,以下是主函数

在主函数中我们可以看到,首先对V5这个数组,用memset进行了初始化,同时我们还发现还有v4这个变量,通过主函数我们大致可以猜出,当我们输入变量后,会将我们输入的值做一个对比,而我们输入的值肯定要经过func函数以及fun1函数进行加密等一系列运算

func函数图如下

注意qword还有byte进行对比,我们可以发现,a1[128]=1,a1[129]=1,但是我们又发现什么,qword_F80的值qword每四个字节一组,但是在func中的v4是什么他是一个无符号的_int8,要mod256

a1为0-255的数组

再看看我们的qmemcpy函数的参数,通过参数值的化简结果是 qmemcpy(((a1 + 2) & 0xFFFFFFFFFFFFFFF8LL),(a1 + 2) & 0xFFFFFFFFFFFFFFF8LL),(((a1 – ((a1 + 8) & 0xFFFFFFF8) + 256) & 0xFFFFFFF8),同源地址和目的地址,其实这段就没有用了

然后下面就是做运算,注意a1就是传入进来的v4

在看看func1

整个过程还是比较复杂,因为在windows系统,ELF文件被IDA分析的不是特别准确

这里v8的值注意是dword所以其实v8=a1[512/4]=a1[128]=1,还有啊*(a1+520)=0

所以v5等于0

所以这道题难就是代码逻辑要好好的慢慢分析

a1=[]
v4=0
a2=[0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF]
output=[0x12, 0xF8, 0xA3, 0x80, 0x6B, 0x2E, 0x69, 0x0A, 0x74, 0x24, 0xB7, 0x32, 0x53, 0xFC, 0x7A, 0x9D, 0xE8, 0x7B, 0x9B, 0x2E, 0xEF, 0xF3, 0x0B, 0x45, 0x63, 0x01, 0x35, 0xB7, 0x76, 0x8C, 0xCB, 0xD9, 0xC6, 0x8B, 0x8C, 0x2A, 0xA8, 0xAD, 0x67, 0x09, 0x5C, 0x0F, 0x52, 0xD4, 0x9D, 0x27, 0xC3, 0xD0, 0xC5, 0x91, 0xC0, 0xEA, 0xBF, 0x0D, 0xE7, 0x6C, 0x1A, 0x6A, 0x1A, 0x12, 0xB7, 0xB8, 0x18, 0xB9, 0x46, 0xC3, 0x5B, 0x90, 0x45, 0x7B, 0x94, 0xE6, 0x5F, 0x4F, 0xF0, 0x66, 0x78, 0xCC, 0xE9, 0xBE, 0x0B, 0x94, 0x84, 0x0F, 0x33, 0xAE, 0x97, 0x88, 0x45, 0x4E, 0xD2, 0x76, 0x11, 0x8E, 0x99, 0xFC, 0xCA, 0xD5, 0xE6, 0x27, 0x57, 0x74, 0x01, 0x98, 0x0A, 0xCD, 0x7F, 0x0D, 0xA2, 0xC5, 0xAB, 0xA2, 0x05, 0xA2, 0x86, 0xD3, 0x0E, 0x3A, 0x8E, 0xBA, 0xCC, 0x43, 0xA0, 0xBC, 0x30, 0x1C, 0x7B, 0x42, 0x02, 0xDC, 0xA4, 0xAA, 0x06, 0x89, 0x97, 0xAF, 0x81, 0xC0, 0x8A, 0x0B, 0xF7, 0x6C, 0xFE, 0x30, 0x97, 0x17, 0xEA, 0x79, 0x4F, 0x48, 0x5B, 0xD3, 0xCF, 0x91, 0xD6, 0xF6, 0x73, 0xA9, 0x16, 0x46, 0xB7, 0x5E, 0x63, 0x08, 0x3A, 0x1F, 0x0C, 0xB8, 0xE4, 0xBB, 0x52, 0x2E, 0xAE, 0xED, 0x46, 0x51, 0x82, 0x22, 0xE7, 0x70, 0x33, 0x7C, 0xF8, 0x45, 0x45, 0x33, 0xCA, 0x72, 0x66, 0xCF, 0xC9, 0x2E, 0x5C, 0x45, 0xC1, 0xD1, 0x0A, 0x66, 0xD7, 0x51, 0xA1, 0x74, 0xCC, 0x4A, 0x71, 0xDF, 0xDC, 0x76, 0xEA, 0x9A, 0x11, 0x22, 0x1A, 0x6A, 0x5A, 0x75, 0x12, 0x46, 0x38, 0x6C, 0x63, 0x88, 0x75, 0x20, 0xD5, 0x3C, 0xF8, 0xB5, 0x2F, 0x45, 0x6F, 0x34, 0x8F, 0x9D, 0x10, 0xA8, 0xB3, 0x19, 0x4F, 0xCA, 0xEE, 0x0D, 0xD9, 0xE6, 0xA9, 0x76, 0xEE, 0x97, 0x8E, 0x12, 0x91, 0xED, 0x9A, 0x3C, 0x34, 0xA4]
for i in range(257):
    a1.append(i)
for j in range(256):
    v4=(v4+a1[j]+a2[j%8])%256
    v5=a1[j]
    a1[j]=a1[v4]
    a1[v4]=v5
input_date=""
v5=0
for i in range(1,257):
    v5=(v5+a1[i])%256
    v6=a1[i]
    a1[i]=a1[v5]
    a1[v5]=v6
    input_date+=chr(output[i-1]^a1[(a1[i]+a1[v5])%256])
print(input_date)

Categories:

Tags:

No responses yet

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注