好友
阅读权限10
听众
最后登录1970-1-1
|
西氏
发表于 2009-9-12 22:27
本帖最后由 西氏 于 2009-9-12 22:28 编辑
【文章标题】: 刚学习断点,试着破解peace2008的cm20090819
【文章作者】: 西氏
【软件名称】: CM20090819【柿子不软系列之大叔的草莓】
【下载地址】: http://www.52pojie.cn/thread-30934-1-1.html
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
开始走按钮路线,以为时比较字符串的。
bp __vbaStrCmp 下断
F9 运行,复制用户名xishi 粘贴注册码xishi,被断下来了,继续f9.两次之后,可以注册了,点击注册又被断下来了
这时alt+f9,返回,
00402BF6 . 8B1D 58114000 mov ebx,dword ptr ds:[<&MSVBVM60.__vbaFr>; msvbvm60.__vbaFreeStr//返回到这里,下断
00402BFC . 8BF8 mov edi,eax
00402BFE . F7DF neg edi
00402C00 . 1BFF sbb edi,edi
00402C02 . 8D4D E8 lea ecx,dword ptr ss:[ebp-18]
00402C05 . 47 inc edi
00402C06 . F7DF neg edi
00402C08 . FFD3 call ebx ; <&MSVBVM60.__vbaFreeStr>
然后不停的跟,发现怎么都跟不到关键。
后来下了看了看发现时之后自然的变成了注册了,说明那个点击注册的是骗人的,真猥琐,害得我搞了2个小时。
那想了想应该又字符串传递,因为原来是“点击注册”后来换成 注册成功之类的。
所以下了字符串传递。__vbaStrVarMove 和__vbaStrMove这两个断点。点黏贴注册码的时候断下了。继续f9直到最后一次出现断下来的函数为止
我的电脑上断了六次。所以选第五次。(因为这样才离“点击注册”换成 ”注册成功“最近,前面可能是些其它变量的传递,要先测试才能知道)
ALT+F9返回
00403D7B . 50 push eax //返回到这里了。
00403D7C . 8B4D DC mov ecx,dword ptr ss:[ebp-24]
00403D7F . 51 push ecx
00403D80 . FF15 84104000 call dword ptr ds:[<&MSVBVM60.__vbaStrCm>; msvbvm60.__vbaStrCmp
00403D86 . F7D8 neg eax
00403D88 . 1BC0 sbb eax,eax
00403D8A . 40 inc eax
00403D8B . F7D8 neg eax
00403D8D . 66:8985 3CFFF>mov word ptr ss:[ebp-C4],ax
下面是很多相似的也不知道是什么(等高手来解答)
00403A5D . 8B95 34FFFFFF mov edx,dword ptr ss:[ebp-CC]
00403A63 . 52 push edx
00403A64 . FF91 A0000000 call dword ptr ds:[ecx+A0]
00403A6A . DBE2 fclex
00403A6C . 8985 30FFFFFF mov dword ptr ss:[ebp-D0],eax
00403A72 . 83BD 30FFFFFF>cmp dword ptr ss:[ebp-D0],0
00403A79 . 7D 26 jge short CM090819.00403AA1
00403A7B . 68 A0000000 push 0A0
00403A80 . 68 24254000 push CM090819.00402524
走到这个时候
00403D9D . 0FBF95 3CFFFF>movsx edx,word ptr ss:[ebp-C4]
00403DA4 . 85D2 test edx,edx
00403DA6 0F84 05070000 je CM090819.004044B1 //关键跳
00403DAC . C745 FC 0F000>mov dword ptr ss:[ebp-4],0F
00403DB3 . 8B45 08 mov eax,dword ptr ss:[ebp+8]
00403DB6 . 8B08 mov ecx,dword ptr ds:[eax]
00403DB8 . 8B55 08 mov edx,dword ptr ss:[ebp+8]
00403DBB . 52 push edx
00403DBC . FF91 00030000 call dword ptr ds:[ecx+300]
00403DC2 . 50 push eax
00403DC3 . 8D45 C4 lea eax,dword ptr ss:[ebp-3C]
00403DC6 . 50 push eax
上面的关键跳到这(不要跟)
004044AE . 83C4 14 add esp,14
004044B1 > EB 10 jmp short CM090819.004044C3
004044B3 > C745 FC 14000>mov dword ptr ss:[ebp-4],14
004044BA . 8B45 08 mov eax,dword ptr ss:[ebp+8]
004044BD . 66:C740 34 FF>mov word ptr ds:[eax+34],0FFFF
004044C3 > C745 F0 00000>mov dword ptr ss:[ebp-10],0
004044CA . 9B wait
如果不nop掉那个关键跳的话,就在系统的领空再也回来不来了。
一直F8,又走到一个比较重要的地方,
00403F39 . 8D45 90 lea eax,dword ptr ss:[ebp-70]
00403F3C . 50 push eax ; /Length8
00403F3D . 0FBF4D D4 movsx ecx,word ptr ss:[ebp-2C] ; |
00403F41 . 51 push ecx ; |Start
00403F42 . 8D55 A0 lea edx,dword ptr ss:[ebp-60] ; |
00403F45 . 52 push edx ; |dString8
00403F46 . 8D45 80 lea eax,dword ptr ss:[ebp-80] ; |
00403F49 . 50 push eax ; |RetBUFFER
00403F4A . FF15 74104000 call dword ptr ds:[<&MSVBVM60.#632>] ; \rtcMidCharVar//f7进去看看
00403F50 . 8D4D 80 lea ecx,dword ptr ss:[ebp-80]
00403F53 . 51 push ecx
00403F54 . FF15 68104000 call dword ptr ds:[<&MSVBVM60.__vbaBoolV>; msvbvm60.__vbaBoolVar
00403F5A . 50 push eax
连进两个同样的call程序就跑飞了。
重新加载。
。
这里面又三段
00404170 . 8D55 90 lea edx,dword ptr ss:[ebp-70]
00404173 . 52 push edx ; /Length8
00404174 . 0FBF45 D4 movsx eax,word ptr ss:[ebp-2C] ; |
00404178 . 50 push eax ; |Start
00404179 . 8D4D A0 lea ecx,dword ptr ss:[ebp-60] ; |
0040417C . 51 push ecx ; |dString8
0040417D . 8D55 80 lea edx,dword ptr ss:[ebp-80] ; |
00404180 . 52 push edx ; |RetBUFFER
00404181 . FF15 74104000 call dword ptr ds:[<&MSVBVM60.#632>] ; \rtcMidCharVar
00404187 . C785 48FFFFFF>mov dword ptr ss:[ebp-B8],1
00404191 . C785 40FFFFFF>mov dword ptr ss:[ebp-C0],2
每段的值都是一样的
0012E7CC 00401188 CM090819.00401188
0012E7D0 0012E914 |RetBUFFER = 0012E914
0012E7D4 0012E934 |dString8 = 0012E934
0012E7D8 00000000 |Start = 0
0012E7DC 0012E924 \Length8 = 12E924
0012E7E0 0012E914
不知道是什么,我猜应该是中文那几个注册的字符串,还请pace2008,小生我怕怕等大鸟们出来教教小菜。不明白。
最后怎么想也不明白直接nop掉。发现竟然可以了。不过也有些问题。有时注册带空格的文件名不成功。我怀疑用户名定义的时候
是不是有个字符串限制,因为跟踪是用户名有个跟26个字母大小写比较的东东。
还有程序会溢出,用这个用户名
5394769192718247571624959933172575515731369899253164365389519226243
31135857284227248638789897216593
注册不成功,还期待高手进一步解答。
跟踪的中间还发现段这个,不知道是什么。感觉字符串比较重要的东西。
00403966 . 52 push edx
00403967 . FF15 28114000 call dword ptr ds:[<&MSVBVM60.#617>] ; msvbvm60.rtcLeftCharVar
0040396D . 8D45 90 lea eax,dword ptr ss:[ebp-70]
00403970 . 50 push eax ; /String8 = 0012E924
00403971 . 8D4D CC lea ecx,dword ptr ss:[ebp-34] ; |
00403974 . 51 push ecx ; |ARG2
00403975 . FF15 DC104000 call dword ptr ds:[<&MSVBVM60.__vbaStrVa>; \__vbaStrVarVal
0040397B . 50 push eax
0040397C . FF15 5C114000 call dword ptr ds:[<&MSVBVM60.#581>] ; msvbvm60.rtcR8ValFromBstr
00403982 . DC0D 08124000 fmul qword ptr ds:[401208]
--------------------------------------------------------------------------------
【经验总结】
不停的跟踪,不停的对比,我中间下过小生破解的文件。一打开猜恍然大悟,原来粘贴注册码的时候已经在注册了,要是一
直盯着注册那个按钮,估计累死都不知道,里面全是条件语句 case 0...3一直想跳过去也没成功。主要成果还是小生,参
考了他的爆破版。我只是把我学破解的经过写下来。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于西氏, 转载请注明作者并保持文章的完整, 谢谢!
2009年09月12日 22:21:48 |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|