如何碰撞两个功能不一样,但 MD5 值一样的程序的方法 + 源码公布

关于如何碰撞两个功能不一样,但 MD5 值一样的程序的方法。

如果您还没有阅读过之前的内容,请先查阅以下链接:

使用 MD5 碰撞算法伪装木马,躲过杀毒软件查杀,加入360白名单

指定MD5值碰撞,指定MD5碰撞免杀,修改木马MD5值和系统文件一致

当时我在帖子里写的是:


用到的工具如下:

1、MD5 碰撞发生器 v1.5 (MD5 Collision Generator v1.5)

2、一点点编程技巧


方法写的没错,工具也没错,关键在于这个“2、一点点编程技巧”,技巧是很重要的一步。

在前边的内容中我曾讲过:


方案一,假设有程序 A:

可以通过 A 生成 B、C 两个 MD5 一样,但实际数据不一样的程序(文件尾部多了碰撞出来的随机数据,不影响程序功能),这两个程序功能也是一样的。

A、B、C 三个程序 md5 值的关系是这样的:

md5(A) <> md5(B)

md5(A) <> md5(C)

md5(B) = md5(C)

此方法即我文章中所讲的内容,也给了具体方法、工具及演示程序,具体去看文章,这里不废话了……


重点就在于这个“文件尾部多出来的随机数据”,碰撞出来的两个文件尾部的数据是不一样的,而且碰撞出来的每个文件都是有规律可循的……

例如,在只改动少量源码的情况下,改动前和改动后碰撞出来文件尾部的随机数据是有部分一致的(测试时用的编程语言为 VB,其他编程语言不知是否具有同样的特性,尚未测试其他编程语言。不过,我本人觉得这个与编程语言无关,所以其他语言应该也具备此特性)。

例如改动前:

if 1 = 1 then
    msgbox "yes"
else
    msgbox "no"
end if

改动后:

if 1 = 2 then
    msgbox "yes"
else
    msgbox "no"
end if

在这个例子中,只是改动了一点点源码,把 1 改成 2 了。

然后在编译后进行 MD5 碰撞,会生成两个 MD5 一样,但功能也一样的程序。

如何使它们功能不一样呢?或者“看起来”功能不一样呢?

这里就要用一点小技巧了,前边说过尾部附加有数据,并且有规律可循。

所以我们可以让程序在运行后读取自身文件数据,然后根据文件数据执行一些不同的功能。

这个说起来有点绕口,如果一时不能理解的话,可以再仔细思考一下。

公布之前那个示例程序的源码,大家看过源码后应该就明白了。

Public Function ByteLoad(ByVal N As String) As Byte()                           '读取文件二进制数据
    Dim Dat() As Byte, FileSize As Long                                         '二进制数组,文件长度
    FileSize = FileLen(N)                                                       '获取文件长度
    ReDim Dat(FileSize - 1) As Byte                                             '定义二进制数组长度
    Open N For Binary As #65                                                    '打开读取
        Get #65, , Dat
    Close
    ByteLoad = Dat                                                              '赋值
End Function

Private Sub Form_Load()
    Dim Test() As Byte
    Test() = ByteLoad(App.Path & "\" & App.EXEName & ".exe")                    '读取自身文件数据
    If Test(20499) < 100 Then                                                   '判断尾部附加数据中的某个值
        MsgBox "我是木马", vbInformation, "提示:"
    Else
        MsgBox "我是正常程序", vbInformation, "提示:"
    End If
End Sub

呵呵,源码就这么简单,就这么几行……

核心语句就这一句:

If Test(20499) < 100 Then

关于之前我在文章末尾提到的 MD5 碰撞免杀方法,在看过此文后,聪明的读者们应该早已想到了……

暂时没想到的同学,不要紧,慢慢、仔细想想,你会想到的……

╮(╯_╰)╭

文章最后,打包当时的测试程序源码,与编译并碰撞后的示例程序。

下载地址:MD5 碰撞测试程序.rar

(希望不要拿示例程序改改版权,就拿出去招摇撞骗哟~ 亲~)

本文“如何碰撞两个功能不一样,但 MD5 值一样的程序的方法 + 源码公布”,来自:Nuclear'Atk 网络安全研究中心,本文地址:http://lcx.cc/?i=2681,转载请注明作者及出处!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值