这一份笔记是一个非常不完整的笔记,但我把它发出来的原因是:
我本人刚刚从医院回家(非典刚好),我知道非典是多么可怕,在我39度高烧不退的时候什么药都没办法,当时我以为自己死定了......
后来医生说我抵抗力强,身体好!高烧才能退下去的!
所以现在才能在论坛和大家灌水!((我在这里呼吁大家平时有时间就多运动,如打打篮球什么的,我就常常打篮球的......过去的事,不多说了!)
我把这文章贴出来的原因事希望大家把它下载回家认真读读,应该会对你有帮助的!
【下载页面】:http://ltyj.51.net/show.php?id=39&t=soft
【软件大小】:1872 KB
【软件简介】: 一款设计精美,操作方便,关系到世界人民身体健康的"非典"预防软件,她提供了整套的有关"非典"的途径、状况、防治、药疗、法律、预防、热线、医院及在线收看最新动态等综合信息,使能得到及时预防,让生命永远属于您和您的家人。
【软件限制】:只能试用十次,不输入注册码的话就不能再用了!
【作者声明】:只是个人兴趣,读者看后所做出的一切事情与我无关,我也不负责,希望读者能三思再后行!
【破解工具】:w32Dasm TRW2K PEid AspackDie
—————————————————————————————————
【过 程】:用PEid发现在主程序FRun.Exe是用ASPack 2.x加的壳,那么我就用AspackDie脱壳(0.99M->3.25M)
然后用w32Dasm反汇编,结果我哭....(什么也没有,全是看不懂的东东...)!
那么只好拿出"家伙"TRW2K来了...
运行程序FRun.Exe然后选择注册,填入78787878 ctrl+n呼出TRW2K 下断点bpx hmemcpy F5出来后按确定马上拦下!
按16次F12到但出错误的对话框!那么再来一次,这当然是按15次F12了!来到了下面!按了N次F10后来到下面!
:004C3F5E
:0040485E
:0058BA25 8BD8
mov ebx, eax
:0058BA27 33C0
xor eax, eax
:0058BA29 55
push ebp
:0058BA2A 68C5BA5800 push
0058BAC5
:0058BA2F 64FF30 push
dword ptr fs:[eax]
:0058BA32 648920 mov
dword ptr fs:[eax], esp
:0058BA35 8D55F8 lea
edx, dword ptr [ebp-08]
:0058BA38 A19CEA6B00 mov eax,
dword ptr [006BEA9C]
:0058BA3D 8B00
mov eax, dword ptr [eax]
:0058BA3F E84085F3FF call
004C3F84 \\??算法CALL(不知道也不明白)
F8进去!
:0058BA44 8D55FC lea
edx, dword ptr [ebp-04]
:0058BA47 A19CEA6B00 mov eax,
dword ptr [006BEA9C]
:0058BA4C 8B00
mov eax, dword ptr [eax]
:0058BA4E E83185F3FF call
004C3F84 \\??算法CALL(不知道也不明白)
F8进去!
:0058BA53 8B55F8 mov
edx, dword ptr [ebp-08] \\这里是错误的注册码!
:0058BA56 8B45FC mov
eax, dword ptr [ebp-04] \\这里是正确的注册码!
:0058BA59 E8A2D9E7FF call
00409400 \\!!关键CALL!F8追进去!
:0058BA5E 8BF0
mov esi, eax \\EAX=ESI
:0058BA60 85F6
test esi, esi \\比较是否为零
:0058BA62 7511
jne 0058BA75 \\不是零的话就跳到下面死掉!爆破!
:0058BA64 66837B5200 cmp word
ptr [ebx+52], 0000
:0058BA69 743F
je 0058BAAA
:0058BA6B 8BD3
mov edx, ebx
:0058BA6D 8B4354 mov
eax, dword ptr [ebx+54]
:0058BA70 FF5350 call
[ebx+50] \\这里是弹出注册成功的对话框的!
:0058BA73 EB35
jmp 0058BAAA
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
|:0058BA62(C)
|
:0058BA75 66837B5A00 cmp word
ptr [ebx+5A], 0000
:0058BA7A 7408
je 0058BA84
:0058BA7C 8BD3
mov edx, ebx
:0058BA7E 8B435C mov
eax, dword ptr [ebx+5C]
:0058BA81 FF5358 call
[ebx+58] \\这里是弹出注册失败的对话框!
-------------------------------------------------------------------------------
:0058BA3F E84085F3FF
call 004C3F84
F8来到这里:
:004C3F84 53
push ebx
:004C3F85 56
push esi
:004C3F86 8BF2
mov esi, edx
:004C3F88 8BD8
mov ebx, eax
:004C3F8A 837B0800 cmp
dword ptr [ebx+08], 00000000
:004C3F8E 750D
jne 004C3F9D
* Possible StringData Ref from
Code Obj ->"错误:参数区为空,无参数可取"
|
:004C3F90 B8BC3F4C00 mov eax,
004C3FBC
:004C3F95 E84AABFEFF call
004AEAE4
:004C3F9A 5E
pop esi
:004C3F9B 5B
pop ebx
:004C3F9C C3
ret
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
|:004C3F8E(C)
|
:004C3F9D 8BC6
mov eax, esi
:004C3F9F 8B530C mov
edx, dword ptr [ebx+0C]
:004C3FA2 8B4B08 mov
ecx, dword ptr [ebx+08]
:004C3FA5 8B148A mov
edx, dword ptr [edx+4*ecx] \\这里D EDX可以看到密匙123456
:004C3FA8 E86F08F4FF call
0040481C
:004C3FAD FF4B08 dec
[ebx+08]
:004C3FB0 5E
pop esi
:004C3FB1 5B
pop ebx
:004C3FB2 C3
ret
\\返回到0058BA44!
-------------------------------------------------------------------------------
:0058BA4E E83185F3FF call
004C3F84
F8来到这里:
:004C3F84 53
push ebx
:004C3F85 56
push esi
:004C3F86 8BF2
mov esi, edx
:004C3F88 8BD8
mov ebx, eax
:004C3F8A 837B0800 cmp
dword ptr [ebx+08], 00000000
:004C3F8E 750D
jne 004C3F9D
* Possible StringData Ref from
Code Obj ->"错误:参数区为空,无参数可取"
|
:004C3F90 B8BC3F4C00 mov eax,
004C3FBC
:004C3F95 E84AABFEFF call
004AEAE4
:004C3F9A 5E
pop esi
:004C3F9B 5B
pop ebx
:004C3F9C C3
ret
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
|:004C3F8E(C)
|
:004C3F9D 8BC6
mov eax, esi
:004C3F9F 8B530C mov
edx, dword ptr [ebx+0C]
:004C3FA2 8B4B08 mov
ecx, dword ptr [ebx+08]
:004C3FA5 8B148A mov
edx, dword ptr [edx+4*ecx] \\这里D EDX可以看见真的注册码!
:004C3FA8 E86F08F4FF call
0040481C
:004C3FAD FF4B08 dec
[ebx+08]
:004C3FB0 5E
pop esi
:004C3FB1 5B
pop ebx
:004C3FB2 C3
ret
\\返回0058BA53!
-------------------------------------------------------------------------------
:0058BA59 E8A2D9E7FF call
00409400
F8来到这里:
* Referenced by a CALL at Addresses:
|:0041897A , :00481071 , :005567B0 , :00557AF8
, :0058BA59
|:00654E77 , :006B735F
|
:00409400 56
push esi
:00409401 57
push edi
:00409402 89C6
mov esi, eax \\EAX=ESI=正确的注册码!
:00409404 89D7
mov edi, edx \\EDX=EDI=我输入错误的注册码!
:00409406 09C0
or eax, eax
\\??或运算,用处不知道,请大哥哥指点!
:00409408 7403
je 0040940D
:0040940A 8B40FC mov
eax, dword ptr [eax-04] \\取得正确注册的位数!
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
|:00409408(C)
|
:0040940D 09D2
or edx, edx
\\??或运算,用处不知道,请大哥哥指点!
:0040940F 7403
je 00409414
:00409411 8B52FC mov
edx, dword ptr [edx-04] \\取得我输入注册码的位数!
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
|:0040940F(C)
|
:00409414 89C1
mov ecx, eax \\EAX=ECX
:00409416 39D1
cmp ecx, edx \\比较是否相等!
:00409418 7602
jbe 0040941C \\不等于就跳到下面!
:0040941A 89D1
mov ecx, edx \\EDX=ECX等于我输入注册码的位数!
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
|:00409418(C)
|
:0040941C 39C9
cmp ecx, ecx \\比较,不知道有什么用,请指点!
:0040941E F3
repz
\\经过这里有后真假注册码都移动了,不知道有什么用,请指点!
:0040941F A6
cmpsb
\\???不知道有什么用,请指点!
:00409420 7408
je 0040942A
:00409422 0FB646FF movzx
eax, byte ptr [esi-01]\\取得正确注册码第X位的ASCII码放入EAX
:00409426 0FB657FF movzx
edx, byte ptr [edi-01]\\取得我输入注册码第X位的ASCII码放入EDX
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
|:00409420(C)
|
:0040942A 29D0
sub eax, edx
\\相减,结果保存EAX
:0040942C 5F
pop edi
:0040942D 5E
pop esi
:0040942E C3
ret
------------------------------------------------------------------------
总结:(程序是怎么运算出注册码的,我到现在都还没有搞懂!请大哥哥指点!)
注册信息保存在注册表的:HKEY_CLASSES_ROOT\Ddfd的字符串值test里面,test的值大于100就表示注册版本,小于否之!
这个程序是把机器码乘以密匙123456的积和我输入的注册码比较的,也就是说注册码就是机器码乘以密匙123456的积!
我们假定注册码是X机器码是Y那么:(X=Y*123456)
可惜我不会编程,所以做不了注册机!(但我感觉这个程序的注册机很容易做,会的大哥哥不要笑我...)
这个程序可以爆破!但就是不完美,因为把
:0058BA62 7511
改成:
:0058BA62 9090
之后程序每次运行机器码都不同了!程序就永远变成了未注册版本,没次运行都是第一次用!(我呆了...)
内存注册机做不了,因为这个程序在开始运行的时候就会运行经过0058BA59这个地方,所以我想问问大家怎么办好!
看来我加入组织的机会渺茫了好多啊!没办法!只好用另外一个方法了!
----------------------------------------------------------------------------
就是搬出我个人认为最好用的工具---->REGMON 4.32中文版!
运行REGMON,在运行FRun.Exe,你会发现程序获取了注册表[HKEY_CLASSES_ROOT\Ddfd]的值,在那里面有两个字符串值test和test1,其中test1是程序随机产生的机器码,test是否注册的标志!(大于101的是注册版)那么你懂了吧,把它改一改就可以了!呵呵...
或者自己动手做一个注册文件!新建一个 本文文档 内容如下:
REGEDIT4
[HKEY_CLASSES_ROOT\Ddfd]
"test"="101"
再把本文文档的扩展名由txt改成reg
双击运行这个reg文件就变成注册版本了!!简单吧!
在这里我要谢谢您愿意花时间看我这篇文章!谢谢...
2003.05.12 下午于清远