如何通过机器码算注册码知道软件的注册文件???

机器码算法软件加密大师 1.3怎么用_百度知道
机器码算法软件加密大师 1.3怎么用
提问者采纳
软件特性加密技术特性:【机器码算法软件加密大师】 拥有多项独创的新颖技术,使保护后的文件极度复杂,让破解变成一种高成本的体力劳动:虚拟机加密.拥有完全自主知识产权的 VM (虚拟机)加密引擎, 将保护后的代码放到虚拟机中执行;创新的指令系统,完全不同于现有的 x86 指令,有效阻止代码还原及分析。高级 Anti 技术.调试器是破解者用来动态分析软件流程的特殊工具;【机器码算法软件加密大师】 拥有的反调试技术,可以有效对抗目前常见版本的 OllyDBG 及其隐藏插件。多线程协同保护.双进程模式,多个守护线程共同保护加密后的程序,让调试保护后的文件变得极其困难。动态代码结构.每次生成的保护文件均不相同,从理论上杜绝了通用脱壳机和脱壳脚本的出现。高效的代码乱序引擎.代码乱序可以将您的代码分散变形,彻底改变代码段的原始形态,让阅读和分析反编译后的代码更加困难。代码完整性校验.运行后实时保护,让修改代码动态破解变得困难。反函数挂钩.AntiHook 技术可以有效保护您的文件不被外部程序挂钩函数,例如外挂程序。强制内存保护.实时监控主文件内存,禁止第三方程序操作主要内存,防止内存补丁的出现。代码和资源压缩.除了加密保护,【机器码算法软件加密大师】 还可以压缩您软件产品的代码和资源,减少网络传输带宽占用,加速网络下载。防 DLL 注入.实时监控进程操作,防止通过 DLL 注入的方式破解您的软件产品。软件开发包 SDK.丰富的 API 函数包和实例程序,支持目前市场上大多数的编译器,为您快速实施自定义保护方案提供便捷。注册和许可管理特性:【机器码算法软件加密大师】 拥有简单易用、高效灵活的注册和许可管理系统:一键试用技术.【机器码算法软件加密大师】为您提供一键试用技术,您不必修改任何源代码,在短短几分钟之内就可以将您的完整版软件转换为“先试用后购买”的试用版软件,甚至还可以支持带硬件锁定的序列号注册。内建注册和许可管理系统.【机器码算法软件加密大师】内建灵活易用的注册和许可管理系统,您可以轻松创建具有时间限制、硬件锁定、水印信息的注册码。动态算法生成引擎.外壳所使用算法均动态生成,随机且唯一,让逆向算法变得困难和高成本。时间限制注册密钥.如果您需要限制注册版本的有效期,可以通过创建具有时间限制的注册密钥来实现。硬件锁定.激活硬件锁定功能的注册密钥,只能在某一特定计算机上使用;您可以通过锁定用户计算机的硬件信息来控制注册码的传播,例如 CPU、硬盘序列号、网卡 MAC 地址等。密钥黑名单.如果您的用户泄漏了注册密钥,那么您就可以将该密钥添加进密钥黑名单,这样下一版本更新的时候您就可以锁定该密钥。启动密码保护.这种附加的保护可以有效防止软件未经授权的使用,必须输入正确的密码才可以运行程序。试用次数、天数、日期和运行时间限制.使用 【机器码算法软件加密大师】 ,您可以轻松为您的应用程序添加试用次数、试用天数、试用日期和试运行时间等限制;这样您的客户就可以全功能评估您的软件产品,增大购买意向。
其他类似问题
软件加密的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁KEY破解、、 有谁知道如何破解KEY文件,或者说把机器码加入到KEY里面_百度知道
KEY破解、、 有谁知道如何破解KEY文件,或者说把机器码加入到KEY里面
这个就是 KEY为后坠的 一个授权文件。。是通过机器码注册的、、 这个KEY是不需要联网的。。就是一个本地KEY ,里面估计放的就是授权的机器码,, 有谁能破解或者把我的机器码放入到里面吗??? 我的机器码是:yK/BrQAIBAAQDzAAlN+CnSXuBgdfd+seSbmzuQ==随便问一下 这种格式的机器码 是获取什么信息得出的?? 是CPU 还是主板之互恭皋枷薤磺鸽委龚莲类的?? 请说明白一点 、 有会的把联系地址留下。。如果能弄成。,有些小的报酬!哦。 说明一下 这个软件在网上面是没有的。。 是一款设备的软件。!
这个软件是我买的。卖家给了我个密钥,不放进去就提示***错误,然后出现机器码,放进去就可以打开。。这软软互恭皋枷薤磺鸽委龚莲件自己可以修改吗?或者有什么工具可以来制作?
你这个问题就像说银行卡就知道密码一样的。把KEY和验证KEY文件放上来才知道 ,懂?
其他类似问题
机器码的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
请扫描分享到朋友圈看雪安全论坛 -
【求助】对一系列问题的茫然,能否有人指点一二,关于delphi程序机器码注册无反应
(/index.php)
(/forumdisplay.php?f=69)
(/showthread.php?t=76283)
【求助】对一系列问题的茫然,能否有人指点一二,关于delphi程序机器码注册无反应&
问题1,注册窗体事件产生一个机器码,用任何试码点注册都没反应,应该是需要真码的,不知道该怎么下断
问题2,用DEDE找到注册窗体事件的入口地址,在OD加载的程序中ctrl+G可以到达,一动就变化了,一跑就飞........
问题3,找ascii码字串,强制跳转爆破,启动显示已注册版本,但有个在未注册下不能运行的功能,虽然能运行但什么也不显示,搞不清是爆破可以还是必须需要注册码??我想可能是需要注册码.....感觉真码会对程序做些修改,就像问题2....这样破解思路就断了..
求水平高些的给予指点一下,在线等,谢谢了
程序拿来。
我来看看,看完了才好指点。
004E7108是DEDE反编译出来的注册窗体注册按钮事件的入口地址,在OD加载后可以ctrl+G到达4E7108,但是一动就变了,变成
add byte ptr ds:[ebx+79],dh
jnb short 1_.004E7141
81C498FDFFFF
esp, $FFFFFD98
898D9CFDFFFF
[ebp+$FFFFFD9C], ecx
898D98FDFFFF
[ebp+$FFFFFD98], ecx
898DA4FDFFFF
[ebp+$FFFFFDA4], ecx
898DA0FDFFFF
[ebp+$FFFFFDA0], ecx
898DACFEFFFF
[ebp+$FFFFFEAC], ecx
898DA8FEFFFF
[ebp+$FFFFFEA8], ecx
[ebp-$04], eax
* Possible String Reference to: '橐?爰[嬪]?
68BA734E00
dword ptr fs:[eax]
fs:[eax], esp
[ebp-$08], eax
* Possible String Reference to: '?玉?腽?
dword ptr fs:[eax]
fs:[eax], esp
68FFFF0000
8D95A8FEFFFF
edx, [ebp+$FFFFFEA8]
A1F46C4F00
eax, dword ptr [$004F6CF4]
eax, [eax]
* Reference to: DdeMan.TDdeMgr.GetExeName(TDdeMgr):AnsiS
or: Forms.TApplication.GetExeName(TApplication):AnsiS
E8F1ADF9FF
8B85A8FEFFFF
eax, [ebp+$FFFFFEA8]
8D95ACFEFFFF
edx, [ebp+$FFFFFEAC]
* Reference to: SysUtils.ExtractFilePath(AnsiString):AnsiS
E82C2BF2FF
8D85ACFEFFFF
eax, [ebp+$FFFFFEAC]
* Possible String Reference to: 'finance.exe'
BAD0734E00
edx, $004E73D0
* Reference to: System.@LStrC
E880DDF1FF
8B8DACFEFFFF
ecx, [ebp+$FFFFFEAC]
A108B44100
eax, dword ptr [$]
* Reference to: Classes.TFileStream.Create(TFileSAnsiSWord);
E8EA90F3FF
[ebp-$08], eax
8D95A0FDFFFF
edx, [ebp+$FFFFFDA0]
eax, [ebp-$04]
* Reference to control edtRegister : TEdit
eax, [eax+$0314]
* Reference to: Controls.TControl.GetText(TControl):TC
E8FBA7F7FF
8B85A0FDFFFF
eax, [ebp+$FFFFFDA0]
8D95A4FDFFFF
edx, [ebp+$FFFFFDA4]
* Reference to: SysUtils.Trim(AnsiString):AnsiS
E8A622F2FF
8B95A4FDFFFF
edx, [ebp+$FFFFFDA4]
8D85A8FDFFFF
eax, [ebp+$FFFFFDA8]
B9FF000000
ecx, $000000FF
* Reference to: System.@LStrToS
E804DDF1FF
8D95A8FDFFFF
edx, [ebp+$FFFFFDA8]
8D85B3FEFFFF
eax, [ebp+$FFFFFEB3]
* Reference to: System.@PStrNCpy(PShortSPShortSByte);
E871BFF1FF
C785E4FEFFFF
dword ptr [ebp+$FFFFFEE4], $
C745E8B0726891
dword ptr [ebp-$18], $
C745ECED7CBF3F
dword ptr [ebp-$14], $3FBF7CED
[ebp-$10], eax
C745F454E11B41
dword ptr [ebp-$0C], $411BE154
C785DCFEFFFF003EA59C
dword ptr [ebp+$FFFFFEDC], $9CA53E00
C785E0FEFFFFE774A642
dword ptr [ebp+$FFFFFEE0], $42A674E7
8D9598FDFFFF
edx, [ebp+$FFFFFD98]
eax, [ebp-$04]
* Reference to control edtRegisterSN : TEdit
eax, [eax+$0318]
* Reference to: Controls.TControl.GetText(TControl):TC
E875A7F7FF
8B8598FDFFFF
eax, [ebp+$FFFFFD98]
8D959CFDFFFF
edx, [ebp+$FFFFFD9C]
* Reference to: SysUtils.Trim(AnsiString):AnsiS
E82022F2FF
8B959CFDFFFF
edx, [ebp+$FFFFFD9C]
8D85E8FEFFFF
eax, [ebp+$FFFFFEE8]
B9FF000000
ecx, $000000FF
* Reference to: System.@LStrToS
E87EDCF1FF
8D95B3FEFFFF
edx, [ebp+$FFFFFEB3]
eax, [ebp-$08]
ebx, [eax]
dword ptr [ebx+$10]
fs:[eax], edx
****** FINALLY
689A724E00
eax, [ebp-$08]
* Reference to: System.TObject.Free(TObject);
E8A6CBF1FF
* Reference to: System.@HandleF
E934D3F1FF
****** END
eax, dword ptr [$004F6700]
eax, [eax]
* Reference to : TfrmExcelentPickGold.GetRegUser()
E8AA2B0000
0F84C2000000
eax, dword ptr [$004F6700]
eax, [eax]
* Reference to : TfrmExcelentPickGold.CheckReg()
E82E2A0000
0F84AE000000
eax, dword ptr [$004F6700]
eax, [eax]
byte ptr [eax+$0390], $01
eax, [ebp-$04]
* Reference to control lblRegister : TLabel
eax, [eax+$0324]
* Possible String Reference to: '已注册'
BAE4734E00
edx, $004E73E4
* Reference to: Controls.TControl.SetText(TCTCaption);
E805A7F7FF
eax, [ebp-$04]
* Reference to control edtRegister : TEdit
eax, [eax+$0314]
ecx, [eax]
dword ptr [ecx+$64]
eax, [ebp-$04]
* Reference to control edtRegisterSN : TEdit
eax, [eax+$0318]
ecx, [eax]
dword ptr [ecx+$64]
eax, [ebp-$04]
* Reference to control bbtnRegister : TBitBtn
8B801C030000
eax, [eax+$031C]
ecx, [eax]
dword ptr [ecx+$64]
eax, [ebp-$04]
* Reference to control bbtnClose : TBitBtn
eax, [eax+$0320]
ecx, [eax]
dword ptr [ecx+$64]
E86EBCFFFF
* Reference to : TfrmRegister._PROC_004E70A4()
E875FDFFFF
eax, dword ptr [$004F6700]
eax, [eax]
* Reference to control bbtnClose : TBitBtn
eax, [eax+$0320]
ecx, [eax]
dword ptr [ecx+$64]
eax, dword ptr [$004F6700]
eax, [eax]
* Reference to control lblRegister : TLabel
eax, [eax+$0324]
ecx, [eax]
dword ptr [ecx+$64]
eax, dword ptr [$004F6700]
eax, [eax]
* Possible String Reference to: 'XXXXXXXXX-XXXXXXXX
X--XXXXXXXX'
BAF4734E00
edx, $004E73F4
* Reference to: Controls.TControl.SetText(TCTCaption);
E880A6F7FF
eax, [ebp-$04]
* Reference to: Forms.TCustomForm.Close(TCustomForm);
E8A46EF9FF
fs:[eax], edx
****** FINALLY
* Possible String Reference to: '[嬪]?
68C1734E00
8D8598FDFFFF
eax, [ebp+$FFFFFD98]
* Reference to: System.@LStrClr(void);
E8C4D8F1FF
8D859CFDFFFF
eax, [ebp+$FFFFFD9C]
* Reference to: System.@LStrClr(void);
E8B9D8F1FF
8D85A0FDFFFF
eax, [ebp+$FFFFFDA0]
* Reference to: System.@LStrClr(void);
E8AED8F1FF
8D85A4FDFFFF
eax, [ebp+$FFFFFDA4]
* Reference to: System.@LStrClr(void);
E8A3D8F1FF
8D85A8FEFFFF
eax, [ebp+$FFFFFEA8]
* Reference to: System.@LStrArrayClr(Integer);
E8B7D8F1FF
* Reference to: System.@HandleF
E90DD2F1FF
****** END
我用ascii码方式找到几处注册成功标签
1)程序启动的title里显示的未注册/已注册,修改跳转,启动显示已注册
2)注册窗体中显示的未注册/已注册,修改跳转,再打开程序注册窗体时,输入注册码锁定变灰,显示已注册
但有一个功能一运行仍报可能是试用版的错,再找这个错
修改跳转,再运行,不报错了,都显示的是已注册,可运行这个功能什么也没有显示....
什么原因??
怎么跟你联系??
[QUOTE=532381]
* Reference to : TfrmExcelentPickGold.GetRegUser()
E8AA2B0000
0F84C2000000
eax, dword ptr [$004F6700]
eax, [eax]
* Reference to : TfrmExcelentPickGold.CheckReg()
E82E2A0000
0F84AE000000
eax, dword ptr [$004F6700].[/QUOTE]
这里,看到了没? CheckReg()。
直接到004e9ce8去下断点。
如果爆破,就修改004e9ce8这个函数,让它直接返回成功。
这种设计,将注册判断放在一个函数里,最容易搞定。
“爆破”,并不是一定要修改跳转指令,曾经有一篇文章,讲的的“标志位”爆破法,你可以查找一下。
这个可以叫做“验证函数”爆破法,和“标志位”是异曲同工啊。
PS.在OD中定位到函数后,程序做了混淆,所以不要滚动,直接下断点。
如果无法下int3断点,就直接硬件断点伺候。
这种代码混淆非常常见,方法就是不要滚动窗口。
如果已经乱了,可以按CTRL+上/下,让OD一个字节一个字节地滚动,直到出现正确的反汇编。
祝你好运。
之前的几个字节,然后点右键-&分析-&下次分析时,将选择部分视为-&Bytes,这样就不会乱掉了。
这两天都搭在这上了,不管怎么样,非常感谢以上两位的帮助......又学习了不少,之前有想过&标志位&爆破,我再试试
这个函数是连网认证,我是不让它联网还是,让它验证后做相反跳呢??? 前面说的一下断就飞了,直接ctrl+G来到这里
mov ebp,esp
add esp,-34
mov ebx,eax
xor eax,eax
mov dword ptr ss:[ebp-8],eax
68 C49D4E00
push Unpack_.004E9DC4 ASCII &http://xxxx/&
E8 BEA6F4FF
call &jmp.&wininet.InternetCheckConnecti&
test eax,eax
je Unpack_.004E9D90
xor eax,eax
68 6D9D4E00
push Unpack_.004E9D6D
push dword ptr fs:[eax]
mov dword ptr fs:[eax],esp
A1 F8B44100
mov eax,dword ptr ds:[41B4F8]
E8 E0A0F1FF
call Unpack_.00403E08
mov dword ptr ss:[ebp-8],eax
8B83 FC020000
mov eax,dword ptr ds:[ebx+2FC]
mov ecx,dword ptr ss:[ebp-8]
BA E89D4E00
mov edx,Unpack_.004E9DE8 ASCII &http://xxxx/reg.rar&
E8 D2F7FEFF
call Unpack_.004D9510
xor ecx,ecx
xor edx,edx
mov eax,dword ptr ss:[ebp-8]
mov ebx,dword ptr ds:[eax]
call dword ptr ds:[ebx+14]
mov edx,dword ptr ss:[ebp-8]
lea eax,dword ptr ss:[ebp-31]
E8 9FFEFFFF
call Unpack_.004E9BF4
test al,al
je short Unpack_.004E9D5F
C645 FF 01
mov byte ptr ss:[ebp-1],1
jmp short Unpack_.004E9D63
C645 FF 00
mov byte ptr ss:[ebp-1],0
xor eax,eax
mov dword ptr fs:[eax],edx
jmp short Unpack_.004E9D86
^ E9 A6A5F1FF
jmp Unpack_.
mov eax,dword ptr ss:[ebp-8]
E8 BEA0F1FF
call Unpack_.00403E38
E8 01A9F1FF
call Unpack_.
jmp short Unpack_.004E9DB8
E8 FAA8F1FF
call Unpack_.
mov eax,dword ptr ss:[ebp-8]
E8 AAA0F1FF
call Unpack_.00403E38
jmp short Unpack_.004E9DB8
B9 149E4E00
mov ecx,Unpack_.004E9E14
BA 249E4E00
mov edx,Unpack_.004E9E24
A1 F46C4F00
mov eax,dword ptr ds:[4F6CF4]
mov eax,dword ptr ds:[eax]
E8 3C7DF9FF
call Unpack_.00481AE4
C645 FF 00
mov byte ptr ss:[ebp-1],0
A1 F46C4F00
mov eax,dword ptr ds:[4F6CF4]
mov eax,dword ptr ds:[eax]
E8 887CF9FF
call Unpack_.00481A40
mov al,byte ptr ss:[ebp-1]
mov esp,ebp
如果只有这一个验证函数的话,直接让函数返回”成功“的标志即可。
看原来函数开头的部分
[QUOTE=E9CE8
mov ebp,esp
add esp,-34
mov ebx,eax[/QUOTE]
以及结尾部分的retn,你直接修改成这个“模样”,保持堆栈平衡即可:
这样这个函数就永远返回“成功”了。
这只是简单的情况。如果程序有其它的手段导致修改后不能正常运行,则还要具体情况具体分析。
感谢你的回答,一会儿试一下这个方法,但我估计不成
点击注册按钮会在当前目录下生成个xxxxxxxx.exe文件,这个文件中能看到机器码和注册码,但其余的是乱码
我感觉这个函数是验证机器码的,函数好像是确认一下网址,然后从该网址下载一个文件(这个文件用文本打个是个与机器码前7位一致但后面不同的字串),之后用这个文件去掉本机机器码前8位一致的部分,
跟踪启动读取xxxxxxxx.exe文件时,发现
得到的是本机机器码后面的部分,是把假码,和两个数字串都压入栈,但找不到明显的比较
感觉就断了.....无从下手啊,下面是getreguser的部分,4EA02A和4EA091哪个是比较注册码的部分???
有xxxxxxxx.exe文件时,4EA02A能断下,EAX值是去掉前8位剩下部分的机器码
在4EA091下断,就跑进程序了
eax, [ebp-$10]
edx, [$004E3614]
* Reference to: System.@InitializeRecord(PPointer);
or: System.@AddRefR
E8BDB7F1FF
eax, [ebp-$18]
edx, [$004E3614]
* Reference to: System.@InitializeRecord(PPointer);
or: System.@AddRefR
E8AFB7F1FF
eax, [ebp-$20]
edx, [$004E3614]
* Reference to: System.@InitializeRecord(PPointer);
or: System.@AddRefR
E8A1B7F1FF
* Possible String Reference to: '殓ゑ?肴嬅[嬪]?
68E0A04E00
dword ptr fs:[eax]
fs:[eax], esp
[ebp-$24], eax
8D958CFEFFFF
edx, [ebp+$FFFFFE8C]
A1F46C4F00
eax, dword ptr [$004F6CF4]
eax, [eax]
* Reference to: DdeMan.TDdeMgr.GetExeName(TDdeMgr):AnsiS
or: Forms.TApplication.GetExeName(TApplication):AnsiS
E8B480F9FF
8B858CFEFFFF
eax, [ebp+$FFFFFE8C]
8D9590FEFFFF
edx, [ebp+$FFFFFE90]
* Reference to: SysUtils.ExtractFilePath(AnsiString):AnsiS
E8EFFDF1FF
8D8590FEFFFF
eax, [ebp+$FFFFFE90]
* Possible String Reference to: 'finance.exe'
BAF8A04E00
edx, $004EA0F8
* Reference to: System.@LStrC
E843B0F1FF
8B8590FEFFFF
eax, [ebp+$FFFFFE90]
* Reference to: SysUtils.FileExists(AnsiString):B
E808FDF1FF
0F84BC010000
dword ptr fs:[eax]
fs:[eax], esp
8D9584FEFFFF
edx, [ebp+$FFFFFE84]
A1F46C4F00
eax, dword ptr [$004F6CF4]
eax, [eax]
* Reference to: DdeMan.TDdeMgr.GetExeName(TDdeMgr):AnsiS
or: Forms.TApplication.GetExeName(TApplication):AnsiS
E85E80F9FF
8B8584FEFFFF
eax, [ebp+$FFFFFE84]
8D9588FEFFFF
edx, [ebp+$FFFFFE88]
* Reference to: SysUtils.ExtractFilePath(AnsiString):AnsiS
E899FDF1FF
8D8588FEFFFF
eax, [ebp+$FFFFFE88]
* Possible String Reference to: 'finance.exe'
BAF8A04E00
edx, $004EA0F8
* Reference to: System.@LStrC
E8EDAFF1FF
8B8D88FEFFFF
ecx, [ebp+$FFFFFE88]
A108B44100
eax, dword ptr [$]
* Reference to: Classes.TFileStream.Create(TFileSAnsiSWord);
E85763F3FF
[ebp-$24], eax
8D9597FEFFFF
edx, [ebp+$FFFFFE97]
eax, [ebp-$24]
ebx, [eax]
dword ptr [ebx+$0C]
fs:[eax], edx
****** FINALLY
686C9F4E00
eax, [ebp-$24]
* Reference to: System.TObject.Free(TObject);
E8D49EF1FF
* Reference to: System.@HandleF
E962A6F1FF
****** END
8D8580FEFFFF
eax, [ebp+$FFFFFE80]
8D95CCFEFFFF
edx, [ebp+$FFFFFECC]
* Reference to: System.@LStrFromString(SSShortSShortString);
or: System.@WStrFromString(WideSWideSShortSShortString);
E833AFF1FF
8B8580FEFFFF
eax, [ebp+$FFFFFE80]
edx, [ebp-$04]
* Reference to: SysUtils.Trim(AnsiString):AnsiS
E8E9F4F1FF
edx, [ebp-$08]
eax, [ebp-$04]
E81E9AFFFF
eax, [ebp-$04]
* Reference to: System.@LStrClr(void);
E8AEACF1FF
edx, [ebp-$10]
* Possible String Reference to: '575969'
B80CA14E00
eax, $004EA10C
E8FD9DFFFF
edx, [ebp-$18]
* Possible String Reference to: '
B81CA14E00
eax, $004EA11C
E8F09DFFFF
eax, [ebp-$20]
eax, [ebp-$20]
eax, [ebp-$20]
eax, [ebp-$20]
eax, [ebp-$04]
ecx, [ebp-$18]
edx, [ebp-$10]
eax, [ebp-$08]
E8FAC1FFFF
eax, [ebp-$10]
E83EA0FFFF
eax, [ebp-$18]
E836A0FFFF
eax, [ebp-$20]
E82EA0FFFF
8D8578FEFFFF
eax, [ebp+$FFFFFE78]
E84388FFFF
8B8578FEFFFF
eax, [ebp+$FFFFFE78]
8D957CFEFFFF
edx, [ebp+$FFFFFE7C]
* Reference to: SysUtils.Trim(AnsiString):AnsiS
E866F4F1FF
8B857CFEFFFF
eax, [ebp+$FFFFFE7C]
8D9574FEFFFF
edx, [ebp+$FFFFFE74]
eax, [ebp-$04]
* Reference to: SysUtils.Trim(AnsiString):AnsiS
E851F4F1FF
8B9574FEFFFF
edx, [ebp+$FFFFFE74]
* Reference to: System.@LStrC
E829B0F1FF
8D9570FEFFFF
edx, [ebp+$FFFFFE70]
eax, [ebp-$04]
* Reference to: SysUtils.Trim(AnsiString):AnsiS
E835F4F1FF
8B8570FEFFFF
eax, [ebp+$FFFFFE70]
8D853CFEFFFF
eax, [ebp+$FFFFFE3C]
8A8D97FEFFFF
cl, byte ptr [ebp+$FFFFFE97]
8D8597FEFFFF
eax, [ebp+$FFFFFE97]
* Reference to: System.@C
E87889F1FF
8D953CFEFFFF
edx, [ebp+$FFFFFE3C]
8D8568FEFFFF
eax, [ebp+$FFFFFE68]
* Reference to: System.@LStrFromString(SSShortSShortString);
or: System.@WStrFromString(WideSWideSShortSShortString);
E837AEF1FF
8B8568FEFFFF
eax, [ebp+$FFFFFE68]
8D956CFEFFFF
edx, [ebp+$FFFFFE6C]
* Reference to: SysUtils.Trim(AnsiString):AnsiS
E8EAF3F1FF
8B956CFEFFFF
edx, [ebp+$FFFFFE6C]
* Reference to: System.@LStrC
E8C2AFF1FF
fs:[eax], edx
****** FINALLY
* Possible String Reference to: '嬅[嬪]?
68E7A04E00
8D8568FEFFFF
eax, [ebp+$FFFFFE68]
BA0B000000
edx, $0000000B
* Reference to: System.@LStrArrayClr(Integer);
E8B1ABF1FF
eax, [ebp-$20]
edx, [$004E3614]
* Reference to: System.@FinalizeArray(PPCardinal);
E876B6F1FF
eax, [ebp-$08]
* Reference to: System.@LStrArrayClr(Integer);
E891ABF1FF
* Reference to: System.@HandleF
E9E7A4F1FF
****** END
以下这里是否为注册码验证的部分???
mov esi,eax
mov edi,edx
cmp eax,edx
0F84 8F000000
test esi,esi
je short 1_.
test edi,edi
je short 1_.004050DA
mov eax,dword ptr ds:[esi-4]
mov edx,dword ptr ds:[edi-4]
sub eax,edx
ja short 1_.0040507B
add edx,eax
je short 1_.
mov ecx,dword ptr ds:[esi]
mov ebx,dword ptr ds:[edi]
cmp ecx,ebx
jnz short 1_.
je short 1_.
mov ecx,dword ptr ds:[esi+4]
mov ebx,dword ptr ds:[edi+4]
cmp ecx,ebx
jnz short 1_.
jnz short 1_.
jmp short 1_.
je short 1_.004050CF
mov ecx,dword ptr ds:[esi]
mov ebx,dword ptr ds:[edi]
jnz short 1_.
je short 1_.004050CF
jnz short 1_.
je short 1_.004050CF
81E3 0000FF00
and ebx,0FF0000
81E1 0000FF00
and ecx,0FF0000
cmp ecx,ebx
jnz short 1_.
add eax,eax
jmp short 1_.
mov edx,dword ptr ds:[edi-4]
sub eax,edx
jmp short 1_.
mov eax,dword ptr ds:[esi-4]
sub eax,edx
jmp short 1_.
jnz short 1_.
jnz short 1_.
shr ecx,10
shr ebx,10
jnz short 1_.
Dede已经分析出来,处这个函数应该是Delphi的库函数 System.@LStrC
根据Delphi的调用习惯,两个参数是分别通过eax,edx来传递的。
按照贴出来的代码来看,这两处都是判断的位置,是两步。
也就是说,这个函数验证过程分两步,任何一步错了,都会失败。
先看你指出的第一处,把上面几行代码连起来看:
8D9574FEFFFF
edx, [ebp+$FFFFFE74]
eax, [ebp-$04]
* Reference to: SysUtils.Trim(AnsiString):AnsiS
E851F4F1FF
这是把 [ebp-$04]处的str变量剔除空白字符后,存放于[ebp+$FFFFFE74]处。
下面要比较的两个字串是放在EAX,EDX中的。从代码:
8B9574FEFFFF
edx, [ebp+$FFFFFE74]
* Reference to: System.@LStrC
E829B0F1FF
004EA098[/QUOTE]
中我们看到,EDX是[ebp+$FFFFFE74]处的str变量,而EAX呢?再往上翻,看到:
8B857CFEFFFF
eax, [ebp+$FFFFFE7C]
eax[/QUOTE]
所以,这个比较,比较的是[ebp+$FFFFFE7C]和[ebp+$FFFFFE74]这两个str变量。如果不相等,也就不进行第二步比较,直接跳到004EA098,把EBX清零,也就是失败。
再看第二个比较:
8B956CFEFFFF
edx, [ebp+$FFFFFE6C]
* Reference to: System.@LStrC
E8C2AFF1FF
004EA09C[/QUOTE]
同样往上翻几行,找到push指令,看到
[QUOTE]004EA046
8D853CFEFFFF
eax, [ebp+$FFFFFE3C]
8A8D97FEFFFF
cl, byte ptr [ebp+$FFFFFE97]
8D8597FEFFFF
eax, [ebp+$FFFFFE97]
* Reference to: System.@C
E87889F1FF
8D953CFEFFFF
edx, [ebp+$FFFFFE3C]
8D8568FEFFFF
eax, [ebp+$FFFFFE68]
* Reference to: System.@LStrFromString(SSShortSShortString);
or: System.@WStrFromString(WideSWideSShortSShortString);
E837AEF1FF
8B8568FEFFFF
eax, [ebp+$FFFFFE68]
8D956CFEFFFF
edx, [ebp+$FFFFFE6C]
* Reference to: SysUtils.Trim(AnsiString):AnsiS
E8EAF3F1FF
也就是说,是 [ebp+$FFFFFE3C]和 [ebp+$FFFFFE6C]处这两个str变量进行比较。
你下面的工作,就是被比较的这4个str分别是什么内容,通过什么算法来的。然后再逆推,应该用什么样的注册码才能使这两个比较都成功。如果爆破,就修改call后面的跳转,第一处nop,第二处jmp。
建议用IDA来处理,读起来更容易。这样直接用Dede的代码看得太累了。
算法怎么找呢??我这是边学边干,呵呵,OD和DEDE还没玩明白呢,IDA不会用,刚下了个IDA,反编译出来的好像比OD能多看到些东西,但不会用啊
估计爆破的方法不行,我在想被比较的str是否是真和假码,修改一致行不行???
比放说,往eax和edx都压入7c或74,不知道这样外不外行.....不知道比较的值会不会影响程序,所以特别想找真码验证
[QUOTE=533205]算法怎么找呢??我这是边学边干,呵呵,OD和DEDE还没玩明白呢,IDA不会用,刚下了个IDA,反编译出来的好像比OD能多看到些东西,但不会用啊
估计爆破的方法不行,我在想被比较的str是否是真和假码,修改一致行不行???
比放说,往eax和edx都压入7c或74,不知道这样外不外行.....不...[/QUOTE]
你让它自己和自己比,也是爆破。
看来你对爆破的概念有太清楚。
另外,不要谈什么外行不外行的话,谁都有个进步的过程。
LStrCmp的两个参数需要是字符串,也就是C中的“以0结尾的字符数组”,不是字符值。
你如果不想爆破,就必须能够读懂整个验证过程的代码的意思,才能得到真正的注册码。非明码比较,一般来说,不能通过跟踪“看到”真正的注册码,要得到真码,必须看懂算法。
算法的阅读用IDA更容易看懂。
再加油。胜利就在前方!
所有时间均为北京时间, 现在的时间是 .
&&& 看雪学院()
| 提供带宽资源
|&微信公众帐号:
& 手机客户端:}

我要回帖

更多关于 机器码算注册码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信