诺莫8
开始:
使用PEID:不是PE文件
使用IDA64打开:
关键点在sub_40094C(&s)
查看sub_40094C(&s)
分析出大概的流程,如图
打开两个v8,v9赋值的函数
但看*(_DWORD)(4*xxxx)可以看出为整型,修改类型为int
数据区域:
dword_602120:(v8形参)
7A CF 8C 95 8E A8
5F C9 7A 91 88 A7
70 C0 7F 89 86 93
5F CF 6E 86 85 AD
88 D4 A0 A2 98 B3
79 C1 7E 7E 77 93
dword_6021C0:(v7)
10 08 08 0E 06 0B
05 17 05 0A 0C 17
0E 17 13 07 08 0A
04 0D 16 11 0B 16
06 0E 02 0B 12 09
05 08 08 0A 10 0D
dword_602080:(a2)
8 1 7 1 1 0
4 8 1 2 3 9
3 8 6 6 4 8
3 5 7 8 8 7
0 9 0 2 3 4
2 3 2 5 4 0
注:a2是十进制
算法分析
大概思路:从此处看出将一个两位16进制(ascii码以内)数拆分,然后分别经过两个函数运算对比;
1.低位:
将对应v8 = 对应v7(函数形参)= 对应a1数据 + 对应a2数据
简单的逆向脚本:
低位搞定
2.高位
这里看出是,v8[0][0] = a1[0][0]*a2[1][0] + a1[0][1]*a2[1][0] + a1[0][2]*a2[2][0] +a1[0][3]*a2[3][0] + a1[0][4]*a2[4][0] + a1[0][5]*a2[5][0] + a1[0][6]*a2[6][0]
就是行乘列,类似于矩阵相乘。
求出v8矩阵 x a2逆矩阵
= 6 ,6 ,6 ,6 ,6 ,7 ,
3 ,5 ,7 ,6 ,6 ,6 ,
6 ,5 ,4 ,6 ,7 ,7 ,
3 ,7 ,5 ,6 ,7 ,5 ,
7 ,6 ,7 ,7 ,5 ,7 ,
7 ,6 ,6 ,3 ,6 ,7
知道高位地位写出全部脚本:
import random
v8 = [0x7A,0xCF,0x8C,0x95,0x8E,0xA8,0x5F,0xC9,0x7A,0x91,0x88,0xA7,0x70,0xC0,0x7F,0x89,0x86,0x93,0x5F,0xCF,0x6E,0x86,0x85,0xAD,0x88,0xD4,0xA0,0xA2,0x98,0xB3,0x79,0xC1,0x7E,0x7E,0x77,0x93]
v9 = [0x10,0x08,0x08,0x0E,0x06,0x0B,0x05,0x17,0x05,0x0A,0x0C,0x17,0x0E,0x17,0x13,0x07,0x08,0x0A,0x04,0x0D,0x16,0x11,0x0B,0x16,0x06,0x0E,0x02,0x0B,0x12,0x09,0x05,0x08,0x08,0x0A,0x10,0x0D]
a2 = [0x08,0x01,0x07,0x01,0x01,0x00,0x04,0x08,0x01,0x02,0x03,0x09,0x03,0x08,0x06,0x06,0x04,0x08,0x03,0x05,0x07,0x08,0x08,0x07,0x00,0x09,0x00,0x02,0x03,0x04,0x02,0x03,0x02,0x05,0x04,0x00]
a1 = 36 * [0] #初始化列表
are = 36 * [0]
flag = ""
sum1 = []
for i in range(6):
for j in range(6):
sum1.append(v9[i*6+j] - a2[i*6+j])
print(sum1)
res = [6 ,6 ,6 ,6 ,6 ,7 ,
3 ,5 ,7 ,6 ,6 ,6 ,
6 ,5 ,4 ,6 ,7 ,7 ,
3 ,7 ,5 ,6 ,7 ,5 ,
7 ,6 ,7 ,7 ,5 ,7 ,
7 ,6 ,6 ,3 ,6 ,7]
for i in range(36):
flag += chr(res[i]*16 + sum1[i])
print(flag)
另外不用使用在线工具:
python1 numpy
from numpy import *
x = mat([[8,1,7,1,1,0],
[4,8,1,2,3,9],
[3,8,6,6,4,8],
[3,5,7,8,8,7],
[0,9,0,2,3,4],
[2,3,2,5,4,0]])
y = x.I
x2 = mat([[0x7A,0xCF,0x8C,0x95,0x8E,0xA8],
[0x5F,0xC9,0x7A,0x91,0x88,0xA7],
[0x70,0xC0,0x7F,0x89,0x86,0x93],
[0x5F,0xCF,0x6E,0x86,0x85,0xAD],
[0x88,0xD4,0xA0,0xA2,0x98,0xB3],
[0x79,0xC1,0x7E,0x7E,0x77,0x93]
])
print(x2 * y)
矩阵运算相关网站:
https://zh.numberempire.com/matrixcalculator.php
http://www.ab126.com/shuxue/1679.html
https://m.matrix.reshish.com/zh/inverCalculation.php