- UID
- 2
注册时间2004-12-1
阅读权限255
最后登录1970-1-1
总坛主
TA的每日心情 | 开心 2024-12-1 11:04 |
---|
签到天数: 12 天 [LV.3]偶尔看看II
|
特别说明:根据网友强烈要求~~特编写~继[PYG算法入门]系列之后的又一算法系列,希望大家学有所成
教程约定:出于版权考虑~全部采用2008年之前的老版本软件做试验~ 仅做研究学习!
【破文标题】奇门遁甲演义CASR 10.31 算法分析
【破文作者】飘云[P.Y.G]
【作者主页】https://www.chinapyg.com
【破解平台】WinXp
【破解工具】PEiD0.94、OllyDbg
【作者邮箱】[email protected]
【软件名称】奇门遁甲演义CASR 10.31
【软件大小】1004KB
【原版下载】http://www.onlinedown.net/soft/22167.htm
【软件简介】恒古星旋中心商城精心推出『奇门遁甲演义』面向广大奇门爱好者
一、精致的经典盘图
完全仿照中国古代的奇门活盘并有所发展,盘图上每一块元素均可以点击查看说明或分析。另外还提供便于复制和传播的多种风格的纯文本局图
二、众多的奇门类型
支持拆补时家奇门、置闰拆补奇门、日家奇门、月家奇门、年家奇门一共五种奇门起局
三、广阔的时间支持
支持1901-2050年共150年时间,完全满足绝大多数用户的需要
四、计算机预测功能
计算机能够自行运用相应的奇门原理进行相关的课题预测,例如彩票、大盘、失盗等等,还可以看计算机的奇门推理过程
五、详尽的古今注语
1080格局的每一格局后均有详尽的现代注解和古注语,恒古星旋中心商城的作者们是将23万字硬敲进了程序,程序自动用彩色将常见的吉格凶格标明以便用户清楚看到
六、时间搜索功能
输入你所要搜索的要求,例如正北有奇门、吉星;天遁;青龙回首等等,程序能自动在设定的时间段内搜索出所有符合条件的时间
七、简洁的方位吉凶
将各个方位的吉凶程度计算机分析后用-8到18进行了27梯度量化,并用相应的颜色表示,便于用户及时快速知道各方吉凶
八、时间调整功能
运用时间调整技术将北京时间调为本地时间,使预测更加精确,内有中国各大城市一年24个半月的日出时间表直接选取即可,也可按照方法自行调整
九、完善的售后服务
一次注册终身免费升级,所有问题均在24小时内得到答复。
【破解过程】
直逼主体算法(别问我怎么来的,不明白的话查看原来的算法教程~~~):
0040CED4 |>push ecx
0040CED5 |>push edx
0040CED6 |>push 00437DF4 ; qmdjyy10
0040CEDB |>mov ecx, esi
0040CEDD |>call 0040D1C0 ; 计算"qmdjyy10" ASCII码总和 设为Sum1
0040CEE2 |>lea eax, dword ptr [esp+38]
0040CEE6 |>lea ecx, dword ptr [esp+60]
0040CEEA |>push eax
0040CEEB |>lea edx, dword ptr [esp+44]
0040CEEF |>push ecx
0040CEF0 |>push edx
0040CEF1 |>mov ecx, esi
0040CEF3 |>call 0040D1C0 ; 计算用户名前12位ASCII码总和 设为Sum2
0040CEF8 |>mov edi, 00437DF4 ; qmdjyy10
0040CEFD |>or ecx, FFFFFFFF ; ecx 用户名长度
0040CF00 |>xor eax, eax ; EAX清零初始化
0040CF02 |>repne scas byte ptr es:[edi]
0040CF04 |>not ecx
0040CF06 |>cmp ecx, 0C ; 上面计算 小于 0x0C则跳 这里ECX = 9
0040CF09 |>jle short 0040CF10
0040CF0B |>mov ecx, 0C ; 否则ECX = 0x0C
0040CF10 |>push ebp
0040CF11 |>xor edi, edi ; EDI清零初始化
0040CF13 |>lea ebp, dword ptr [ecx+1]
0040CF16 |>lea esi, dword ptr [esp+64]
0040CF1A |>/mov eax, edi
0040CF1C |>|cdq ; 把EAX中的字的符号扩展到EDX中去
0040CF1D |>|idiv ecx ; 商存放EAX,余数存放EDX
0040CF1F |>|inc edx ; edx+1 设为变量i
0040CF20 |>|cmp edx, ebp
0040CF22 |>|jge short 0040CF39
0040CF24 |>|mov ebx, ebp ; ebx = ebp = 10
0040CF26 |>|lea eax, dword ptr [esp+edx*4+B0]
0040CF2D |>|sub ebx, edx ; ebx-edx 作为循环次数
0040CF2F |>|/mov edx, dword ptr [eax] ; 从"qmdjyy10"字符串中 第i位起取逐位ASCII送edx
0040CF31 |>||add eax, 4 ; 不解释了,自己看一下内存就知道如何要+4了
0040CF34 |>||xor dword ptr [esi], edx ; 和用户名第i位ASCII异或,并覆盖第一位ASCII 最终结果设为Xor1
0040CF36 |>||dec ebx ; 循环次数减1
0040CF37 |>|\jnz short 0040CF2F
0040CF39 |>|mov eax, dword ptr [esp+40] ; Sum1
0040CF3D |>|mov ebx, dword ptr [esp+3C] ; Sum2
0040CF41 |>|mov edx, dword ptr [esi] ; Xor1
0040CF43 |>|sub eax, ebx ; Sum1 - Sum2
0040CF45 |>|xor eax, edx ; (Sum1 - Sum2) xor Xor1
0040CF47 |>|mov ebx, 1A ; ebx = 0x1A
0040CF4C |>|cdq
0040CF4D |>|xor eax, edx
0040CF4F |>|add esi, 4
0040CF52 |>|sub eax, edx
0040CF54 |>|cdq
0040CF55 |>|idiv ebx ; 只关心余数EDX中的内容
0040CF57 |>|add dl, 41 ; 0x41是什么??去查ASCII表吧! 是 'A',加上这个的意思就是保持输出的内容为字符~~~ 不知道的去恶补一下基础之基础~
0040CF5A |>|mov byte ptr [esp+edi+2C], dl ; 保存结果
0040CF5E |>|inc edi ; edi + 1
0040CF5F |>|cmp edi, 0C ; 循环12次,别想了,注册码是12位
0040CF62 |>\jl short 0040CF1A
【算法总结】
1.取特征码"qmdjyy10" ASCII总和,设为Sum1;
2.取用户名前12位ASCII总和,设为Sum2;
3.采用两个循环生成注册码:
外循环:12次,主要控制内循环中的变量i
内循环:10 - i 次~~~ 特征码第I位开始逐位和ASCII第i位进行异或运算并覆盖之,最终结果设为XOR1;
4.(Sum1 - Sum2) xor XOR1运算;
5.一系列的扩张、取于运算;
6.注册码生成
【算法注册】
我只贴出几个函数和框架,别偷懒,一起玩,根据算法,把循环部分完成之!!只要你拼接起来,不难吧?以后的注册机代码大都会这样做!- {-------------------------------------------------------------------------------
- 过程名: Sum_Ascii
- 作用: 计算字符串的ASCII总和
- 作者: piaoyun
- 日期: 2008.10.17
- 参数: str:string
- 返回值: Integer
- -------------------------------------------------------------------------------}
- function Sum_Ascii(str:string):Integer;
- var
- i:integer;
- begin
- Result := 0;
- for i := 1 to Length(str) do Result := Result + byte(str[i]);
- end;
- {-------------------------------------------------------------------------------
- 过程名: ASM_Fun
- 作用: 算法分析中的那一系列头晕的东西,让它来处理~~~
- 作者: piaoyun
- 日期: 2008.10.17
- 参数: sum1,sum2,xor1:integer
- 返回值: Char
- -------------------------------------------------------------------------------}
- function ASM_Fun(sum1,sum2,xor1:integer):Char;
- var
- temp:Char;
- begin
- asm
- pushad
- xor eax,eax
- xor ebx,ebx
- xor edx,edx
- mov eax, sum1
- mov ebx, sum2
- mov edx, xor1
- sub eax, ebx
- xor eax, edx
- mov ebx, $1A
- cdq
- xor eax, edx
- add esi, 4
- sub eax, edx
- cdq
- idiv ebx
- add dl, $41
- mov temp,dl
- popad
- end;
- Result := temp;
- end;
- procedure TForm1.btnOkClick(Sender: TObject);
- var
- i,j,k:integer;
- sum1,sum2,xor1:integer;
- name:string;
- sn:string;
- const
- qmdj = 'qmdjyy10';
- begin
- if edtName.Text <> '' then
- begin
- name := edtName.Text;
- sum1 := Sum_Ascii(qmdj);
- sum2 := Sum_Ascii(leftStr(edtName.Text,12));
-
- //-----------------------------------
- for i := 1 to 12 do
- begin
- //自己动脑筋拼接
- for j := k to 10 do
- begin
- //自己动脑筋拼接
- end;
- sn := sn + ASM_Fun(sum1,sum2,xor1);
- end;
- //输出注册码
- edtSn.Text := sn;
- //------------------------------------
- end
- else
- ShowMessage('请输入用户名!');
- end;
复制代码 【版权声明】 本文原创于P.Y.G官方,纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢! |
|