某程序反向工程记录
因为需要,需要解除一个软件的License限制,所以进行一次反向工程试验,特将过程记录下来。
1.分析目标软件编程语言:经过查看安装手册,发现需要安装DOTNET2.0,呵,看来是DOTNET下的系统了。
2.尝试使用Reflector反编译:用:Reflector,加载主程序,提示不是DOTNET格式程式,看来加壳
3.解壳:这时首先得用到NETUNPACKER这个强大而通用的家伙,果然UNPACK一堆DLL与EXE.
4.再次使用Reflector加载上面得到的DLL:使用查找功能,查找提示限制时的字符“过期”,无法找到。同时发现缺少一个关键的DLL(WebGi*.dll(全名略去,呵,软件公司别找上我)
5.因为担心是我使用是未使用到该DLL的功能 ,导致使用NETUNPACK未能解出该DLL,通过反复操作第4步与第5步,还是无法得到。
6.上OLLYICE: 附加调试的程序,在使用该系统时发现一个错误,错误提示:frmBZZHTJ.fixgdb()调用这个方法有问题,看错误是在上面缺少的这个DLL中抛出来。那我们就在内存中查找“frmBZZHTJ”这个字符,果然找到,然后向上查找“MZ”标记(为什么这样,呵,想知道的人找找相关资料),果然找到。备份->另存数据为对应名称的DLL.
7.使用Reflector载入DLL: 哇,果然正确,这是一个超大的DLL,有15M之大,看来NETUNPACK可能是存在某种限制,不能UNPACK这么大的DLL.
8.在上的DLL中查找:”过期“字符串,顺处找到目标,所有有关限制均调用同一函数,呵。只有使用ReflectIL插件重写该函数就可以。
9.可惜没学好MSIL,看了一下不好改,时间急没法立即学习。但难不倒我,用C#写一个我想要的同样函数(呵,其实就是总是返回TRUE),编译后使用同样的工具查看其IL,依次复制过来就搞定啦
10.使用RelectIL另存为新的DLL,复制到目标程序目标下,OK,一切运行正常。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述