dttom 发表于 2009-2-11 00:55

某工程造价管理系统Asprotect2.11+Rockey4破解小记

【文章标题】: 某工程造价管理系统Asprotect2.11+Rockey4破解小记
【下载地址】: 自己搜索下载
【加壳方式】: 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 , 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:
04754B14|.64:8920       mov   dword ptr fs:, esp
04754B17|.A1 08107604   mov   eax, dword ptr
04754B1C|.8B00          mov   eax, dword ptr
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
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
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
04754B66|.8B00          mov   eax, dword ptr
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             ;XXXXXXX.04753C54
04754B8B|.A1 08107604   mov   eax, dword ptr
04754B90|.8B00          mov   eax, dword ptr
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:, edx
04754B9F|.68 B44B7504   push    04754BB4
04754BA4|>8D45 EC       lea   eax, dword ptr
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:, dword ptr //停在这里,很明显内存数据复制
04192EDD|.89C1          mov   ecx, eax
04192EDF|.83E1 03       and   ecx, 3
04192EE2|.F3:A4         rep   movs byte ptr es:, byte ptr
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 , 33      //可能是模块ID号,我猜的
04355268|.C605 69507604>mov   byte ptr , 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 , 34
04355285|.C605 71507604>mov   byte ptr , 0
0435528C|.B8 74507604   mov   eax, 04765074
04355291|.BA 6C583504   mov   edx, 0435586C
04355296|.E8 8504E4FF   call    04195720
0435529B|.C605 78507604>mov   byte ptr , 35
043552A2|.C605 79507604>mov   byte ptr , 0
043552A9|.B8 7C507604   mov   eax, 0476507C
043552AE|.BA 84583504   mov   edx, 04355884
043552B3|.E8 6804E4FF   call    04195720
043552B8|.C605 80507604>mov   byte ptr , 36
043552BF|.C605 81507604>mov   byte ptr , 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 , 37
043552DC|.C605 89507604>mov   byte ptr , 0
043552E3|.B8 8C507604   mov   eax, 0476508C
043552E8|.BA AC583504   mov   edx, 043558AC
043552ED|.E8 2E04E4FF   call    04195720
043552F2|.C605 90507604>mov   byte ptr , 38
043552F9|.C605 91507604>mov   byte ptr , 0
04355300|.B8 94507604   mov   eax, 04765094
04355305|.BA C4583504   mov   edx, 043558C4
0435530A|.E8 1104E4FF   call    04195720
0435530F|.C605 98507604>mov   byte ptr , 39
04355316|.C605 99507604>mov   byte ptr , 0
0435531D|.B8 9C507604   mov   eax, 0476509C
04355322|.BA DC583504   mov   edx, 043558DC
04355327|.E8 F403E4FF   call    04195720
0435532C|.C605 A0507604>mov   byte ptr , 3A
04355333|.C605 A1507604>mov   byte ptr , 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 , 3B
04355350|.C605 A9507604>mov   byte ptr , 0
04355357|.B8 AC507604   mov   eax, 047650AC
0435535C|.BA 0C593504   mov   edx, 0435590C
04355361|.E8 BA03E4FF   call    04195720
04355366|.C605 B0507604>mov   byte ptr , 41
0435536D|.C605 B1507604>mov   byte ptr , 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 , 42
0435538A|.C605 B9507604>mov   byte ptr , 0
04355391|.B8 BC507604   mov   eax, 047650BC
04355396|.BA 3C593504   mov   edx, 0435593C
0435539B|.E8 8003E4FF   call    04195720
043553A0|.C605 C0507604>mov   byte ptr , 4D
043553A7|.C605 C1507604>mov   byte ptr , 0
043553AE|.33C9          xor   ecx, ecx
043553B0|.B2 01         mov   dl, 1
043553B2|.A1 E88B2D04   mov   eax, dword ptr
043553B7|.E8 14DEF8FF   call    042E31D0
......
改好后,接着向下走,通过反复多次调试,确定如下位置
......
04753C54/$A1 98097604   mov   eax, dword ptr
04753C59|.C600 2D       mov   byte ptr , 2D
04753C5C|.A1 500B7604   mov   eax, dword ptr
04753C61|.BA 143D7504   mov   edx, 04753D14                               ;ASCII "yyyy-mm-dd"
04753C66|.E8 B51AA4FF   call    04195720
04753C6B|.A1 08107604   mov   eax, dword ptr
04753C70|.8B00          mov   eax, dword ptr
04753C72|.BA 283D7504   mov   edx, 04753D28                               ;
04753C77|.E8 783CAFFF   call    042478F4
04753C7C|.8B0D 08107604 mov   ecx, dword ptr                   ;xxx.047633E8
04753C82|.8B09          mov   ecx, dword ptr
04753C84|.B2 01         mov   dl, 1
04753C86|.A1 209A4B04   mov   eax, dword ptr
04753C8B|.E8 488BA6FF   call    041BC7D8
04753C90|.8B15 14127604 mov   edx, dword ptr                   ;xxx.04767C94
04753C96|.8902          mov   dword ptr , eax
04753C98|.8B0D 2C107604 mov   ecx, dword ptr                   ;xxx.04767E68
04753C9E|.A1 08107604   mov   eax, dword ptr
04753CA3|.8B00          mov   eax, dword ptr
04753CA5|.8B15 C4305704 mov   edx, dword ptr                   ;xxx.04573110
04753CAB|.E8 D441AFFF   call    04247E84
04753CB0|.8B0D 900B7604 mov   ecx, dword ptr                   ;xxx.047654D0
04753CB6|.A1 08107604   mov   eax, dword ptr
04753CBB|.8B00          mov   eax, dword ptr
04753CBD|.8B15 6CEF3704 mov   edx, dword ptr                   ;xxx.0437EFB8
04753CC3|.E8 BC41AFFF   call    04247E84
04753CC8|.A1 08107604   mov   eax, dword ptr
04753CCD|.8B00          mov   eax, dword ptr
04753CCF|.E8 1C40AFFF   call    04247CF0
04753CD4|.E8 9BFCFFFF   call    04753974
04753CD9|.A1 68067604   mov   eax, dword ptr             
04753CDE|.8038 00       cmp   byte ptr , 0                  //关键点,我猜的
04753CE1|.75 05         jnz   short 04753CE8
04753CE3|.E8 94FEFFFF   call    04753B7C
04753CE8|>A1 080B7604   mov   eax, dword ptr
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 , 0                  //关键点,我猜的
将它改为movbyte ptr,1
保存后, 打开弹出一程序错误窗口,无法使用。
看来程序修改的还是有问题,打开OD来到最后修改的地方,仔细检查,发现内存
.......
0475AC1C04329850gbg2153X.04329850
0475AC2004329784gbg2153X.04329784
0475AC240432985Cgbg2153X.0432985C
0475AC2804329868gbg2153X.04329868
0475AC2C04329874gbg2153X.04329874
0475AC30043297D8gbg2153X.043297D8
0475AC3400408D01    //最后修改处,但看看下一个地址,是不是有点相似呀,
0475AC3800408D00    //将它也改为408D01试试看
0475AC3CC08BFF0F
0475AC40C08B0804
......

修改后如下:
......
04753CCF|.E8 1C40AFFF   call    04247CF0
04753CD4|.E8 9BFCFFFF   call    04753974
04753CD9|.A1 68067604   mov   eax, dword ptr
04753CDE|.C600 01       mov   byte ptr , 1
04753CE1      C640 04 01    mov   byte ptr , 1
04753CE5|.90            nop
04753CE6|.90            nop
04753CE7|.90            nop
......
保存后,重新打开,无学习版提示,点注册界面多了输入注册码窗口,且相关模块显示已注册。
有没有暗桩,我也没有进一步测试。

--------------------------------------------------------------------------------
【经验总结】
由于第一次接触Asprotect壳,查了相关资料,本着学习的目的借着这个机会多学的东西,花了一些时间。运用VolX大牛的
脚本很就可以脱掉Asprotect壳,再用ImportREC修复一下输入表。Rockey4狗由于从来没接触过,就先上飞天的网站下了
Rockey4的开发手册了解了一下。其实,下面暴破也没用着。

--------------------------------------------------------------------------------

                                                       2009年02月11日 0:53:42

Hmily 发表于 2009-2-11 10:07

欢迎dttom多多发布狗壳分析文章~:)

dttom 发表于 2009-2-11 08:15

就是搜索“审核模块”或“国际统计模块”等都可以找到地方,地址“04753CDE ”处的修改是我调试跟出来的。

wgz001 发表于 2009-2-11 07:22

“通过试用知道软件有几个模块,试着搜索内存,查找关键字下断点,方法是点工具栏上的M进入内存页面,Ctr+B呼出搜索窗口,输入相关的模块名后下断点后,F9运行之,可以在我们下断的地方停下来。”
能否说的详细点呀看不懂   多谢了

ssb 发表于 2009-2-11 13:43

呵呵!一看爆破点就知道是广联达GBQ啦!
感谢分享!

dttom 发表于 2009-2-11 15:57

广联达GBG:lol

璇玑凌冰 发表于 2009-2-12 12:21

这个软件貌似写的不咋滴啊 我接错过一套商业软件同样使用的rock4的狗狗 偶就是搞不定~~ LZ说的这套软件我应该没啥问题~~ 那套 天#力#卓#越的系统~~ 中间加seh了 目前还米学会当跟到seh后改咋处理~~ 最近有一次 偶尔 跟成功了一次seh后来也不知道咋整的~~

dttom 发表于 2009-2-12 16:01

在SEH处理函数入口处下断点 楼上的朋友,可以发给我试试

[ 本帖最后由 wgz001 于 2009-2-12 20:51 编辑 ]

ccoco12 发表于 2009-2-12 20:17

:lol 感谢LZ分享

dttom 发表于 2009-2-12 21:47

不好意思,看来我犯规了:)
页: [1] 2
查看完整版本: 某工程造价管理系统Asprotect2.11+Rockey4破解小记