起因是我想装一个破解版的source insight 4,我想确保下载的软件没有包含病毒。一开始我搜到一个github项目:https://github.com/achilsh/source_insight_4这个安装包是合法签名,版本是4.0.86.0,破解程序的版本是 4.0.84.0
这种情况需要小心,正常来说你安装包和破解后的应该版本一样才是,而且该作者很贴心的把破解后的sourceinsight4.exe签名删除了,因为如果不删除签名,修改内容会导致签名不合法,很多杀毒软件会报毒,emmm,这个我不敢用了。我又找了另一个破解版,这次版本是一致的,原版和破解版都是4.0.126.0
https://www.52pojie.cn/thread-1770613-1-1.html
作者说把exe替换进去然后导入他提供的lic文件即可完成破解。这个版本一样,大小也一样,exe本身应该没有加料。但是我们还是想看看他修改了哪些地方。用fc看看修改了多少,发现改了17个字节fc /B .\sourceinsight4_crack.exe.1 .\sourceinsight4_origin.exe.1 目测不仅修改了代码部分,其他地方也有改动,有点奇怪。接下来用010 editor的compare功能看看具体改了啥,010 editor得安装EXE模板,这样就能看到字节对应PE结构中的哪个属性。
010打开两个exe 点击下面红色的difference,就会在二进制窗口中导航到修改字节处: 鼠标移动到40上,提示是DllCharacteristics不一样 右键点击差异的字节处,跳到模板变量 原来是破解版把随机基址关掉了 再看第二处修改,29B5 修改了两个字节 用cff explorer计算一下rva去ida pro 看 0x400000+0x35b5 发现居然指令一样,字节码不同: 这个有点烧脑了,一个是以前不知道同一个指令可以有两种字节码表示形式,第二个疑惑点就是为啥破解者要改这个?再来看第三处修改,24E12 这里是把正版的cmp改成了mov,这是爆破的一部分,原版的逻辑是状态码等于200成功,就联网搞点事情,破解版是把状态改成200成功,然后不判断直接联网。 下一处修改00044928: 89 8B00044929: F0 C6同样是相同指令,不同字节码的情况 下一处修改001154B2: 90 3B001154B3: 90 11001154B4: 90 75001154B5: 90 39这里是把正版的cmp nop掉了,正常的破解逻辑 下一处00116683: C8 D000116684: 00 01把 mov eax, 1D0h 改成了mov eax, 0C8h 这是把校验函数强行返回200成功了 下一处00116D80: 31 F700116D81: C0 D800116D82: 90 1B00116D83: 90 C0这里是修改了一个函数,强行让它返回0
最后一处差异00117D05: 75 74把jz改成了jnz经过上面的分析,基本可以确定exe本身没有藏后门,最后打开lic看看,这个文件是明文的,虽然ActId,Signature是一长串密文,理论上无法排除这坨东西能通过某种方式转成shellcode被source insight执行,也许si设计了某种机制,这两托东西可以被执行,而破解者发现了这个后门,将他替换成自己的payload... 哈哈,这是不可能的,对吧? 所以经过鉴定,这是一个没有后门的破解软件,可以放心食用。
除了这种笨办法,其实也可以考虑用bindiff这类插件。https://github.com/joxeankoret/diaphora这里我用 diaphora插件装好之后,ida pro打开正版程序,生成一个数据库,这一步大概要5分钟
然后ida pro大概破解版,选择刚才生成的数据库进行比对
比对完成后,弹出这个窗口 我们发现8475个函数,只有1个识别出来有差异 所以diaphora插件其实不会列出每一个字节的不同,diaphora在这种基于同一个二进制文件做patch的场景可能有点大材小用了。他比较适合对同一个软件的不同版本进行比对。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课