首页
社区
课程
招聘
[旧帖] [原创]某工程造价管理系统Asprotect2.11+Rockey4破解小记 0.00雪花
发表于: 2009-2-11 00:49 4962

[旧帖] [原创]某工程造价管理系统Asprotect2.11+Rockey4破解小记 0.00雪花

2009-2-11 00:49
4962
【文章标题】: 某工程造价管理系统Asprotect2.11+Rockey4破解小记
【文章作者】: dttom
【作者邮箱】: dttom2006@gmail.com
【作者主页】: http://hi.baidu.com/dttom
【下载地址】: 自己搜索下载
【加壳方式】: Asprotect2.11
【保护方式】: Asprotect2.11+Rockey4(加密狗)
【使用工具】: Ollydbg,dogcheck,Peid,ImportREC
【操作平台】: WinXP SP3
【软件介绍】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
     这是我第一次破解软件,很多是靠猜,然后试出来的。各位大牛就不用看,好了废话不说,言归正转,这几天接触到某工程造价管理系统软件,首先打开软件无狗能够以学习版方式打开有总金额限制,接着打开PEID用VerA一测采用了Asprotect2.11 加壳保护,运用dogCheck测了一下使用的是飞天诚信(FTSafe) Rockey 4 加密狗(有驱型)的方式保护,由于手中无狗,破解思路基本是先脱壳,然后暴破关键点。
    思路有了下面开工干活了,Asprotect壳我一直没空学习,借着这个机会查出一堆Asprotect壳的资料学习了解一下, VolX大牛的ASProtect脚本太强大了,可能商业软件的原因,软件没stolen code用脚本很容易就脱掉了。
    脱壳后,主要通过动态调试找到关键点暴破。
  打开Ollydbg来到OEP
  04754AF4 >/$  55            push    ebp
  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                    //关键点,我猜的
  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                    //关键点,我猜的
  将它改为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壳,查了相关资料,本着学习的目的借着这个机会多学的东西,花了一些时间。运用VolX大牛的脚本很就可以脱掉Asprotect壳,再用ImportREC修复一下输入表。Rockey4狗由于从来没接触过,就先上飞天的网站下了Rockey4的开发手册了解了一下。其实,下面暴破也没用着。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年02月11日 0:43:15

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
ASCII码在IDA里显示是乱码,该怎么处理?
2009-2-11 01:29
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
R 命令一下
2009-2-11 01:46
0
雪    币: 220
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主说的是江苏的智慧软件?
我有正版狗提供给你试验
2009-4-9 15:16
0
游客
登录 | 注册 方可回帖
返回
//