一个 Dll 文件的解密步骤

     今天对一个动态库文件(DLL)进行了解密,总共花费了5个小时,解密后不在需要加密狗就可以正常工作。
     解密工具:
    1.  IDA 一个超强的反编译工具软件,可以反汇编加载插件 HEX-RAY 后还可以反编译成C代码,非常方便解密时对代码的理解。
    2.  WDasm 也是一个反编译软件,重要的是可以加载代码并设置断点、执行等,可以动态的观察代码时产生的数据。
   3. UltraEdit 是一个编辑软,可以对二进制文件编辑修改保存,是解密的必备工具.
   4. Delphi 或 VC 或VB 等,这个工具主要是制作一个能够加载需解密DLL的一个运行程序,这个程序随便取个名字比如TEST.EXE, TEST.EXE 需加载动态库并调用DLL文件中的主要函数,实现需要DLL实现的功能,能够显示出对DLL调用的成功与否,这个程序越简单越好,但必须能体现出调用后的结果。

 准备完上诉工具和编制完成加载程序后就可以开始解密工作了。
 分别启动IDA和WDasm ,用IDA反编译DLL , WDasm  反编译并加载 TEST.EXE,在   WDasm 中加载并运行Test.exe ,这样就可以在 WDasm 中调试运行Test.exe ,通过查找DLL中的导出函数名(如:abc( )),找到abc()函数,按F2 加上一个断点,按F9全速运行Test.exe ,在Test.exe 中调用abc( ),此时程序会停在abc( )这个地方。此时可以按F7进入DLL模块,这时就进入了DLL模块中,可以仔细查看每个函数的调用过程和结果,通过观察和推测,并结合 对应IDA中的反编译相对应的函数, 就可以迅速的找到关键变量和关键函数,一般加密系统采用加密狗加密后都是需要检测加密狗是否存,存在与否最终都是通过设置一个变量来判断以下的操作该正常操作还是退出,因此只要找到了这个变量,修改此变量句可以跳过检测结果导致的程序非正常运行,通过 WDasm的动态运行观察分析确定了这个变量后,就可以修改关键的跳转语句,将其直接跳进正常的代码段就可以达到解密的目的。这个分析过程的快慢是由解密者对工具的熟练程度、对动动态库DLL调用的理解程度、和对解密的经验决定的,本人的这次解密从开始到解密完成只花费了4个多小时,感觉非常快,这跟平时经常分析和注意解密方式有大关系。
     现在找到了关键点后就可以做最后一步了---修改DLL文件,用 UltraEdit打开DLL文件,输入解密点的一串16进制代码,最好输入长一些,这样找到的点具有唯一性,找到点后,最简单的修改就是将跳转指令改为NOP 即不在跳转,直接进入正常的程序分支,改完后保存文件,解密完成后再调用TEST.EXE测试在不插加密狗时看看程序是否能正常运行,如果运行错误,就需要再重复上面的工作,直到解密完成。




 

你可能感兴趣的:(一个 Dll 文件的解密步骤)