老文章档案 · 2003 年

《 极速游龙 V2.0 》 破文+注册机源码.TXT

破解教程 · 算法分析 · 2003-08-20 · 作者:人气: · 出处:赢政天下整理收藏)

目标软件: 极速游龙 V2.0

软件大小: 836 KB

软件语言: 简体中文

软件类别: 共享版 / 游戏工具

应用平台: Win9x/NT/2000/XP

下载地址: http://www.downloadsky.com/soft/11262.html

软件介绍:

极速游龙是专门为玩家而设计,集攻略、秘技、最新试玩下载、补丁于一身的游戏资料搜索工具。内容丰富全面。包括PCGAME、PS、超任等几大机种的资料,子分类除了以上提到的还有各类模拟器游戏下载,游戏相关的工具下载、日本游戏专题、游戏周边下载(包括:游戏主题音乐、游戏主题壁纸等)。

使用工具: TRW2000 v1.23 + 浮点插件,FengMa's Toy Beta1

基础知识:

①:浮点指令:

st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响

src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数

mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节)

x <- y 表示将y的值放入x,例st(0) <- st(0) - st(1)表示将st(0)-st(1)的值放入浮点寄存器st(0)

1. 数据传递和对常量的操作指令

指令格式

指令含义

执行的操作

FLD src

装入实数到st(0)

st(0) <- src (mem32/mem64/mem80)

FILD src

装入整数到st(0)

st(0) <- src (mem16/mem32/mem64)

FBLD src

装入BCD数到st(0)

st(0) <- src (mem80)

FLDZ

将0.0装入st(0)

st(0) <- 0.0

FLD1

将1.0装入st(0)

st(0) <- 1.0

FLDPI

将pi装入st(0)

st(0) <- ?(ie, pi)

FLDL2T

将log2(10)装入st(0)

st(0) <- log2(10)

FLDL2E

将log2(e)装入st(0)

st(0) <- log2(e)

FLDLG2

将log10(2)装入st(0)

st(0) <- log10(2)

FLDLN2

将loge(2)装入st(0)

st(0) <- loge(2)

FST dest

保存实数st(0)到dest

dest <- st(0) (mem32/mem64)

FSTP dest

dest <- st(0) (mem32/mem64/mem80);然后再执行一次出栈操作

FIST dest

将st(0)以整数保存到dest

dest <- st(0) (mem32/mem64)

FISTP dest

dest <- st(0) (mem16/mem32/mem64);然后再执行一次出栈操作

FBST dest

将st(0)以BCD保存到dest

dest <- st(0) (mem80)

FBSTP dest

dest<- st(0) (mem80);然后再执行一次出栈操作

2.运算指令

指令格式

指令含义

执行的操作

加法

FADD

加实数

st(0) <-st(0) + st(1)

FADD src

st(0) <-st(0) + src (mem32/mem64)

FADD st(i),st

st(i) <- st(i) + st(0)

FADDP st(i),st

st(i) <- st(i) + st(0);然后执行一次出栈操作

FIADD src

加上一个整数

st(0) <-st(0) + src (mem16/mem32)

减法

FSUB

减去一个实数

st(0) <- st(0) - st(1)

FSUB src

st(0) <-st(0) - src (reg/mem)

FSUB st(i),st

st(i) <-st(i) - st(0)

FSUBP st(i),st

st(i) <-st(i) - st(0),然后执行一次出栈操作

FSUBR st(i),st

用一个实数来减

st(0) <- st(i) - st(0)

FSUBRP st(i),st

st(0) <- st(i) - st(0),然后执行一次出栈操作

FISUB src

减去一个整数

st(0) <- st(0) - src (mem16/mem32)

FISUBR src

用一个整数来减

st(0) <- src - st(0) (mem16/mem32)

乘法

FMUL

乘上一个实数

st(0) <- st(0) * st(1)

FMUL st(i)

st(0) <- st(0) * st(i)

FMUL st(i),st

st(i) <- st(0) * st(i)

FMULP st(i),st

st(i) <- st(0) * st(i),然后执行一次出栈操作

FIMUL src

乘上一个整数

st(0) <- st(0) * src (mem16/mem32)

除法

FDIV

除以一个实数

st(0) <-st(0) /st(1)

FDIV st(i)

st(0) <- st(0) /t(i)

FDIV st(i),st

st(i) <-st(0) /st(i)

FDIVP st(i),st

st(i) <-st(0) /st(i),然后执行一次出栈操作

FIDIV src

除以一个整数

st(0) <- st(0) /src (mem16/mem32)

FDIVR st(i),st

用实数除

st(0) <- st(i) /st(0)

FDIVRP st(i),st

FDIVRP st(i),st

FIDIVR src

用整数除

st(0) <- src /st(0) (mem16/mem32)

FSCALE

2的st(0)次方

st(0) <- 2 ^ st(0)

FPREM

取余数

st(0) <-st(0) MOD st(1)

FPREM1

取余数(IEEE),同FPREM,但是使用IEEE标准[486]

FRNDINT

取整(四舍五入)

st(0) <- INT( st(0) ); depends on RC flag

FABS

求绝对值

st(0) <- ABS( st(0) ); removes sign

FCHS

改变符号位(求负数)

st(0) <-st(0)

②:VB 常用函数(后面的调试过程中就不再介绍了):

1) 数据类型转换

i) 字符串( String )转换字节( Byte )或整型( Integer ) : __vbai2str

ii) 字符串( String )转长型( Long ) : __vbai4str

iii) 字符串( String )转换单精度型( Single ) : __vbar4str

iv) 字符串( String )转换双精度型( Double ) : __vbar8str

v) 字符串( String )转 Currency 型 : VarCyFromStr

vi) 整型( Integer )转字符串型( String ) : VarBstrFromI2

2) 移动数据

i) 字符串( String )到内存 : __vbaStrCopy

ii) 变量( Variant )到内存 : __vbaVarCopy or __vbaVarMove

3) 运算符

i) 加法 : __vbavaradd <-- 增加变量

ii) 减法 : __vbavarsub <-- 减去变量

iii) 乘法 : __vbavarmul <-- 乘以变量

iv) 除法 : __vbavaridiv <--除以变量

v) XOR: __vbavarxor <--异或运算。

(以上基础知识参考《加密与解密--软件保护技术与解决方案》一书)

破解过程:

Hmemcpy 设断:

CALL NEAR [ECX+A0]

CMP EAX,EBX

FNCLEX

JNL 0043A48A

PUSH DWORD A0

PUSH DWORD 0040B6B8

PUSH ESI

PUSH EAX

CALL `MSVBVM60!__vbaHresultCheckObj`

MOV EAX,[EBP-1C]

PUSH EAX

PUSH DWORD 0040CFE4

CALL 004386A0

LEA ECX,[EBP-1C]

CALL `MSVBVM60!__vbaFreeStr`

LEA ECX,[EBP-20]

CALL `MSVBVM60!__vbaFreeObj`

MOV ECX,[EDI]

PUSH EDI

CALL NEAR [ECX+030C]

LEA EDX,[EBP-20]

PUSH EAX

PUSH EDX

CALL `MSVBVM60!__vbaObjSet`

MOV ESI,EAX

LEA ECX,[EBP-1C]

PUSH ECX

PUSH ESI

MOV EAX,[ESI]

CALL NEAR [EAX+A0]

CMP EAX,EBX

FNCLEX

JNL 0043A4E5

PUSH DWORD A0

PUSH DWORD 0040B6B8

PUSH ESI

PUSH EAX

CALL `MSVBVM60!__vbaHresultCheckObj`

MOV EDX,[EBP-1C]

PUSH EDX

PUSH DWORD 0040CFFC

CALL 004386A0

LEA ECX,[EBP-1C]

17F:0043A4F6 CALL `MSVBVM60!__vbaFreeStr`

LEA ECX,[EBP-20]

CALL `MSVBVM60!__vbaFreeObj`

CALL 0043B3A0 //关键。

MOV ECX,EAX

CALL `MSVBVM60!__vbaI2I4`

MOV [00449078],AX

CMP AX,BX

MOV EAX,80020004

MOV ECX,0A

MOV [EBP-58],EAX

MOV [EBP-60],ECX

MOV [EBP-48],EAX

MOV [EBP-50],ECX

MOV [EBP-38],EAX

MOV [EBP-40],ECX

JNZ NEAR 0043A615 //不跳注册成功。

LEA EDX,[EBP-70]

LEA ECX,[EBP-30]

MOV DWORD [EBP-68],0040D00C

MOV DWORD [EBP-70],08

CALL `MSVBVM60!__vbaVarDup`

LEA EAX,[EBP-60]

LEA ECX,[EBP-50]

PUSH EAX

LEA EDX,[EBP-40]

PUSH ECX

PUSH EDX

LEA EAX,[EBP-30]

PUSH BYTE +40

PUSH EAX

CALL `MSVBVM60!rtcMsgBox`

LEA ECX,[EBP-60]

LEA EDX,[EBP-50]

PUSH ECX

LEA EAX,[EBP-40]

PUSH EDX

LEA ECX,[EBP-30]

PUSH EAX

PUSH ECX

PUSH BYTE +04

CALL `MSVBVM60!__vbaFreeVarList`

MOV EAX,[00449010]

ADD ESP,BYTE +14

CMP EAX,EBX

JNZ 0043A5A3

PUSH EBP

MOV EBP,ESP

SUB ESP,BYTE +08

PUSH DWORD 00402596

MOV EAX,[FS:00]

PUSH EAX

MOV [FS:00],ESP

SUB ESP,BYTE +58

PUSH EBX

PUSH ESI

PUSH EDI

MOV [EBP-08],ESP

MOV DWORD [EBP-04],00401CD8

XOR EDI,EDI

MOV [EBP-14],EDI

MOV [EBP-18],EDI

MOV [EBP-28],EDI

MOV [EBP-30],EDI

MOV [EBP-34],EDI

MOV [EBP-38],EDI

MOV [EBP-3C],EDI

MOV [EBP-40],EDI

MOV [EBP-50],EDI

CALL `MSVBVM60!rtcGetTimer`

FSTP DWORD [EBP-48]

LEA EAX,[EBP-50]

MOV DWORD [EBP-50],04

PUSH EAX

CALL `MSVBVM60!rtcRandomize` //产生机器码?

LEA ECX,[EBP-50]

CALL `MSVBVM60!__vbaFreeVar`

MOV ESI,[004011AC]

MOV EDX,0040D1B0 //EDX中存放的是UNICODE字符“False”。

LEA ECX,[EBP-18]

CALL ESI

MOV EDX,0040D1C0

LEA ECX,[EBP-38]

CALL ESI

MOV EDX,0040AC9C

LEA ECX,[EBP-34]

CALL ESI

MOV EDX,0040ACB4

LEA ECX,[EBP-30]

CALL ESI

LEA ECX,[EBP-38]

PUSH EDI

LEA EDX,[EBP-34]

PUSH ECX

LEA EAX,[EBP-30]

PUSH EDX

PUSH EAX

CALL 00438270

MOV EDI,[0040120C]

MOV EDX,EAX

LEA ECX,[EBP-3C]

CALL EDI

PUSH EAX

CALL `MSVBVM60!rtcR8ValFromBstr` //将机器码转换为浮点数。

CALL `MSVBVM60!__vbaFpI4` //机器码转换为十六进制数。

LEA ECX,[EBP-3C]

MOV [004491E8],EAX

LEA EDX,[EBP-38]

PUSH ECX

LEA EAX,[EBP-34]

PUSH EDX

LEA ECX,[EBP-30]

PUSH EAX

PUSH ECX

PUSH BYTE +04

CALL `MSVBVM60!__vbaFreeStrList` //准备写入注册信息。

ADD ESP,BYTE +14

CALL 00439070

MOV EDX,EAX

LEA ECX,[EBP-30]

CALL EDI

PUSH EAX

PUSH DWORD 0040C328

CALL `MSVBVM60!__vbaStrCat`

MOV EDX,EAX

MOV ECX,004491AC

CALL EDI

MOV EBX,[00401234]

LEA ECX,[EBP-30]

CALL EBX

MOV EDX,0040D054

LEA ECX,[EBP-30]

CALL ESI

PUSH DWORD 0040D1D0

PUSH DWORD 0040CFFC

LEA EDX,[EBP-30]

PUSH EDX

CALL 00437FC0

MOV EDX,EAX

LEA ECX,[EBP-28]

CALL EDI

LEA ECX,[EBP-30]

CALL EBX

PUSH DWORD 004491E8

CALL 0043B850 //计算序列号的关键CALL。

MOV EDX,EAX

LEA ECX,[EBP-30]

CALL EDI

PUSH EAX

MOV EAX,[EBP-28]

PUSH EAX

CALL `MSVBVM60!__vbaStrCmp` //序列号比较。

MOV EBX,EAX

LEA ECX,[EBP-30]

NEG EBX

SBB EBX,EBX

NEG EBX

NEG EBX

CALL `MSVBVM60!__vbaFreeStr`

TEST BX,BX

JZ NEAR 0043B7E2

因计算序列号的 CALL 实在烦琐,故只列出序列号计算过程:

(1):取用户名第 i 位,转换为十进制;

(2):取字符串“False”的第 i 位,转换为十进制;

(3):将步骤(1) - 步骤(2)的结果转换为字符串;

(4):将步骤(3)的结果的首位转换为十进制,再除以 1.3;

(5):将步骤(4)的结果乘以机器码;

(6):向上循环 4 次;

(7):取步骤(5)的结果,去掉小数点,然后转换为字符串,即最终的序列号。

然后,据此写出注册机:

Dim Dividend As Integer

Dim i As Integer

Dim MachineCode As Long

Dim Divisor As Double

Dim Result As Double

Dim SN As String

Dim MidName As String

Dim StrResult As String

Private Sub Command1_Click()

AboutMessage = MsgBox("This keygen made by fengma[FCG](fengma@2911.net) !", 4096 + vbExclamation, "About...")

End Sub

Private Sub Command2_Click()

MachineCode = Text1.Text

Divisor = 1.3

If Len(Text2.Text) < 2 Then

EnterName = MsgBox("Use a name at least 2 Chars long , please !", 4096 + vbExclamation, "Information")

Exit Sub

End If

If Command2.Caption = "Get Now !" Then

If Len(Text2.Text) < 5 Then

MidName = Mid$(Text2.Text, Len(Text2.Text), 1)

Else

MidName = Mid$(Text2.Text, 5, 1)

End If

If Asc(MidName) < 101 Then

Dividend = 57

Else

Dividend = Asc(Mid$(LTrim$(Str((Asc(MidName) - 101))), 1, 1))

End If

Result = Dividend / Divisor

StrResult = LTrim$(Str(MachineCode * Result))

SN = ""

For i = 1 To 16

ChrSN = Mid$(StrResult, i, 1)

If ChrSN <> "." Then

SN = SN & ChrSN

End If

Next i

Text3.Text = SN

With Command2

.Font = Tahoma

.Caption = "Bye !"

End With

Else

End

End If

End Sub

fengma[FCG] Cracked

(出处:赢政天下整理收藏)

相关文章:

·语音界面2.0算法分析及注册机源码!

·侠客系统修改器1.21破解手记--算法分析

·中文拨号上网计时计费器 V4.12注册算法分析

·ClockWise 3.22e注册码算法分析

·CoolClock V1.02注册算法分析

·Directory Scanner v1.5 注册算法分析

·Disk Chief 1.2 简单注册算法分析

·EffeTech HTTP Sniffer 3.2注册算法分析

·eLib2.01算法分析

·EZ MP3 Recorder 1.15 注册算法分析

相关软件:

→ 特别推荐

→ 热点TOP10

我为人人《《==》》人人为我

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史