某工程造价管理系统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 欢迎dttom多多发布狗壳分析文章~:) 就是搜索“审核模块”或“国际统计模块”等都可以找到地方,地址“04753CDE ”处的修改是我调试跟出来的。 “通过试用知道软件有几个模块,试着搜索内存,查找关键字下断点,方法是点工具栏上的M进入内存页面,Ctr+B呼出搜索窗口,输入相关的模块名后下断点后,F9运行之,可以在我们下断的地方停下来。”
能否说的详细点呀看不懂 多谢了 呵呵!一看爆破点就知道是广联达GBQ啦!
感谢分享! 广联达GBG:lol 这个软件貌似写的不咋滴啊 我接错过一套商业软件同样使用的rock4的狗狗 偶就是搞不定~~ LZ说的这套软件我应该没啥问题~~ 那套 天#力#卓#越的系统~~ 中间加seh了 目前还米学会当跟到seh后改咋处理~~ 最近有一次 偶尔 跟成功了一次seh后来也不知道咋整的~~ 在SEH处理函数入口处下断点 楼上的朋友,可以发给我试试
[ 本帖最后由 wgz001 于 2009-2-12 20:51 编辑 ] :lol 感谢LZ分享 不好意思,看来我犯规了:)
页:
[1]
2