抛砖引玉:MD5撞码构造

很早之前王小云教授提出了一种方法,可以在已知原文的情况下构造出另一个跟原文MD5值相同的串。并且该计算过程所消耗的时间是有限的、可计算的。
  但是,要利用此方法达成某种啥啥的目的是困难无比的。原因就是你无法确定新构造出来的串符合你的预期。这么说比较绕口,说得俗一点:你可以将某个文件的MD5值弄的跟kernel32.dll的完全一样。但是你却无法让这个文件包含你所希望的某种功能。这个文件刚好是完整可运行的PE文件的概率都非常低,不过我也见过这种样本。。。
  但是要通过碰撞实现程序A跟程序B的MD5值完全相同,但运行结果是完全不同,却是非常容易的,这个我也在网上看到过例子,但不知道有没有人公布这个方法,今天就在这里说一种简单的方法。。。关于这玩意到底有没有实际意义,就看各位的思路淫不**了。
  国外公布过一个碰撞程序 fastcoll_v1.0.0.5 ,可以在一个文件的基础上生成两个MD5相同的文件,查看下这个两个MD5相同的文件,会发现只是在文件末尾添加了一些不同二进制数据,那么。。。根据其中某个不同的字节,来使我们的程序跳转的不同的流程执行,就可以实现程序A跟程序B的MD5值完全相同,但运行结果却是完全不同,估计各位看到这里都笑了,代码其实还是写死的。

char szModule[MAX_PATH] = {0}; GetModuleFileNameA(NULL,szModule,MAX_PATH); FILE *fp = fopen(szModule,"rb"); if(fp == NULL) { return FALSE; } fseek(fp, -109, SEEK_END); BYTE bRead; size_t len = fread(&bRead, sizeof(bRead), 1, fp); fclose(fp); if ((bRead+0x80)>0xff) { SetWindowText(_T("木马程序")); SetDlgItemText(IDC_STATIC,_T("这是木马!!!")); } else { SetWindowText(_T("正常程序")); SetDlgItemText(IDC_STATIC,_T("这是正常程序。")); }

test0.jpg

转载请注明来自看雪论坛@PEdiy.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • C/C++输入输出流总结 前两天写C++实习作业,突然发现I/O是那么的陌生,打了好长时间的文件都没有打开,今天终...
    LuckTime阅读 1,753评论 0 6
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,217评论 30 472
  • 刚放假那几天就隐隐感觉到美剧《西部世界》很火。但我一直压着,等把他养肥了,才慢慢地看了一遍。到昨天,第二遍刷完了。...
    gingereerr阅读 501评论 0 1
  • 昨天在码农届吴彦祖的blog里找到一个不错的iOS开发教程:designcode看了看价格,也不是很贵,50刀,包...
    不笑猫为什么要笑阅读 400评论 0 1