本帖最后由 爱飞的猫 于 2023-4-3 03:15 编辑
1 回复中有大佬说验证在DLL中实现的,那么DLL在哪里?它是释放DLL后加载,还是内存加载,如果是内存加载,什么是内存加载?
要知道免费软件的源码并没有,二道贩子是怎么添加进去的?又或是使用的什么别的方法。
文件不落地,模拟 Windows 加载 PE 文件的方法加载。
免费的源码不清楚,内存加载指的是 “不将 DLL 文件写出到文件后加载”(绕过 LoadLibrary 系列 API)。
随便找一个捆绑 DLL 的工具应该就可以得到类似的效果了。
2 如果真是在DLL验证,先走DLL,之后再跳到原程序OEP运行。那么这个DLL应该是可以DUMP出来吧,如何DUMP出来。
导出 .xw 区段然后删掉前面那一部分就能得到一个看起来正常的 PE 文件。不知道是不是调试器问题会提示无效的 PE 文件。
DUMP https://wwbg.lanzouf.com/iR9Mn0ry1ptc 解压密码 1768422
其实就是入口点 push 的那块地址指向的内容,直到区段结束。
006F8000 | 68 B78D6F00 | push gd.6F8DB7 |
006F8DB7 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ..........ÿÿ..
006F8DC7 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ¸.......@.......
006F8DD7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
006F8DE7 00 00 00 00 00 00 00 00 00 00 00 00 28 01 00 00 ............(...
006F8DF7 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68 ..º..´.Í!¸.LÍ!Th
006F8E07 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F is program canno
006F8E17 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 t be run in DOS
006F8E27 6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00 mode....$.......
3 直接改OEP,删除xw区段,那么说明这个验证并不像一般的加壳软件,会把如.text区段加密吧,
如果加密区段,再解密区段的话,那么只有秘钥正确才能解码吧,猜想,这个只是加了个验证,并没有对原程序区段进行加密解密吧,否则并没有解密,直接改OEP,程序肯定运行不了吧。
加壳过程没有改变原文件的代码区段内容,只是在执行原软件前执行 DLL 的函数。DLL 初始化函数结束后交还控制权给主程序。
当然也不排除将原 EXE 部分字节码抽取,然后在 DLL 的验证结束阶段还原的可能性。
4 这种验证方式的壳,只说它这种验证方式的,应该有类似的源码吧,求个类似这种方法的开源源码,想看下源码看它是实现的,感觉这样
更直观,了解壳原理。
随手搜的一个,从内存加载 DLL:GitHub - fancycode/MemoryModule: Library to load a DLL from memory.
|