zoukankan      html  css  js  c++  java
  • 牛刀小试:记某一软件反向工程试验

    因为需要,需要解除一个软件的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,一切运行正常。

  • 相关阅读:
    无题
    生活真像小说
    草样年华
    Intentional Programming
    厌倦说话
    解释 Intentional Programming
    开始折腾iphone cdma 恢复,降级,刷机,越狱,手编,写号
    新手如何成为更好的图形设计师
    Grunt.js 初使用
    有抱负的程序员应看的10个TED演讲
  • 原文地址:https://www.cnblogs.com/robinli/p/2259098.html
Copyright © 2011-2022 走看看