某工程造价管理系统ROCKEY4ND加密狗破解

软件名称:某工程造价管理系统
所用工具:PEID OD
下载地址:自己去搜吧

关于ROCKEY4ND 官网是这样介绍:

    ROCKEY4ND加密狗是一款具有大数据空间、多模块和算法空间的无驱型加密锁。在Windows 98SE/Me/2000/XP/2003、Linux、Mac OS、WinCE等平台下无需额外安装驱动程序。提供丰富灵活的API接口,高强度外壳加密工具,快速操作的编辑工具,两级密码管理体制,存储空间多达1000字节,64个模块管理,用户自定义算法,并提供内部种子码算法,硬件随机数发生器等算法。

运行程序,以学习版方式打开,有功能限制。

首先用PEID查壳为ASProtect 2.1x SKE -> Alexey Solodovnikov,此程序由于没有stolen code ,所以脱壳比较简单。

      脱壳的部分在这里就不介绍了,感兴趣的可以去网上搜,这方面的教程和资料还是比较丰富的。
下面就开始进入正题:
   OD加载程序,停在OEP处
   04754AF4 >/$   55             push     ebp    //OEP
   04754AF5   |.   8BEC           mov      ebp, esp
   04754AF7   |.   83C4 EC        add      esp, -14
   04754AFA   |.   33C0           xor      eax, eax
   04754AFC   |.   8945 EC        mov      dword ptr [ebp-14], eax
   04754AFF   |.   B8 743D7504    mov      eax, 04753D74
   04754B04   |.   E8 3F34A4FF    call     04197F48          //关键Call带加密狗的,会把一些测试狗的模块放在前面
   04754B09   |.   33C0           xor      eax, eax
   04754B0B   |.   55             push     ebp
   04754B0C   |.   68 AD4B7504    push     04754BAD
   04754B11   |.   64:FF30        push     dword ptr fs:[eax]
   04754B14   |.   64:8920        mov      dword ptr fs:[eax], esp
   04754B17   |.   A1 08107604    mov      eax, dword ptr [4761008]
   04754B1C   |.   8B00           mov      eax, dword ptr [eax]
   04754B1E   |.   E8 4133AFFF    call     04247E64
   04754B23   |.   E8 44E5A3FF    call     0419306C
   04754B28   |.   48             dec      eax
   04754B29   |.   7C 42          jl       short 04754B6D
   04754B2B   |.   8D45 EC        lea      eax, dword ptr [ebp-14]
   04754B2E   |.   E8 990BA4FF    call     041956CC
   04754B33   |.   50             push     eax
   04754B34   |.   E8 9B7CDDFF    call     0452C7D4
   04754B39   |.   E8 822DA4FF    call     041978C0
   04754B3E   |.   8B55 EC        mov      edx, dword ptr [ebp-14]
   04754B41   |.   B8 84807604    mov      eax, 04768084
   04754B46   |.   E8 D50BA4FF    call     04195720
   04754B4B   |.   6A 01          push     1
   04754B4D   |.   6A 00          push     0
   04754B4F   |.   6A 00          push     0
   04754B51   |.   6A 00          push     0
   04754B53   |.   68 84807604    push     04768084
   04754B58   |.   E8 F379DDFF    call     0452C550
   04754B5D   |.   84C0           test     al, al
   04754B5F   |.   75 0C          jnz      short 04754B6D
   04754B61   |.   A1 08107604    mov      eax, dword ptr [4761008]
   04754B66   |.   8B00           mov      eax, dword ptr [eax]
   04754B68   |.   E8 A734AFFF    call     04248014
   04754B6D   |>   E8 1EE7FFFF    call     04753290
   04754B72   |.   84C0           test     al, al
   04754B74   |.   74 21          je       short 04754B97
   04754B76   |.   E8 69E3FFFF    call     04752EE4
   04754B7B   |.   E8 BCE8FFFF    call     0475343C
   04754B80   |.   E8 8BEDFFFF    call     04753910
   04754B85   |.   FF15 CC057604 call     dword ptr [47605CC]               ;   XXXXXXX.04753C54
   04754B8B   |.   A1 08107604    mov      eax, dword ptr [4761008]
   04754B90   |.   8B00           mov      eax, dword ptr [eax]
   04754B92   |.   E8 8133AFFF    call     04247F18
   04754B97   |>   33C0           xor      eax, eax
   04754B99   |.   5A             pop      edx
   04754B9A   |.   59             pop      ecx
   04754B9B   |.   59             pop      ecx
   04754B9C   |.   64:8910        mov      dword ptr fs:[eax], edx
   04754B9F   |.   68 B44B7504    push     04754BB4
   04754BA4   |>   8D45 EC        lea      eax, dword ptr [ebp-14]
   04754BA7   |.   E8 200BA4FF    call     041956CC
   04754BAC   \.   C3             retn
 
   通过试用知道软件有几个模块,试着搜索内存,查找关键字下断点,方法是点工具栏上的M进入内存页面,Ctr+B呼出搜索
   窗口,输入相关的模块名后下断点后,F9运行之,可以在我们下断的地方停下来。
   04192EC8   /$   56             push     esi
   04192EC9   |.   57             push     edi
   04192ECA   |.   89C6           mov      esi, eax
   04192ECC   |.   89D7           mov      edi, edx
   04192ECE   |.   89C8           mov      eax, ecx
   04192ED0   |.   39F7           cmp      edi, esi
   04192ED2   |.   77 13          ja       short 04192EE7
   04192ED4   |.   74 2F          je       short 04192F05
   04192ED6   |.   C1F9 02        sar      ecx, 2
   04192ED9   |.   78 2A          js       short 04192F05
   04192EDB   |.   F3:A5          rep      movs dword ptr es:[edi], dword ptr [esi] //停在这里,很明显内存数据复制
   04192EDD   |.   89C1           mov      ecx, eax
   04192EDF   |.   83E1 03        and      ecx, 3
   04192EE2   |.   F3:A4          rep      movs byte ptr es:[edi], byte ptr [esi]
   04192EE4   |.   5F             pop      edi
   04192EE5   |.   5E             pop      esi
   04192EE6   |.   C3             retn
 
   单步调试回到外部调用函数,来到如下一段函数中,看到下面一段函数,突然觉得豁然开朗,
 
   0435524C   /$   55             push     ebp
   0435524D   |.   8BEC           mov      ebp, esp
   0435524F   |.   83C4 F0        add      esp, -10
   04355252   |.   B8 64507604    mov      eax, 04765064
   04355257   |.   BA 3C583504    mov      edx, 0435583C
   0435525C   |.   E8 BF04E4FF    call     04195720
   04355261   |.   C605 68507604>mov      byte ptr [4765068], 33       //模块ID号
   04355268   |.   C605 69507604>mov      byte ptr [4765069], 0        //我手中没有狗,将它改为1试试,下面同理改之
   0435526F   |.   B8 6C507604    mov      eax, 0476506C
   04355274   |.   BA 54583504    mov      edx, 04355854
   04355279   |.   E8 A204E4FF    call     04195720
   0435527E   |.   C605 70507604>mov      byte ptr [4765070], 34
   04355285   |.   C605 71507604>mov      byte ptr [4765071], 0
   0435528C   |.   B8 74507604    mov      eax, 04765074
   04355291   |.   BA 6C583504    mov      edx, 0435586C
   04355296   |.   E8 8504E4FF    call     04195720
   0435529B   |.   C605 78507604>mov      byte ptr [4765078], 35
   043552A2   |.   C605 79507604>mov      byte ptr [4765079], 0
   043552A9   |.   B8 7C507604    mov      eax, 0476507C
   043552AE   |.   BA 84583504    mov      edx, 04355884
   043552B3   |.   E8 6804E4FF    call     04195720
   043552B8   |.   C605 80507604>mov      byte ptr [4765080], 36
   043552BF   |.   C605 81507604>mov      byte ptr [4765081], 0
   043552C6   |.   B8 84507604    mov      eax, 04765084
   043552CB   |.   BA 98583504    mov      edx, 04355898                     ;   ASCII "审核模块"
   043552D0   |.   E8 4B04E4FF    call     04195720
   043552D5   |.   C605 88507604>mov      byte ptr [4765088], 37
   043552DC   |.   C605 89507604>mov      byte ptr [4765089], 0
   043552E3   |.   B8 8C507604    mov      eax, 0476508C
   043552E8   |.   BA AC583504    mov      edx, 043558AC
   043552ED   |.   E8 2E04E4FF    call     04195720
   043552F2   |.   C605 90507604>mov      byte ptr [4765090], 38
   043552F9   |.   C605 91507604>mov      byte ptr [4765091], 0
   04355300   |.   B8 94507604    mov      eax, 04765094
   04355305   |.   BA C4583504    mov      edx, 043558C4
   0435530A   |.   E8 1104E4FF    call     04195720
   0435530F   |.   C605 98507604>mov      byte ptr [4765098], 39
   04355316   |.   C605 99507604>mov      byte ptr [4765099], 0
   0435531D   |.   B8 9C507604    mov      eax, 0476509C
   04355322   |.   BA DC583504    mov      edx, 043558DC
   04355327   |.   E8 F403E4FF    call     04195720
   0435532C   |.   C605 A0507604>mov      byte ptr [47650A0], 3A
   04355333   |.   C605 A1507604>mov      byte ptr [47650A1], 0
   0435533A   |.   B8 A4507604    mov      eax, 047650A4
   0435533F   |.   BA F4583504    mov      edx, 043558F4                     ;   ASCII "国际统计模块"
   04355344   |.   E8 D703E4FF    call     04195720
   04355349   |.   C605 A8507604>mov      byte ptr [47650A8], 3B
   04355350   |.   C605 A9507604>mov      byte ptr [47650A9], 0
   04355357   |.   B8 AC507604    mov      eax, 047650AC
   0435535C   |.   BA 0C593504    mov      edx, 0435590C
   04355361   |.   E8 BA03E4FF    call     04195720
   04355366   |.   C605 B0507604>mov      byte ptr [47650B0], 41
   0435536D   |.   C605 B1507604>mov      byte ptr [47650B1], 0
   04355374   |.   B8 B4507604    mov      eax, 047650B4
   04355379   |.   BA 24593504    mov      edx, 04355924                     ;   ASCII "国际审核模块"
   0435537E   |.   E8 9D03E4FF    call     04195720
   04355383   |.   C605 B8507604>mov      byte ptr [47650B8], 42
   0435538A   |.   C605 B9507604>mov      byte ptr [47650B9], 0
   04355391   |.   B8 BC507604    mov      eax, 047650BC
   04355396   |.   BA 3C593504    mov      edx, 0435593C
   0435539B   |.   E8 8003E4FF    call     04195720
   043553A0   |.   C605 C0507604>mov      byte ptr [47650C0], 4D
   043553A7   |.   C605 C1507604>mov      byte ptr [47650C1], 0
   043553AE   |.   33C9           xor      ecx, ecx
   043553B0   |.   B2 01          mov      dl, 1
   043553B2   |.   A1 E88B2D04    mov      eax, dword ptr [42D8BE8]
   043553B7   |.   E8 14DEF8FF    call     042E31D0
   ......
   改好后,接着向下走,通过反复多次调试,确定如下位置
   ......
   04753C54   /$   A1 98097604    mov      eax, dword ptr [4760998]
   04753C59   |.   C600 2D        mov      byte ptr [eax], 2D
   04753C5C   |.   A1 500B7604    mov      eax, dword ptr [4760B50]
   04753C61   |.   BA 143D7504    mov      edx, 04753D14                                ;   ASCII "yyyy-mm-dd"
   04753C66   |.   E8 B51AA4FF    call     04195720
   04753C6B   |.   A1 08107604    mov      eax, dword ptr [4761008]
   04753C70   |.   8B00           mov      eax, dword ptr [eax]
   04753C72   |.   BA 283D7504    mov      edx, 04753D28                                ; 
   04753C77   |.   E8 783CAFFF    call     042478F4
   04753C7C   |.   8B0D 08107604 mov      ecx, dword ptr [4761008]                     ;   xxx.047633E8
   04753C82   |.   8B09           mov      ecx, dword ptr [ecx]
   04753C84   |.   B2 01          mov      dl, 1
   04753C86   |.   A1 209A4B04    mov      eax, dword ptr [44B9A20]
   04753C8B   |.   E8 488BA6FF    call     041BC7D8
   04753C90   |.   8B15 14127604 mov      edx, dword ptr [4761214]                     ;   xxx.04767C94
   04753C96   |.   8902           mov      dword ptr [edx], eax
   04753C98   |.   8B0D 2C107604 mov      ecx, dword ptr [476102C]                     ;   xxx.04767E68
   04753C9E   |.   A1 08107604    mov      eax, dword ptr [4761008]
   04753CA3   |.   8B00           mov      eax, dword ptr [eax]
   04753CA5   |.   8B15 C4305704 mov      edx, dword ptr [45730C4]                     ;   xxx.04573110
   04753CAB   |.   E8 D441AFFF    call     04247E84
   04753CB0   |.   8B0D 900B7604 mov      ecx, dword ptr [4760B90]                     ;   xxx.047654D0
   04753CB6   |.   A1 08107604    mov      eax, dword ptr [4761008]
   04753CBB   |.   8B00           mov      eax, dword ptr [eax]
   04753CBD   |.   8B15 6CEF3704 mov      edx, dword ptr [437EF6C]                     ;   xxx.0437EFB8
   04753CC3   |.   E8 BC41AFFF    call     04247E84
   04753CC8   |.   A1 08107604    mov      eax, dword ptr [4761008]
   04753CCD   |.   8B00           mov      eax, dword ptr [eax]
   04753CCF   |.   E8 1C40AFFF    call     04247CF0
   04753CD4   |.   E8 9BFCFFFF    call     04753974
   04753CD9   |.   A1 68067604    mov      eax, dword ptr [4760668]            
   04753CDE   |.   8038 00        cmp      byte ptr [eax], 0                     //关键点1
   04753CE1   |.   75 05          jnz      short 04753CE8
   04753CE3   |.   E8 94FEFFFF    call     04753B7C
   04753CE8   |>   A1 080B7604    mov      eax, dword ptr [4760B08]
   04753CED   |.   E8 9244BFFF    call     04348184
   04753CF2   |.   E8 51FCFFFF    call     04753948
   04753CF7   |.   E8 70F3A3FF    call     0419306C
   04753CFC   |.   48             dec      eax
   04753CFD   |.   7C 06          jl       short 04753D05
   04753CFF   |.   E8 74F9FFFF    call     04753678
   04753D04   |.   C3             retn
   04753D05   |>   E8 8AFAFFFF    call     04753794
   04753D0A   \.   C3             retn
 
   04753CDE   |.   8038 00        cmp      byte ptr [eax], 0                     //关键点2
   将它改为mov   byte ptr[eax],1
   保存后, 打开弹出一程序错误窗口,无法使用。
   看来程序修改的还是有问题,打开OD来到最后修改的地方,仔细检查,发现内存
   .......
   0475AC1C   04329850   gbg2153X.04329850
   0475AC20   04329784   gbg2153X.04329784
   0475AC24   0432985C   gbg2153X.0432985C
   0475AC28   04329868   gbg2153X.04329868
   0475AC2C   04329874   gbg2153X.04329874
   0475AC30   043297D8   gbg2153X.043297D8
   0475AC34   00408D01     //最后修改处,但看看下一个地址,是不是有点相似呀,
   0475AC38   00408D00     //将它也改为408D01试试看
   0475AC3C   C08BFF0F
   0475AC40   C08B0804
   ......
 
   修改后如下:
   ......
   04753CCF   |.   E8 1C40AFFF    call     04247CF0
   04753CD4   |.   E8 9BFCFFFF    call     04753974
   04753CD9   |.   A1 68067604    mov      eax, dword ptr [4760668]
   04753CDE   |.   C600 01        mov      byte ptr [eax], 1
   04753CE1       C640 04 01     mov      byte ptr [eax+4], 1
   04753CE5   |.   90             nop
   04753CE6   |.   90             nop
   04753CE7   |.   90             nop  
 
***********************************************************************************
保存程序并退出,再次运行程序,程序以注册版运行,无功能限制。
至此,程序破解完成。

经验总结:
   Asprotect的壳是有名的强壳,但是作者在加这壳的时候没有完全应用保护功能,所以脱起来相对简单。 ROCKEY4ND加密狗上也有很多的保护措施没有应用到位,所以破解相对来说也比较轻松!

上一篇:没有了
下一篇:以记事本为例给程序添加启动窗口
X

点击这里给我发消息
微信号:crackgou