好友
阅读权限 25
听众
最后登录 1970-1-1
逆天
发表于 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]原创为先决条件,否则谢绝转帖转载。网路本一家,但总不至于没个出处明示的吧!感谢你的阅读!
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。