简单逆向8

35 篇文章 5 订阅

诺莫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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I Am Rex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值