标签:cal post 部分 hose sum 软件 char 执行 install
MD5算法目前的状态:
PS:SHA-1也快步MD5的后尘了。只是SHA-1攻击成本还不算特别低,
【1】什么是hash函数:
密码学上的hash函数,是指对于映射A->B,使得:
这里的“难”理解为计算时间成本高。
【2】相同hash添加尾缀依然相同的性质:
若:hash(A) = hash(B)
则:hash(A+C) = hash(B+C)
形式:以一个指定的前缀程序A为基础,在尾部添加不同的附加数据得到两个具有相同MD5的样本B和C。
Array A;
Array B;
main()
{
if (A = B)
run benign code;
else
run malicious code;
return ;
}
以下内容存放在main.c中,通过“gcc main.c”获得二进制文件
#include <stdio.h>
#include <string.h>
unsigned char A[130] = {
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
};
unsigned char B[130] = {
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
};
int main()
{
if(strcmp(A, B))
//difference
printf("1 + 1 = 1\n");
else
//same
printf("1 + 1 = 2\n");
return 0;
}
数组A的内容留给附加的后缀数据,记为0x41便于通过二进制编辑器查找和处理。
先用bless查看a.out的二进制内存并找到A数组的位置。
切割生成的二进制文件。前缀{128bytes的整数倍}+128个字节{填充碰撞程序生成的后缀数据}+后缀{剩余内容}
linux下切割文件可以使用head,tail命令。
wc -c a.out #计算整个a.out的bytes大小,7740
head -c 4160 a.out > a_prefix.bin #将a.out的前4160 bytes写入a_prefix.bin
tail -c 3452 a.out > a_suffix.bin #计算7740-4160-128=3452
生成MD5值相同的前缀文件。但他们的后缀数据部分存在差异。
md5collgen -p a_prefix.bin -o a_p.bin a_q.bin
md5sum a_p.bin a_q.bin
修改后缀文件中的数组B内容。
将a_p.bin的后缀数据替换数组B的内容
得到两个MD5值相同的可执行文件。
cat a_p.bin a_suffix.bin > a_p.out
cat a_q.bin a_suffix.bin > a_q.out
md5sum a_p.out a_q.out
./a_p.out
./a_q.out
这种碰撞模式是通过同一个前缀程序碰撞生成的两个样本,如果其中有恶意代码,则两个样本均包含恶意代码,容易被安全软件识别,隐蔽性不强。
形式:由两个不同的前缀程序A和B分别在尾部添加附加数据,构造出具有相同MD5的程序C和D。
其中的原理
git clone https://github.com/cr-marcstevens/hashclash.git
apt install autoconf automake libtool
apt-get install zlib1g-dev libbz2-dev
apt install libboost-all-dev
./configure --with-boost=/usr/include/boost
make clean
make -j 4
MD5碰撞的演化之路[360出品]
PE程序构造identical-prefix collision的实例(懂)
PE程序构造chosen-prefix collision的实例(懂)
利用windows的签名机制的实例
你的数字签名会被撞破么?安全Hash的攻与防[百度出品]
伪造CA证书
SHA1 SHAttered攻击事件
对网盘的“秒传”机制进行攻击(懂)
攻击基于“尾部附加key”形式的MD5签名进行攻击
标签:cal post 部分 hose sum 软件 char 执行 install
原文地址:https://www.cnblogs.com/goodswarm/p/12287789.html