本菜有十几年没涉及软件的逆向了,前几天朋友拿了一个古老的软件(十年前的,出品该软件的公司都已经不存在了)想迁移到新电脑上继续使用,该软件是一机一码方式注册的,因为软件公司已经找不到了,于是本菜赶鸭子上架,重操旧业,呵呵。重新下载了OD等一堆工具(感谢看雪,很快找齐了各种需要的工具,再次回来像回家一样亲切,谢谢!)。
注册算法很复杂,看了一下就没再费力气,还是采用省事的暴力,(其实是功力不够,呵呵)。
因为有原来机器上的一对机器码注册码,所以用替换机器码的办法完美爆破主程序。因为该软件的几个主要功能模块都各自对应着单独的DLL文件,DLL里面都有完整的注册认证代码,所以又照方抓药把几个DLL爆破了,按说应该大功告成,可是问题出现了!DLL有自校验!每次载入DLL时,该DLL被我改动的几行代码处有两个字节---被---改---动---了!!!
06DFBBAC 833D 04DEF606 00 cmp dword ptr [6F6DE04], 0
06DFBBB3 74 08 je short 06DFBBBD
06DFBBB5 8B0D 04DEF606 mov ecx, dword ptr [6F6DE04]
上面是DLL原来的代码
065FBBAC B8 36204B84 mov eax, 844B2036
065FBBB1 894424 10 mov dword ptr [esp+10], eax
065FBBB5 8B0D 04DE7606 mov ecx, dword ptr [676DE04]
下面是爆破后的代码
每次载入内存时,被莫名其妙修改的是爆破后代码第一行中的84和第二行中的89,固定的两个连续的字节。修改后的内容是随机的。
0688BBAC B8 36204BC7 mov eax, C74B2036 (这行里的84变成了C7)
0688BBB1 8F4424 10 pop dword ptr [esp+10] (这行里的89变成了8F)
0688BBB5 8B0D 04DE9F06 mov ecx, dword ptr [69FDE04]
我的问题是:
1、找不到是在哪里校验的。校验代码是在主程序里吗?校验代码是用什么手段定位到我的爆破点的?
2、每次DLL载入内存时,只是我爆破的那两行代码中有固定位置的两个字节被莫名其妙的修改了,如何在OD里面跟踪是何时改动的?
请指教,不胜感激!谢谢!
[培训]科锐逆向工程师培训第53期2025年7月8日开班!