一款餐饮软件的破解

     

          最近在研究软件的破解,其中心酸只有自己知道,走了多少曲折之路,多少个不眠的夜晚。还好我坚持下来了,并且初步尝试到成功的喜悦;下面介绍一款餐饮软件的成功爆破过程;

           在逆向工程领域,OllyDbg是最最完美的反编译调试工具。

       

1,先给软件脱壳(查壳工具:PEiD.exe);

      

      是 aspack的壳,啥也不说脱掉。。。

2,软件脱壳:

  

     成功脱掉原先的aspack壳。让我来看看还有没有壳:

  

   哈哈,没壳了 delphi的程序.用dede反编译分析:

  

od 分析:

 

 

经过千辛万苦的分析调试,终于找到关键跳转:

  * Reference to : TRegware4._PROC_00538E64()
|
006FCC3A   E825C2E3FF             call    00538E64 //此处是判断注册的关键call
006FCC3F   84C0                   test    al, al
006FCC41   0F8589000000           jnz     006FCCD0 //此处跳转注册还是非注册。。。

 

好了,改掉他就ok了,006FCC41   0F8589000000           jnz     006FCCD0 改成006FCC41   0F8589000000           jmp    006FCCD0

呵呵,成为成为注册版了。^_^ 成功了???调个系统时间看看还有没有暗壮,往后调一个月看看,哦,shit,还有暗壮。这款软件网上有人也破解的,但是没有去掉这个暗壮。

 

  又要分析了,看他这个软件用的是免费的regware4,呵呵 google一下,发现他写注册表,HKEY_CLASSES_ROOT/CLSID/{pid}/Info/data和 HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID/{pid}/Info/data,只要删除这两个键值即可达到正常进入软件,细心的观察每次软件都要判断是否有注册表项,如果有的话,分析对比,然后写注册表。

    哈哈,怎样实现爆破呢,永远不提示注册窗口。。od debug半天没找到。。。shit!

    苦思冥想,呵呵。有了,PE文件代码注入,我只要在运行这个软件之前加一段代码,破坏这个注册表项就OK.于是,写了一段c++代码:

      

  1. #include "stdafx.h"
  2. #include <windows.h>
  3. int main(int argc, char* argv[])
  4. {
  5. //  printf("Hello World!/n");
  6.     HKEY hKey;
  7.     try{
  8.     long ret=::RegOpenKeyEx(HKEY_CLASSES_ROOT,"CLSID//{pid}//Info//",0,KEY_ALL_ACCESS,&hKey);
  9.     if(ret!=ERROR_SUCCESS)
  10.        return 0;    
  11.     ::RegDeleteValue(hKey,"Data");
  12.     ::RegCloseKey(hKey);
  13.     }catch(...){}
  14.     return 0;
  15. }

反编译:

 

     

代码注入:(其实就是一个跳转的功能)

  改写的汇编:

 

  1.     // Place your code here ...
  2.     push    ecx
  3. //  lea     eax, [ebp+_p_dwRet]              ;
  4.     lea     eax, [esp]                       ;
  5.     push    eax                              ; /pHandle
  6.     push    KEY_ALL_ACCESS                   ; |Access = KEY_ALL_ACCESS
  7.     push    0                                ; |Reserved = 0
  8. //  push    00406038                         ; |Subkey = "CLSID/{pid}/Info/"
  9.     lea     ebx,[ebp+_p_szPGuid]             ;
  10.     push    ebx                              ;
  11.     push    0x80000000                       ; |hKey = HKEY_CLASSES_ROOT
  12. //  call    dword ptr [<&ADVAPI32.RegOpenKey>; /RegOpenKeyExA
  13.     call     _jmp_RegOpenKeyEx
  14.     test    eax, eax
  15.     jnz     _regopenfailed
  16. //  mov     ecx, [ebp+_p_dwRet]              ;
  17.     mov     ecx, [esp]                       ;
  18.    
  19. //  push    00406030                         ; /ValueName = "Data"
  20.     lea     ebx,[ebp+_p_szData]              ;
  21.     push    ebx                              ;
  22.     push    ecx                              ; |hKey
  23. //  call    dword ptr [<&ADVAPI32.RegDeleteV>; /RegDeleteValueA
  24.     call    _jmp_RegDeleteValue              ; 
  25. //  mov     edx, [ebp+_p_dwRet]              ;
  26.     lea     edx, [esp]                       ;
  27.     push    edx                              ; /hKey
  28. //  call    dword ptr [<&ADVAPI32.RegCloseKe>; /RegCloseKey
  29.     call    _jmp_RegCloseKey
  30.     xor     eax, eax                         ;
  31. _regopenfailed:
  32.     pop     ecx                              ;

   改写老外的Pemaker程序,实现代码注入:

  1. _p_szAdvApi32:              //db "AdvApi32.dll",0,13
  2.         db db db db db db db db db db db db db
  3. _p_szRegOpenKeyEx:          //db "RegOpenKeyExA",0,14
  4.         db db db db db db db db db db db db db db
  5. _p_szRegDeleteValue:        //db "RegDeleteValueA",0,16 
  6.         db db db db db db db db db db db db db db db db
  7. _p_szRegCloseKey:           //db "RegCloseKey",0,12 
  8.         db db db db db db db db db db db db
  9.         byte_type(0)
  10.         byte_type(0)
  11. //----------------------------------
  12. _p_LoadLibrary:                 dword_type(0xCCCCCCCC)
  13. _p_GetProcAddress:              dword_type(0xCCCCCCCC)
  14. _p_GetModuleHandle:         
  15.                                 dword_type(0xCCCCCCCC)
  16.                                 dword_type(0xCCCCCCCC)
  17.                                 dword_type(0xCCCCCCCC)
  18.                                 dword_type(0xCCCCCCCC)
  19.                                 dword_type(0xCCCCCCCC)
  20.                                 dword_type(0xCCCCCCCC)
  21.                                 dword_type(0xCCCCCCCC)
  22.                                 dword_type(0xCCCCCCCC)
  23.                                 dword_type(0xCCCCCCCC)
  24. _jmp_GetModuleHandle:           __jmp_api   dword_type(0xCCCCCCCC)
  25. _jmp_VirtualProtect:            __jmp_api   dword_type(0xCCCCCCCC)
  26. _jmp_GetModuleFileName:         __jmp_api   dword_type(0xCCCCCCCC)
  27. _jmp_CreateFile:                __jmp_api   dword_type(0xCCCCCCCC)
  28. _jmp_GlobalAlloc:               __jmp_api   dword_type(0xCCCCCCCC)
  29. _jmp_MessageBox:                __jmp_api   dword_type(0xCCCCCCCC)
  30. _jmp_RegOpenKeyEx:              __jmp_api   dword_type(0xCCCCCCCC)
  31. _jmp_RegDeleteValue:            __jmp_api   dword_type(0xCCCCCCCC)
  32. _jmp_RegCloseKey:               __jmp_api   dword_type(0xCCCCCCCC)
  33. _p_szText:
  34. bb('H') bb('e') bb('l') bb('l') bb('o') bb(' ')
  35. bb('W') bb('o') bb('r') bb('l') bb('d') bb('!'
  36. bb(' ') bb(' ') bb(' ') bb(' ') bb(0)
  37. _p_szCaption:
  38. bb('A') bb('s') bb('h') bb('k') bb('b') bb('i') bb('z') bb(0)
  39. _p_szPGuid:..... bb(0)
  40. _p_szData:
  41. bb('D') bb('a') bb('t') bb('a') bb(0)
  1. const char *szWindowsAPIs[]=
  2. {
  3.     "Kernel32.dll",
  4.     "GetModuleHandleA",
  5.     "VirtualProtect",
  6.     "GetModuleFileNameA",
  7.     "CreateFileA",
  8.     "GlobalAlloc",
  9.     0,
  10.     "User32.dll",
  11.     "MessageBoxA",
  12.     0,
  13.     "AdvApi32.dll",
  14.     "RegOpenKeyExA",
  15.     "RegDeleteValueA",
  16.     "RegCloseKey",
  17.     0,
  18.     0,
  19. };

  

    好了,一切over。破解完成,看看成果把;

 

        

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值