一般在做病毒题的时候就需要用到解运算
在比赛中常见的运算一般有:add、xor、反转位(也就是xor FF)、反转字节顺序、左移一位、右移一位、左旋圆(向左旋转)、rot13
那么在比赛时一般就是:
一次运算:
add加减一个数、xor一个数、左右移、左旋之类的;碰到这种运算时就直接可以肉眼看出来,具体方法或者技巧在下面。
二次运算:
二次运算就是组合运算,最常见就是add_xor这种,也就是先add一个数,然后再xor一个数或者是先xor一个数再add一个数,这种运算是相对于简单的,可以直接通过脚本解出来;也可以是用其他的运算方法组合在一起,这种就比较难了,比如说左移一位之后再xor,那么脚本就跑不出来了,只有先解了左右移和左旋之类的再跑脚本。
三次运算:
三次运算在省赛内的话是最难的,其实懂方法多实验也不难,常见的就是先要解其他运算后再来用脚本解add_xor,因为只要是左右移和左旋之后脚本就不再有用了,只有通过一些特征解开其他运算后再来解add_xor。
现在知道了常见的运算后就要去研究怎么去解,首先要先知道下面的一些基础知识才能解题,不然连怎么判断你都不知道,那就玩三小时扫雷吧哈哈...
各种运算对数据造成的变化
先来一张正常的NTFS的元文件
1、add
add相对简单,就是加减运算,也就是数据加上一个数或减一个
(add+5)
(add-5)
2、xor(异或)
xor也叫异或,是数据的逻辑运算,和add有点相似,当xor一个数(用X表示)后,是00的地方就会变成X,反之,数据中的X就会变成00,然后有数据的地方也会改变。
(xor5)
3、左移一位和右移一位
左移和右移也是数据的逻辑运算,然后左移一位我们可以看作是约等于乘法运算,右移在某种情况可以看作是除法运算,不过也是需要经验才可以看的出来。
4、左旋
左旋比较特殊,不对 00 和 FF 运算,但和上面的运算有点不也一样的就是他会打乱数据,原本相同的会被直接打乱,就像图里这样,然后也可以自己去搞一遍体会一下。
(前面是FF,然后是00,然后是7D)
(左旋一次之后)
5、ROT13
ROT13是一种单次运算,然后她只会对右边ANSI码中的字母生效,不会对数字和符号生效,然后它是一种单次运算,也就是说要么rot13了,要么没有。
windows分区(NTFS\FAT32\exFAT)一般会运算的地方及对应点(也就是固定的地方和用来比对的地方)
一、NTFS:ntfs一般容易被运算的就是元文件区和文件记录,上图中的红色部分就是ntfs元文件区的固定点,46 49 4C 45是固定的,如果是xor_add这种就可以用这段来作为参考值,后面的30 00 03 00是辅助作用,真正的作用是判断有没有左右移。
二、FAT32根目录:FAT32的根目录的比对点为带颜色部分,红色部分是 20 20 20 20,也就是4个相同的值,可以通过这个来判断有没有被左旋,带颜色部分是FAT32根目录固定的值,结尾是20 08.
二、FAT32文件夹目录:fat32的 文件夹目录的比对点为红色及绿色部分,绿色部分和根目录有点相似,只是结尾变成了 20 10.
三、exFAT文件目录:exfat的文件目录如上图,绿色的部分即 85 C0 C1是固定的值,可以用来解add_xor,我们知道exfat的c0块放的是文件大小及文件位置,图中蓝色部分就是文件大小部分,可以发现蓝色部分的两行都是一样的值,这里虽然值是不固定的,但是格式是固定的,所以这里可以用来判断有没有左右移。
本文地址:https://bolg.xs357.com/post-57.html
未标注转载均为本站远程,转载请注明文章出处: