吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4971|回复: 2
收起左侧

[分享] 算法注册机编写扫盲---第四课

[复制链接]
逆天 发表于 2009-2-17 18:46
原创作者:我要[DFCG]  
=====================================================================  

注:接第三课,我又来了,这次没有多余的话。来!就以实例接着来吧。 ^_^  

某crackme算法分析  

嘿嘿!去年年初的时候,我发过这个东东,并做了动画教学破解并介绍了内存注册机的作法。这次还是用它,不过是算法注册机及算法的内容。对我本人来说,还是有点意义的。N久没看过自己的破文了,为了这第4课,又翻出来,哈,我啊,果然是菜的不行的那种!就找软柿子下手。 ^_^  
======================================================================  

一、首先运行TRW2000指向step1.exe,然后隐藏。  
二、启动step1.exe  
三、输入注册名:woyao,注册码:7979,先不要点注册键。  
三、按Ctrl+N激活TRW2000  

  下断点命令: bpx hmemcpy → 设置万能断点  

四、按F5返回,点击注册按钮,程序被拦截,下命令:  

     bc* → 清除断点  
     pmodule → 直接进入程序领空  

五、现在再按F10键N下(找到金矿),到如下代码:  

:004011B7 E8A4120000 call 00402460 ← 这里开始取注册名  
:004011BC 59 pop ecx  
:004011BD 8BC8 mov ecx, eax ← 注册名位数入ecx  
:004011BF 83F904 cmp ecx, 00000004 ← 一定大于或等于4  
:004011C2 7D14 jge 004011D8 ← 正确就跳到004011D8  
:004011C4 6A10 push 00000010  

* Possible StringData Ref from Data Obj ->\"ERROR\"  
                                |  
:004011C6 687CB14000 push 0040B17C  

* Possible StringData Ref from Data Obj ->\"Your name must contain at least \"  
                                         ->\"4 characters! ← ?@_@?  
\  
:004011CB 684CB14000 push 0040B14C  
:004011D0 56 push esi  

* Reference To: USER32.MessageBoxA, Ord:0000h  
                                |  
:004011D1 E828900000 Call 0040A1FE  
:004011D6 EB67 jmp 0040123F  

* Referenced by a (U)nconditional or (C)onditional Jump at Address:  
|:004011C2(C)  
|  
:004011D8 33D2 xor edx, edx ← edx清零  
:004011DA 33C0 xor eax, eax ← eax清零  
:004011DC 3BC8 cmp ecx, eax ← 比较eax,ecx  
:004011DE 7E0D jle 004011ED ← 大于跳004011ED,结束运算  
* Referenced by a (U)nconditional or (C)onditional Jump at Address:  
|:004011EB(C)  
:004011E0 33DB xor ebx, ebx ← ebx清零,下面的注意看了  
:004011E2 8A5C05E4 mov bl, byte ptr [ebp+eax-1C] ← 注册名ASCII的16进制值移入ebx低位  
:004011E6 03D3 add edx, ebx  
:004011E8 40 inc eax ← 累加计数器  
:004011E9 3BC8 cmp ecx, eax ← 比较eax和ecx是否加完?  
:004011EB 7FF3 jg 004011E0 ← 小于跳到004011E0继续加  

* Referenced by a (U)nconditional or (C)onditional Jump at Address:  
|:004011DE(C)  
|  
:004011ED 52 push edx  

* Possible StringData Ref from Data Obj ->\"%d\"  
                                |  
:004011EE 6882B14000 push 0040B182  
:004011F3 8D45AC lea eax, dword ptr [ebp-54]  
:004011F6 50 push eax  
:004011F7 E8C0280000 call 00403ABC  
:004011FC 83C40C add esp, 0000000C  
:004011FF 8D55AC lea edx, dword ptr [ebp-54]  
:00401202 52 push edx  
:00401203 8D4DC8 lea ecx, dword ptr [ebp-38]  
:00401206 51 push ecx  
:00401207 E808120000 call 00402414 ← 关键call,注册码比较处  
:0040120C 83C408 add esp, 00000008  
:0040120F 85C0 test eax, eax  
:00401211 7517 jne 0040122A ← 不等就完蛋了! ? @_@ ?  
:00401213 6830000400 push 00040030  

* Possible StringData Ref from Data Obj ->\"You Did It!\"// ^_^  
                                |  
:00401218 68CEB14000 push 0040B1CE  

算法总结:  
    crackme算法超简单,注册码等于注册名ASCII的16进制值相加后的10进制值  
算法举例:  
    注册名:woyao  
    注册码:119 + 111 + 121 + 97 + 111 = 559(十进制值)  

VB注册机源码:  

Private Sub Command1_Click()  
a = Text1.Text  
For i = 1 To Len(a)  
b = b + Asc(Mid$(a, i))  
Next i  
Text2.Text = b  
End Sub  

六、再来一个不久前的软件,算法分析已经有朋友写过了,这里不再从复,因为教程的目的是算法注册机的编写啊,来,看下面:  

全国电话通 Ver1.09.01注册算法  

算法总结如下:  
   注册码=((机器码(转为十六进制)-3F9)/2D3+3F9)*2D3  
   用户名可任意填写,因为它并不参与注册码的校验  

输入的机器码设为a,列出算式:  

 ( (a - 3F9) / 2D3 + 3F9) * 2D3  

我的机器码:118866  
我的注册码:853140  

VB注册机源码见下面:  

Private Sub Command1_Click()  
strtmp = Text1.Text  
a = Val(Text1.Text)  
b = a - &H3F9  
c = b / &H2D3 + &H3F9  
d = c * &H2D3  
Text2.Text = d  
End Sub  

七、为何源码要分几段来算的?回看算法总结,列出算式看看先,哦,原来与括号有所关连的。明白了!我要[DFCG]偷懒源码的“精华”在此。 !@#&%$Content$nbsp;^_^  

八、因为我菜,所以学无精点,老想偷懒易用,哈,总算摸出一个规律与方法,这下不就全送上来了,大家有用就学,没用就在你以后上手时,把我要[DFCG]的偷懒“精华”送回老家好了! ^_^  

九、看得我头晕晕的,你个家伙就没说正题,不是说过要教写简单crackMe的吗?看你急的,我在论坛上积分“负”的流油都不急,你急什么啊!?想起致“负”原因,哈,这里应该上你老学童一笔,你欠我的分数,赔我,要不就。。。  

十、砖头、臭鸡蛋又来了?晕,不说就不说,打住。看下面源码:  

CrackMe_DFCG源码  

Private Sub Command1_Click()  
Dim a, b, c, d, X As Integer  
a = 22222  
b = a + 33333  
c = b * 1234  
d = Val(Text1.Text)  
If c = d Then  
MsgBox "高手!我服你 @_@"  
Else  
MsgBox "哈!你比我莱 ^_^"  
End If  
End Sub  

Private Sub Command2_Click()  
     关于DFCG.Show  
End Sub  
===========================================  

CrackMe_DFCG注册机源码  

Private Sub Command1_Click()  
strtmp = Text1.Text  
a = 22222  
b = a + 33333  
c = b * 1234  
Text1.Text = c  
End Sub  

十一、上面这个是莱鸟级的CrackMe,简单之极的。没什么好说了,下面再来个进一步的CrackMe,这个东东在你输入正确注册码后就会弹出新的工程窗口,呵呵,软件注册码输入正确是什么境况的! ^_^ 看下面:  

pass_CrackMe窗口1源码:(Form1)  
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)  
End  
End Sub  

pass_CrackMe窗口2源码:(Form2)  
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)  
If KeyCode = 13 Then  
If Text1.Text = "woyao[DFCG]" Then  
Form1.Show  
Unload Form2  
Else  
Text1.Text = ""  
Print MsgBox("“对不起!密码错误!”" + Chr(10) + Chr(10) + Chr(13) + "请您重新输入正确的密码!", 48, "哈!失败了 ^_^")  
End If  
End If  
End Sub  

十二、这次不给注册机源码,你自己来吧!反正与上面的差不多,只是过程我做了一点小改动而已,多试有益了。来吧,动手吧!!!  

十三、随本课将提到的所有东东作为附件一起上来,要的就下载回去研究。后面的这个pass_CrackMe,我将完整的源码也打包一起在内,改一下它你就得到另一个功能的CrackMe,比方说,输入密码正确时,弹出一幅PLMM的图片之类的。  

十四、到这里为止,本扫盲内容已讲的差不多了,下一课就作为总结再重复一下前几课的内容,并教大家做出你的个性化名片,好坏只在个人喜好,不过知道它的编写过程,如下的美工类工作就看你本人的所喜所好了! ^_^  

十五、本篇原创作者--我要[DFCG],版权没有,人权我有 ^_^ 所以凡转此帖的友站及各路朋友兄弟们,必注明此文出自DFCG组织及我要[DFCG]原创为先决条件,否则谢绝转帖转载。网路本一家,但总不至于没个出处明示的吧!感谢你的阅读!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

0519 发表于 2010-1-10 19:17
谢谢楼主
虽然不懂
来学习的
gaoqi 发表于 2010-1-10 20:24
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 01:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表