关于如何碰撞两个功能不一样,但 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
(希望不要拿示例程序改改版权,就拿出去招摇撞骗哟~ 亲~)
留言评论(旧系统):
晴天小铸 @ 2012-07-15 16:51:58
- - 程序那么大冲撞到多少年
本站回复:
依靠这种方法,是非常快的,几秒钟就够了。
Ghost @ 2012-07-17 21:49:26
易语言已经实现 谢过核总。
本站回复:
奇葩的语言…… -_-|||
小菜鸟 @ 2012-10-08 14:16:04
so?其实两个程序本身内容是一样的?不过不是判断外部条件不同,而是判断本身多余的那段“用来使md5一致的废话的内容”不同而已?
本站回复:
虽然有点绕口,但差不多是这个意思,程序判断自己屁股后边跟的数据……
太极 @ 2013-01-08 00:18:40
核总 我在国外的论坛见过真正的碰撞出来的程序,MD5值一样,我用winhex比较过,内容完全不一样,求解。
本站回复:
本站早已公布这种碰撞的方法了啊,源码都公布了。目测你没看内容……
太极 @ 2013-01-08 01:13:58
老外论坛上的两个exe,hex内容基本是不一样的,绝非仅仅是屁股的数据不同。“使用 MD5 碰撞算法伪装木马,躲过杀毒软件查杀,加入360白名单 ”这篇文章出来不久,我就用winhex分析出他的原理了。。。
本站回复:
这还用分析么,文中早写明了……
太极 @ 2013-01-08 01:22:14
等我找到那两个exe,求核总分析。
本站回复:
╮(╯_╰)╭
hackbs @ 2013-01-17 13:53:55
这个..VB的基础还不是很好,站长能提供下VC的源码么?邮箱1073739377@qq.com
本站回复:
我靠,这还要共享么?几行代码的事,你自己写写……
佚名 @ 2013-03-11 18:54:58
“太极”的疑惑可能跟我一样。
博主所用的方法——在代码逻辑中,根据程序自身的不同的长度,做出不同的输出。
“MD5_碰撞测试程序_示例程序.rar:http://115.com/file/clonsfie”,使用了博主所说的方法。
因为在十六进制编辑器中MD5 Test_A.exe和MD5 Test_B.exe在偏移量5013之后,只有一处不同。
“HelloWorld-colliding.exe”和“GoodbyeWorld-colliding.exe”,不确定是否使用了博主所说的方法。
因为在十六进制编辑器中两个程序在00E0、100D-100F、7030-7042和A000之后,有四处不同。
如果有这两个程序的源代码就好了,这样就能确定是否使用了博主的方法。
本站回复:
碰撞不止这一种方法。
佚名 @ 2013-03-11 18:58:05
另外,博主能否提供使用易语言编写的程序(及其源码)?
本站回复:
不用易语言,无法提供。
佚名 @ 2013-12-14 10:43:13
下标越界怎么个问题啊
本站回复:
检查你的数组大小
佚名 @ 2013-12-14 10:44:46
下标越界怎么个问题啊
本站回复:
检查你的数组大小
佚名 @ 2013-12-14 13:51:09
没有获取成功 一直是17 求解
本站回复:
额,继续找……
佚名 @ 2014-02-27 18:08:32
站长,可以联系下Q617236071详细谈谈么,还有点不懂
本站回复:
仔细看文章就懂了。
小生 @ 2014-04-25 19:56:53
博主这样的方法让我大开眼界。不过这样的方法用在免杀360上面有点画蛇添足了呢。既然你加了判断语句那么直接判断文件名不为 a.exe的时候为正常程序。不为a.exe为木马程序。然后直接上传给杀软(不止360)验证不一样么?也许我错了,希望和博主多交流我QQ840308944
本站回复:
哈哈哈,这方法将近两年前了,现在对杀毒软件应该无效了(多hash认证),使用名字判断的方法虽然简单,但貌似不太实用。
佚名 @ 2014-04-25 21:32:07
还记得最初,为什么要学电脑么,真的是想做一个无敌的黑客么?还是只是为了找个借口趁机玩玩游戏?打打小霸王?走到了今天这一步,我反问自己,也许,就是自己想边玩边养活自己,不劳而获而已。和那些所谓的“职业玩家”,想靠打游戏过活的人有什么区别。如果再有一次机会,也许我不会选择学电脑。
本站回复:
小霸王!其乐无穷啊!
佚名 @ 2015-05-08 15:06:51
核总,话不要说满了,像你源码里这种把戏应该不是真正的前缀构造法,给你看一个真实的案例吧,虽然我也想知道
http://pan.baidu.com/s/1ntrBY9z
因为是朋友捕获的病毒样本,所以请小心验证,解压密码:md5
本站回复:
我程序并没有进行碰撞,而是利用国外一个程序“MD5 碰撞发生器 v1.5 (MD5 Collision Generator v1.5)”在文件尾部附加了碰撞数据,回头你看看你这个东西,虽然不知道你说的是什么……
佚名 @ 2015-05-08 15:21:22
是的,看了你的源码,知道你两个程序的“功能不同”其实只是假象,是让使用者以为是功能不同,其实代码里已经做了判断而产生了不同的对话框输出,完全还是同一个程序而已。
但我上传的示例真的是某些人真正碰撞出来的结果,理论真的转换成了实践,让人吃惊。
本站回复:
嗯,回头我看看,感谢提供样本!^_^
佚名 @ 2015-05-08 15:34:14
相信已经有人下载验证了,所以请不要再说“通过前缀构造,实现完全不同的两个文件返回相同MD5”这种事情只有量子计算机这样的设备才能实现。
只是很感兴趣实现方法,不为做坏事,纯属爱好,欢迎哪位真正的大侠指点迷津吧,呵呵。
本站回复:
没有验证的情况下,谁都不要轻易下结论。
佚名 @ 2015-05-08 15:39:28
嗯,顺便贴出部分哈希值留给感兴趣的朋友一同验证
测试1.exe_
MD5: 8C590CF74FE65BACFAAAFB8A6EB207AA
SHA1: 7A701E5CC45B4F921C0B70499F4CF2D57AE11CA6
CRC32: 62782607
测试2.exe_
MD5: 8C590CF74FE65BACFAAAFB8A6EB207AA
SHA1: 582282F2C9D55471122C0C0B3CDC6F564F93B361
CRC32: B9BB0F04
本站回复:
+1
MD5碰撞大神 @ 2016-04-15 08:40:40
大家好 我是md5碰撞的原作者,让各位安全大神研究了很久!真是不好意思啊 !目前360那边已经研究透彻了,所以我这边也不需要隐藏什么了! 感谢王小云博士,感谢本网站多年对该技术的关心!不要问我是谁 ,我就在本站的群里面!
本站回复:
我赵日天第一个表示不服!
文章作者
Nuclear'Atk
上次更新
2012-07-15
许可协议
Nuclear'Atk(核攻击)网络安全实验室版权所有,转载请注明出处。