|
[求助]刚刚从论坛下载的OD ,双击打不开
你机器中木马了,恭喜你. |
|
[转帖]Aspr2.XX_unpacker_1.13 (2008-02-18)
是不是硬盘坏了呀?要不兄弟们凑钱给大侠买一个吧? |
|
[下载][推荐]Visual Assist发布新版本10.4.1632.0
请问kg在哪下载? |
|
[求助]dll显式加载与隐式加载的区别?
一块关注楼主的问题!尤其是监控进程对dll的加载 |
|
[求助]问一个关于软件保护的问题!高手帮看看!
自己在dll里面写注册机制,用VM保护关键地方. 一下摘自VM的说明文档: 调用注册流程 如果您要部署注册方案,永远不要将验证算法放到一个独立的函数中,并且只检查注册码的有效性,返回一个标记作为结果(输入的注册码是否正确)。我们推荐您将注册码验证整合到程序逻辑中,这样注册码验证算法就无法从调用这个验证的流程中分离出来。 大多数软件开发人员采取的方式: function CheckRegistration(const RegNumber: String): Boolean; begin if RegNumber='123' then Result:=True else Result:=False; end; procedure TForm1.Button1Click(Sender: TObject); begin ... if not CheckRegistration(RegNumber) then exit; Application.CreateForm(TForm2, Form2); Form2.ShowModal; ... end; 如果用这种方式,破解者根本不需要理解您的注册算法(无论它多么复杂),只需要修改 CheckRegistration 函数,让它永远返回 True 即可。 function CheckRegistration(const RegNumber: String): Boolean; begin Result:=True; exit; ... end; 我们推荐您将注册码验证算法混合到您的程序逻辑中(您可以看下面的例子,最终的实施完全依赖于开发人员的想象力): function CheckRegistration(const RegNumber: String): Boolean; begin if RegNumber='123' then begin Application.CreateForm(TForm2, Form2); Result:=True end else Result:=False; end; procedure TForm1.Button1Click(Sender: TObject); begin ... Form2:=nil; if not CheckRegistration(RegNumber) then exit; Form2.ShowModal; ... end; 如果您使用这种类似的方案,破解者就必须弄清楚 CheckRegistration 函数是如何工作的,只有这样才能完全理解注册码验证算法。我们推荐您虚拟化这两个流程(使用 VMProtect 的“虚拟”或“超级”模式) - CheckRegistration 和 TForm1.Button1Click. 验证注册密钥 软件开发人员通常会在验证注册密钥犯下错误: var ValidRegNumber: String; ... function CheckRegistration(const RegNumber: String): Boolean; begin if RegNumber=ValidRegNumber then Result:=True else Result:=False; end; 破解者可以通过跟踪这段代码(通过查看字符串比较函数的参数值)很容易就获取正确的密钥值,因此我们推荐您使用密钥 Hash 值来比较: var HashOfValidRegNumber: Longint; ... // An example of using Peter Weinberger's (PJW) generic hashing algorithm function HashPJW(const Value: String): Longint; var I:Integer; G:Longint; begin Result:=0; for I:=1 to Length(Value) do begin Result:=(Result shl 4)+Ord(Value[I]); G:=Result and $F0000000; if G<>0 then Result:=(Result xor (G shr 24)) xor G; end; end; function CheckRegistration(const RegNumber: String): Boolean; begin if HashPJW(RegNumber)=HashOfValidRegNumber then Result:=True else Result:=False; end; ... initialization HashOfValidRegNumber:=HashPJW(ValidRegNumber); end. 这种方法的本质是因为 Hash 函数是不可逆的,破解者无法通过 Hash 的校验结果找出正确的密钥。这时破解者将需要花费更多的时间理解您软件的工作流程,而不是仅仅爆破密钥验证。 存储注册验证结果 通常情况下,软件开发人员花费大量的时间在注册流程上,但是却忘记保护注册结果: var IsRegistered: Boolean; ... procedure TForm1.Button1Click(Sender: TObject); begin ... if not IsRegistered then IsRegistered:=CheckRegistration(RegNumber); if not IsRegistered then exit; ... end; 这样,存储验证结果的全局变量就可以被检查,这个变量可以在软件的其它部分使用。要找到这个全局变量并不困难(只需在注册前和注册后检查两个数据片段是否改变就可以了),例如,著名的 ArtMoney 软件就是这样编写的。我们推荐您在内存中动态存储注册验证结果,而不是静态存储在硬盘里。如果全局变量在动态内存中存储,破解者就没有机会扫描注册前和注册后的数据片段了。使用动态内存存储验证结果的例子如下: type PBoolean = ^Boolean; var IsRegistered: PBoolean; ... procedure TForm1.Button1Click(Sender: TObject); begin ... if not IsRegistered^ then IsRegistered^:=CheckRegistration(RegNumber); if not IsRegistered^ then exit; ... end; ... initialization New(IsRegistered); |
|
[求助]怎么分析这个key里面的乱码
把软件发上来啊 |
|
[分享]PhantOm V1.25 修正
很好,可以运行了,很暴力 |
|
汇编编写的软件,如MASM编译的EXE,想要加壳保护,却发现很多壳都只支持一些高级语言,比如VMProtect,Themida,这些知名的壳对MASM写的程序都不怎么支持
看VM的例子,有给ASM加壳的啊 dlgproc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD local buffer[100]:BYTE .if uMsg == WM_COMMAND .if wParam == IDC_CHECKPASSWORD VMProtectBegin invoke GetDlgItemText,hWin,IDC_PASSWORD,addr buffer,sizeof buffer invoke atodw, addr buffer cdq mov ecx, 17 idiv ecx .if edx == 13 invoke MessageBox,hWin,SADD("Correct password"),SADD("Information"),MB_ICONINFORMATION or MB_OK .else invoke MessageBox,hWin,SADD("Incorrect password"),SADD("Error"),MB_ICONERROR or MB_OK invoke GetDlgItem,hWin,IDC_PASSWORD invoke SetFocus,eax .endif VMProtectEnd .endif .elseif uMsg == WM_CLOSE invoke EndDialog,hWin,0 .endif xor eax, eax ret dlgproc endp |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值