能力值:
( LV9,RANK:160 )
|
-
-
2 楼
呵呵~~~
要加精我认为致少要对CH的一个算法要分析出来~~~~~~~~~
写出算法注册机吧!!
因为CH就给我们大家来研究算法和软件保护强度写的一个测试程序
只是个人意见不要认真喔 ~~~~~~~  
|
能力值:
( LV8,RANK:120 )
|
-
-
3 楼
呵呵,我么那么小气,不会因为别人的一点意见就怒不可遏,暴跳如雷
|
能力值:
( LV7,RANK:110 )
|
-
-
4 楼
没有自效验哟。
/*4014A2*/ jnz Xnoos_1.00401489
/*4014A4*/ mov eax,dword ptr ss:[esp+0x14]
/*4014A8*/ mov ecx,dword ptr ss:[esp+0xC]
/*4014AC*/ push eax
/*4014AD*/ push ecx
/*4014AE*/ call dword ptr ds:[<&MSVCRT._mbscmp>]
/*4014B4*/ add esp,0x8
/*4014B7*/ test eax,eax
/*4014B9*/ jnz Xnoos_1.004014CD
/*4014BB*/ push eax
/*4014BC*/ push noos_1.0040313C
/*4014C1*/ push noos_1.0040302C
/*4014C6*/ mov ecx,ebp
/*4014C8*/ call <jmp.&MFC42.#CWnd::MessageBoxA_4224>
/*4014CD*/ lea ecx,dword ptr ss:[esp+0x1C]
只是这句/*4014BB*/ push eax,
如果你只改/*4014B9*/ jnz Xnoos_1.004014CD
跳转的话,比较函数会返回-1, 也就是这个EAX是0xFFFFFFFF,
那么把这个eax做MessageBox的参数会错误所以不会弹出对话框。
不过楼主的让它自己比较自己还是不错方便。
|
能力值:
( LV7,RANK:100 )
|
-
-
5 楼
学习了还能这么改,但是这样改为什么不会触发自校检
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我觉得很比较!要么是返回1,要么0,要么-1!在这之前可以把他们改改顺序!
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
这个方法不错,值得学习!
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
楼主辛苦了,支持一下
|
能力值:
( LV8,RANK:120 )
|
-
-
9 楼
也许这个CM真的没有自校验。不过我不明白的是为什么在修改了关键跳转之后,程序会自动退出!!! 顺便回答一下5楼的问题,这样修改为什么不触发自校验,我也不知道,但是我想理论上应该是在修改了程序关键代码之后都会触发自检验,而我的修改思路却没有触发自校验,所以我在帖子中说这大概CM作者的一的BUG!
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
修改关键跳位置,程序似乎没退出!
这个没有自校验,四楼分析为正解
|
能力值:
( LV8,RANK:120 )
|
-
-
11 楼
经过我的再次调试分析,修改了关键跳之后证明程序确实没有自动退出,真想  ,不过昨天我在修改了关键跳之后运行程序确实是自己退出了,好诡异啊,真想不通了,或许昨天太累,发帖时都下半夜了,或许自己修改代码的地方不对,现在想找到那句代码可就是大海捞针了!是在对不起大家,我还大言不惭的求加精!  我给大家道歉,下次我会严谨的,同时也谢谢指出我错误的大侠!
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
呵呵,谢的还可以,新手教程吧,个人心得,别把精华看的那么重
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
小菜我也下载学习下
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
/*4014B9*/ jz Xnoos_1.004014CD
/*4014BB*/ push ebp
就可以了
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
不错啊.思路很好.学习了.
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
受教了。嘿嘿。。。。。。。。。
|
能力值:
( LV3,RANK:20 )
|
-
-
17 楼
楼主这么努力的话,不支持都不行了
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
动手试试,看看效果如何
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
最后爆破后是不是这样 
貌似没有那么复杂吧?
我还没看你的破解思路呢,先自己搞了一下,只是爆破了一下。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
原来我被骗了,看来自己太菜。。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
分析分析获得注册码的计算的算法,
先利用 输入的注册码作为srand的种子,
然后循环利用rand随机生成一个数,
用这个数模上26得到余数,然后再A-----Z这个26个字母中找到相应的字母,
每次获得的这个字母,都放在内存中。。
最后把这个生成的一连串的字母,与起始的注册框中的第一行的字母比较。。。
算法大概是这样的。。
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
有个问题就是,上边的算法的srand()函数的种子的来源的算法没搞清楚
只是知道如果输入的注册码如果开头是数据就取出开头的部分作为种子
如果输入的起始位置不是数字,那么就把0x383930作为srand()函数的种子。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
004014AC . 50 push eax ; /s2
004014AD . 51 push ecx ; |s1
004014AE . FF15 BC214000 call dword ptr [<&MSVCRT._mbscmp>] ; \_mbscmp
=======================
全部改成push eax 不得了么?
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
确实厉害
|
|
|