能力值:
( LV9,RANK:160 )
2 楼
确实比较简单
GoodGavin
107629
能力值:
( LV2,RANK:10 )
3 楼
都不敢下。。动不动就要扣钱还是只能再忍耐几天俺变会员了再来
能力值:
(RANK:600 )
4 楼
下来看下,先顶一个!!
能力值:
( LV2,RANK:10 )
5 楼
本来就简单啊,给点意见好吗?初来乍到,还什么都不会!
能力值:
( LV9,RANK:160 )
6 楼
CM提升难度的话从两个方面了,一个是反调试,另一个是算法。
自己尝试下自己的CM,就会发现可以从哪里改进以增加难度,慢慢提高。
对本CM提个意见:这个是Debug版的,下回发Release版的吧。
能力值:
( LV9,RANK:200 )
7 楼
BOOL Is_API_breaked()
{
DWORD address = GetProcAddress(LoadLibraryA("user32.dll"), "GetDlgItemTextA");
if(0xcc==*(BYTE *)address) return true;
else return false;
}
int main()
{
if(Is_API_breaked())
{
HWND hwnd = FindWindowA("OllyDBG.EXE", NULL);
if(NULL!=hwnd) SendMessageA(hwnd, WM_CLOSE, NULL, NULL);
}
DialogBoxParamA(....);
}
1. FindWindowA的第一个参数应该修改为"OllyDBG".
2. DialogBoxParamA创建的模态对话框只能使用EndDialog结束。而楼主使用的是DestroyWindow.
/*
msdn : EndDialog Function
Dialog boxes created by the DialogBox, DialogBoxParam, DialogBoxIndirect, and DialogBoxIndirectParam functions must be destroyed using the EndDialog function.
*/
3. 使用 F(UserName)==Serial 的验证方式直接暴露了真正的注册码。
能力值:
( LV9,RANK:160 )
8 楼
请教楼上咋发现“ FindWindowA的第一个参数应该修改为"OllyDBG".”的,我都没有意识到他有反调试。。。
能力值:
( LV2,RANK:10 )
9 楼
新来的,报个到
能力值:
( LV5,RANK:75 )
10 楼
学习一下
能力值:
( LV2,RANK:10 )
11 楼
6楼的说的对,这次尝试了一下反调试,不过好像没用对,没用什么算法,简单的处理了一下。记住了,下次发Release版的。
7楼的大哥太感谢了,说的太好了,这次是直接比较的,没什么难度。主要是想试试反调试,不过还是不太懂!
能力值:
( LV9,RANK:160 )
12 楼
把代码发上来看看,或许提建议更容易些。。
在学着看代码,正好用这个简单的练习一下,写个Keygen:
#include <stdio.h> #include <string.h> #include <windows.h> int main() { int i, j, sum; char name[100]; int keyTable[9] = {12, 10, 21, 9, 13, 11, 10, 8, 0}; memset(name, 0, 100); printf("Please input your name: "); scanf("%s", name); sum = 0; for(i = 3, j = 0; i != (signed)strlen(name); i++, j++) { if(j == 8) { j = 0; } sum += name * keyTable[j]; } for(i = 10000; i != 10010; i++) { sum += i; } printf("The serial:%d\n", sum); system("PAUSE"); return 0; }
能力值:
( LV2,RANK:10 )
13 楼
改了两处,提示成功。不知道有没有被骗?
上传的附件:
能力值:
( LV2,RANK:10 )
14 楼
can u all talk in english plz?
能力值:
( LV9,RANK:160 )
15 楼
Are you an American?
能力值:
( LV2,RANK:10 )
16 楼
嗯!源文件已发。你看看,我主要想拦截CC断点,该怎样才好!
上传的附件:
能力值:
( LV2,RANK:10 )
17 楼
[QUOTE=wuzhidao;771046]改了两处,提示成功。不知道有没有被骗?
[/QUOTE]
没被骗,你骗我啊!
能力值:
( LV9,RANK:160 )
18 楼
你拦截的CC断点是有效的啊,只是只会在程序启动时拦截,可是那个时候程序根本没有被下断点啊。
拦截的位置可以调整一下
然后里面HWND hWnd =::FindWindow("OllyDBG",NULL);的意义好像不大,很多OD的名字不完全是“OllyDBG”,我感觉绝大部分情况下不会导致OD退出。
另外可以对成功提示的字符串进行处理,否则直接查找字符串就定位关键点了,根本就不需要去下GetDlgItemText断点
能力值:
( LV2,RANK:10 )
19 楼
能不能按你的思想改进一下,把源码给我看看!thanks
能力值:
( LV4,RANK:50 )
20 楼
瞎猫撞到“死耗子”,看样子我人品比较好。功力不到家,对整个流程不太懂!观摩学习!
username:erlong
pwd:104640
能力值:
( LV4,RANK:50 )
21 楼
这个确实不太管用,好多修改版的OD名字都不是OllyDBG。不过没写过cm,对反调试也不太懂,观望学习!
能力值:
( LV9,RANK:160 )
22 楼
能力值:
( LV2,RANK:10 )
23 楼
看了你的程序,写得不错,不过我都没怎么看懂,我水平有限哈!我自认为和我开始的那个相比没怎加多少难度。里面还是直接比较序列号,序列号直接就看到!我觉得在序列号计算出来后比较的时候下点功夫难度就会增加不少,还有我还是想在调试的时候直接把OD给干掉,不知道可行不!
还得好好学习啊 !
能力值:
( LV9,RANK:160 )
24 楼
干掉OD当然是可以的,论坛里很多CM都可以,只是原来那种方法不大管用,需要改进!
好久不写代码了。。手生的不行。。
改的目的只是把你对断点检测的位置改了一下,然后把注册成功的提示加密存放,防止字符串查找直接定位关键代码。没有更改注册算法具体的东西。(刚开始改的有些问题,对检测到的断点处理无效,后来更新附件了,不知道你尝试的是哪一个.) “序列号计算出来后比较的时候下点功夫难度就会增加不少”这样确实会给破解带来些难度
另:f(name) = f(serial)的方式就不会直接出现明码序列号。
能力值:
( LV2,RANK:10 )
25 楼
学习了!