IDM提示假序列号解决办法

合集下载

InternetDownloadManager序列号

InternetDownloadManager序列号

InternetDownloadManager序列号是一款针对该软件而量身打造的激活程序,可以让原本收费的软件变成免费的,它可以将你电脑设备的信息直接写入到软件得许可证中,从而达到免费授权的目的!最为关键的是本激活工具安全无毒,不会对软件本身有任何的影响,大家可以放心的下载使用!而作为资源下载领域中的佼佼者Internet Download Manager软件可以说极为受欢迎,它采用了当下最为先进的下载技术,具备多媒体下载、自动捕获链接、自动识别文件名、批量下载、定时下载、自动站点抓取、队列等等一系列功能;即便时突然的断电、断网下载任务也不会失效,当恢复时便会自动继续下载;最为关键的还软件没有广告,内置了视频、音频播放器,下载就能播放,非常人性化!破解教程1:安装完成之后点击“完成”即可。

2:打开IDM安装的目录,如果你没有修改安装位置,一般在:C:Program Files (x86)Internet Download Manager这个文件夹里。

3:将破解补丁放到软件的根目录下。

运行补丁。

4:点击破解IDM按钮,进行破解软件。

5:破解完成之后关闭破解补丁软件即可。

软件功能1、支持所有流行的浏览器和应用程序!软件支持所有流行的浏览器,包括IE,Chrome,AOL,MSN,Mozilla,Netscape,Firefox,Avant Browser等等。

支持所有流行浏览器的所有版本,并且可以集成到任何Internet应用程序中,以使用独特的“高级浏览器集成”功能接管下载。

2、下载速度加速。

由于其智能动态文件分段技术,idm 2021最多可将下载速度提高5倍。

与其他下载管理器和加速器不同,软件会在下载过程中动态下载文件并重新使用可用连接而无需额外的连接和登录阶段,以实现最佳加速性能。

3、只需点击一下即可轻松下载当您单击浏览器中的下载链接时,IDM将接管下载并加速下载。

您不需要做任何特殊的事情,只需像往常一样浏览互联网。

解决Adobe安全证书问题

解决Adobe安全证书问题
安 全 咖 啡 屋
计 算 机 与 网 络 创 新 生 活 i I Q I I ] I l l 1 ] - ・ 啊 阿 扎 州- 曩 】 I
潮 骥
从理 论 上 来看 , 用 于保 护 计 算 系 法 避 免 部 署 问 题和 软 磨 硬 泡 ( Ru b b e r

密提 供 更 高的 性 能 ,但 NhomakorabeaS M 部 署 带 能 不 是 所 有 补 丁 管 理 软 件 的 默 认 配
Ad o b e使 用 硬 件 安 全 模 块 进 行 恶 意 软 件 扫 描 , 同时 , 企 业 也 可 并 通 过 HS M 采 取 了合理 的安 全预 防
统的加 密技术 和算 法是 强大 的 , 但 来 安 全 挑 战 ,特 别 是 在 私 钥 的 访 问 置 。 企业 还 可 以检 查签 名 软件 上 从官
是 ,即 使 是 最 强 大 的 加 密 技 术 也 无 方 式方 面 。它 们 通 常 提 供 几 种 不 同 方 渠 道接 收 的哈 希 值 , 但狡 猾 的攻 击 的方 法 来 控 制 对 私 钥 的访 问 ,包 括 密码 保 护 、 双因素身份验证 ( 生物 特 者可 能 也会 伪 造这 些值 。 最可能 受 A d o b e问 题 安 全 证 书 影响 的 是 自动 安装 更新 的用 户 , 由于
别 是 面对 这 种 情 况 :攻 击 者 可 以使 看 ,每 种 方 法 都 有 优 点 和 缺 点 。例 它 们 可 能 被 自动 安 装 在 不 知 情 的 系
用A d o b e的证 书 对恶 意 软 件签 名 , 从 如 , 为 了 自动化 某 些 加 密 操 作 , 例 如 统 上 。这 可能 会 逃避 所 有允 许 A d o b e 而 将 恶 意 代 码 伪 装 成 合 法 Ad o b e软 签 名 ,一 些 HS M 允 许这 些 功 能 在不 更 新 的 自名 单保 护 。 与 恶意 A d o b e 签

大神论坛逆向分析InternetDownloadManager序列号算法附IDM注册机完整源码

大神论坛逆向分析InternetDownloadManager序列号算法附IDM注册机完整源码

⼤神论坛逆向分析InternetDownloadManager序列号算法附IDM注册机完整源码## 1\. 前⾔### **idm version : 6.38 Build 23**## 2.算法逆向### IDM的序列号验证函数定位在:### 下⾯是在IDA下的代码分析:```.text:00510010 push ebp.text:00510011 lea ebp, [esp-1FCh].text:00510018 sub esp, 1FCh.text:0051001E push 0FFFFFFFFh.text:00510020 push offset SEH_510010.text:00510025 mov eax, large fs:0.text:0051002B push eax.text:0051002C sub esp, 160h.text:00510032 mov eax, ___security_cookie.text:00510037 xor eax, ebp.text:00510039 mov [ebp+1FCh+var_4], eax.text:0051003F push ebx.text:00510040 push esi.text:00510041 push edi.text:00510042 push eax.text:00510043 lea eax, [ebp+1FCh+var_208].text:00510046 mov large fs:0, eax.text:0051004C mov [ebp+1FCh+var_20C], esp.text:0051004F mov edi, ecx.text:00510051 mov [ebp+1FCh+var_234], edi.text:00510054 mov encode36, 32h ; '2' ; char basecode36[] = {0x32, 0x59, 0x4F, 0x50, 0x42, 0x33, 0x41, 0x51, 0x43, 0x56, 0x55, 0x58, 0x4D, 0x4E, 0x52, 0x53,0x39, 0x37, 0x57, 0x45, 0x30, 0x49, 0x5A, 0x44, 0x34, 0x4B, 0x4C, 0x46, 0x47, 0x48, 0x4A, 0x38,0x31, 0x36, 0x35, 0x54};.text:0051005B mov encode36+1, 59h ; 'Y'.text:00510062 mov encode36+2, 4Fh ; 'O'.text:00510069 mov encode36+3, 50h ; 'P'.text:00510070 mov encode36+4, 42h ; 'B'.text:00510077 mov encode36+5, 33h ; '3'.text:0051007E mov encode36+6, 41h ; 'A'.text:00510085 mov encode36+7, 51h ; 'Q'.text:0051008C mov encode36+8, 43h ; 'C'.text:00510093 mov encode36+9, 56h ; 'V'.text:0051009A mov encode36+0Ah, 55h ; 'U'.text:005100A1 mov encode36+0Bh, 58h ; 'X'.text:005100A8 mov encode36+0Ch, 4Dh ; 'M'.text:005100AF mov encode36+0Dh, 4Eh ; 'N'.text:005100B6 mov encode36+0Eh, 52h ; 'R'.text:005100BD mov encode36+0Fh, 53h ; 'S'.text:005100C4 mov encode36+10h, 39h ; '9'.text:005100CB mov encode36+11h, 37h ; '7'.text:005100D2 mov encode36+12h, 57h ; 'W'.text:005100E7 mov encode36+15h, 49h ; 'I'.text:005100EE mov encode36+16h, 5Ah ; 'Z'.text:005100F5 mov encode36+17h, 44h ; 'D'.text:005100FC mov encode36+18h, 34h ; '4'.text:00510103 mov encode36+19h, 4Bh ; 'K'.text:0051010A mov encode36+1Ah, 4Ch ; 'L'.text:00510111 mov encode36+1Bh, 46h ; 'F'.text:00510118 mov encode36+1Ch, 47h ; 'G'.text:0051011F mov encode36+1Dh, 48h ; 'H'.text:00510126 mov encode36+1Eh, 4Ah ; 'J'.text:0051012D mov encode36+1Fh, 38h ; '8'.text:00510134 mov encode36+20h, 31h ; '1'.text:0051013B mov encode36+21h, 36h ; '6'.text:00510142 mov encode36+22h, 35h ; '5'.text:00510149 mov encode36+23h, 54h ; 'T'.text:00510150 mov [ebp+1FCh+var_200], 0.text:00510157 push 32h ; '2' ; int.text:00510159 lea eax, [ebp+1FCh+Data].text:0051015F push eax ; lpString.text:00510160 push 4B0h ; nIDDlgItem.text:00510165 call ?GetDlgItemTextA@CWnd@@QBEHHPADH@Z ; CWnd::GetDlgItemTextA(int,char *,int) .text:0051016A test eax, eax.text:0051016C jnz short loc_5101AC ; 获取注册名字并判断是否成功.text:0051016E push eax ; uType.text:0051016F push offset Caption ; "Internet Download Manager".text:00510174 mov ecx, dword_716978.text:0051017A.text:0051017A loc_51017A: ; CODE XREF: SerialCheck+1C1↓j.text:0051017A ; SerialCheck+1E8↓j ....text:0051017A push ecx ; lpMultiByteStr.text:0051017B mov edx, [edi+20h].text:0051017E push edx ; hWnd.text:0051017F.text:0051017F loc_51017F: ; CODE XREF: SerialCheck+271↓j.text:0051017F ; SerialCheck+3F7↓j.text:0051017F call MyMessageBox ; 弹出假冒序列号窗⼝函数.text:00510184 add esp, 10h.text:00510187.text:00510187 loc_510187: ; CODE XREF: SerialCheck+5CF↓j.text:00510187 ; SerialCheck+63B↓j ....text:00510187 mov ecx, [ebp+1FCh+var_208].text:0051018A mov large fs:0, ecx.text:00510191 pop ecx.text:00510192 pop edi.text:00510193 pop esi.text:00510194 pop ebx.text:00510195 mov ecx, [ebp+1FCh+var_4].text:0051019B xor ecx, ebp ; StackCookie.text:0051019D call @__security_check_cookie@4 ; __security_check_cookie(x).text:005101A2 add ebp, 1FCh.text:005101A8 mov esp, ebp.text:005101AA pop ebp.text:005101AB retn.text:005101AC ; ---------------------------------------------------------------------------.text:005101AC.text:005101AC loc_5101AC: ; CODE XREF: SerialCheck+15C↑j.text:005101AC push 32h ; '2' ; int.text:005101AE lea eax, [ebp+1FCh+var_CC].text:005101B4 push eax ; lpString.text:005101B5 push 413h ; nIDDlgItem.text:005101BA mov ecx, edi ; this.text:005101BC call ?GetDlgItemTextA@CWnd@@QBEHHPADH@Z ; CWnd::GetDlgItemTextA(int,char *,int) .text:005101C1 test eax, eax.text:005101C3 jnz short loc_5101D3 ; 获取注册姓⽒并判断是否成功.text:005101C5 push eax.text:005101C6 push offset Caption ; "Internet Download Manager".text:005101CB mov ecx, dword_71697C.text:005101D1 jmp short loc_51017A.text:005101D3 ; ---------------------------------------------------------------------------.text:005101D3.text:005101D3 loc_5101D3: ; CODE XREF: SerialCheck+1B3↑j.text:005101D3 push 32h ; '2' ; int.text:005101D5 lea eax, [ebp+1FCh+var_100].text:005101DB push eax ; lpString.text:005101DC push 4A5h ; nIDDlgItem.text:005101E1 mov ecx, edi ; this.text:005101E3 call ?GetDlgItemTextA@CWnd@@QBEHHPADH@Z ; CWnd::GetDlgItemTextA(int,char *,int) .text:005101E8 test eax, eax.text:005101EA jnz short loc_5101FA ; 获取注册邮箱并判断是否成功.text:005101EC push eax.text:005101ED push offset Caption ; "Internet Download Manager".text:005101F2 mov ecx, dword_716980.text:005101F8 jmp short loc_51017A.text:005101FA ; ---------------------------------------------------------------------------.text:005101FA loc_5101FA: ; CODE XREF: SerialCheck+1DA↑j.text:005101FA push 32h ; '2' ; int.text:005101FC lea eax, [ebp+1FCh+RegisterSerialNumber].text:00510202 push eax ; lpString.text:00510203 push 4AAh ; nIDDlgItem.text:00510208 mov ecx, edi ; this.text:0051020A call ?GetDlgItemTextA@CWnd@@QBEHHPADH@Z ; CWnd::GetDlgItemTextA(int,char *,int) .text:0051020F test eax, eax.text:00510211 jnz short loc_510224 ; 获取序列号并判断是否成功.text:00510213 push eax.text:00510214 push offset Caption ; "Internet Download Manager".text:00510219 mov ecx, dword_716984.text:0051021F jmp loc_51017A.text:00510224 ; ---------------------------------------------------------------------------.text:00510224.text:00510224 loc_510224: ; CODE XREF: SerialCheck+201↑j.text:00510224 mov bl, 20h ; ' ' ; bl = 0x20(' ').text:00510226.text:00510226 loc_510226: ; CODE XREF: SerialCheck+24A↓j.text:00510226 cmp [ebp+1FCh+RegisterSerialNumber], bl ; ⽐对序列号的第⼀位是否是空格.text:0051022C jnz short loc_51025C.text:0051022E push 32h ; '2' ; int.text:00510230 lea eax, [ebp+1FCh+var_57].text:00510236 push eax ; Source.text:00510237 lea ecx, [ebp+1FCh+var_1FC].text:0051023A push ecx ; Destination.text:0051023B call sub_405380.text:00510240 add esp, 0Ch.text:00510243 lea ecx, [ebp+1FCh+var_1FC].text:00510246 lea edx, [ebp+1FCh+RegisterSerialNumber].text:0051024C lea esp, [esp+0].text:00510250.text:00510250 loc_510250: ; CODE XREF: SerialCheck+248↓j.text:00510250 mov al, [ecx].text:00510252 mov [edx], al.text:00510254 inc ecx.text:00510255 inc edx.text:00510256 test al, al.text:00510258 jnz short loc_510250.text:0051025A jmp short loc_510226.text:0051025C ; ---------------------------------------------------------------------------.text:0051025C.text:0051025C loc_51025C: ; CODE XREF: SerialCheck+21C↑j.text:0051025C lea eax, [ebp+1FCh+RegisterSerialNumber] ; EAX = 序列号的第⼀位地址.text:00510262 lea edx, [eax+1] ; EDX = 序列号的第⼆位的地址.text:00510265.text:00510265 loc_510265: ; CODE XREF: SerialCheck+25A↓j.text:00510265 mov cl, [eax].text:00510267 inc eax.text:00510268 test cl, cl.text:0051026A jnz short loc_510265.text:0051026C sub eax, edx ; 计算序列号的个数.text:0051026E jnz short loc_510290.text:00510270 push eax.text:00510271 push offset Caption ; "Internet Download Manager".text:00510276 mov edx, dword_716988.text:0051027C push edx.text:0051027D mov eax, [edi+20h].text:00510280 push eax.text:00510281 jmp loc_51017F.text:00510281 ; } // starts at 510010.text:00510281 SerialCheck endp.text:00510281.text:00510286 ; ---------------------------------------------------------------------------.text:00510286 jmp short loc_510290.text:00510286 ; ---------------------------------------------------------------------------.text:00510288 align 10h.text:00510290 ; START OF FUNCTION CHUNK FOR SerialCheck.text:00510290.text:00510290 loc_510290: ; CODE XREF: SerialCheck+25E↑j.text:00510290 ; .text:00510286↑j ....text:00510290 ; __unwind { // SEH_510010 ; EAX = 序列号的第⼀位地址.text:00510290 lea eax, [ebp+1FCh+RegisterSerialNumber].text:00510296 lea edx, [eax+1] ; EDX = 序列号的第⼆位地址.text:00510299 lea esp, [esp+0].text:005102A0.text:005102A0 loc_5102A0: ; CODE XREF: SerialCheck+295↓j.text:005102A0 mov cl, [eax].text:005102A2 inc eax.text:005102A3 test cl, cl.text:005102A5 jnz short loc_5102A0.text:005102A7 sub eax, edx ; 计算序列号的长度.text:005102A9 cmp [ebp+eax+1FCh+var_59], bl ; ⽐对序列号的最后⼀位是否等于0x20(' ').text:005102B0 jnz short loc_5102D2.text:005102BB jmp short loc_5102C0.text:005102BB ; } // starts at 510290.text:005102BB ; END OF FUNCTION CHUNK FOR SerialCheck.text:005102BB ; ---------------------------------------------------------------------------.text:005102BD align 10h.text:005102C0 ; START OF FUNCTION CHUNK FOR SerialCheck.text:005102C0.text:005102C0 loc_5102C0: ; CODE XREF: SerialCheck+2AB↑j.text:005102C0 ; SerialCheck+2B5↓j.text:005102C0 ; __unwind { // SEH_510010.text:005102C0 mov cl, [eax].text:005102C2 inc eax.text:005102C3 test cl, cl.text:005102C5 jnz short loc_5102C0.text:005102C7 sub eax, edx.text:005102C9 mov [ebp+eax+1FCh+var_59], cl.text:005102D0 jmp short loc_510290.text:005102D2 ; ---------------------------------------------------------------------------.text:005102D2.text:005102D2 loc_5102D2: ; CODE XREF: SerialCheck+2A0↑j.text:005102D2 lea ecx, [ebp+1FCh+RegisterSerialNumber].text:005102D8 push ecx ; String.text:005102D9 call __strupr ; 把序列号全部为⼤写.text:005102DE add esp, 4.text:005102E1 lea eax, [ebp+1FCh+RegisterSerialNumber] ; EAX = 序列号的第⼀位地址.text:005102E7 lea edx, [eax+1] ; EDX = 序列号的第⼆位地址.text:005102EA lea ebx, [ebx+0].text:005102F0.text:005102F0 loc_5102F0: ; CODE XREF: SerialCheck+2E5↓j.text:005102F0 mov cl, [eax].text:005102F2 inc eax.text:005102F3 test cl, cl.text:005102F5 jnz short loc_5102F0.text:005102F7 sub eax, edx ; 计算序列号的长度.text:005102F9 cmp eax, 17h.text:005102FC jnz loc_5103F6 ; 判断序列号的长短是否等于23(0x17).text:00510302 xor bl, bl ; bl = 0;.text:00510304 mov al, 2Dh ; '-' ; al = '-'(0x2d);.text:00510306 cmp [ebp+1FCh+var_53], al ; 判断序列号的第六位是否等于'-'(0x2d).text:0051030C jnz short loc_51031E.text:0051030E cmp [ebp+1FCh+var_4D], al ; 判断序列号的第12位是否等于'-'(0x2d).text:00510314 jnz short loc_51031E.text:00510316 cmp [ebp+1FCh+var_47], al ; 判断序列号的第18位是否等于'-'(0x2d).text:0051031C jz short loc_510320.text:0051031E.text:0051031E loc_51031E: ; CODE XREF: SerialCheck+2FC↑j.text:0051031E ; SerialCheck+304↑j.text:0051031E mov bl, 1.text:00510320.text:00510320 loc_510320: ; CODE XREF: SerialCheck+30C↑j.text:00510320 push 5 ; Count.text:00510322 lea edx, [ebp+1FCh+RegisterSerialNumber].text:00510328 push edx ; Source.text:00510329 lea eax, [ebp+1FCh+RegisterSerialNumber_0_5].text:0051032F push eax ; Destination.text:00510330 call _strncpy ; 取出序列号的0-5位.text:00510335 push 5 ; Count.text:00510337 lea ecx, [ebp+1FCh+Source].text:0051033D push ecx ; Source.text:0051033E lea edx, [ebp+1FCh+RegisterSerialNumber_6_11].text:00510344 push edx ; Destination.text:00510345 call _strncpy ; 取出序列号的6-11位.text:0051034A push 5 ; Count.text:0051034C lea eax, [ebp+1FCh+var_4C].text:00510352 push eax ; Source.text:00510353 lea ecx, [ebp+1FCh+RegisterSerialNumber_13_17].text:00510359 push ecx ; Destination.text:0051035A call _strncpy ; 取出序列号的13-17位.text:0051035F push 5 ; Count.text:00510361 lea edx, [ebp+1FCh+var_46].text:00510367 push edx ; Source.text:00510368 lea eax, [ebp+1FCh+RegisterSerialNumber_18_23].text:0051036E push eax ; Destination.text:0051036F call _strncpy ; 取出序列号的18-23位.text:00510374 mov [ebp+1FCh+var_7], 0.text:0051037B mov [ebp+1FCh+var_F], 0.text:00510382 mov [ebp+1FCh+var_1F], 0.text:00510389 mov [ebp+1FCh+var_17], 0 ; 在每个取出的5位序列号后⾯添加0x00.text:00510390 lea ecx, [ebp+1FCh+encode_1].text:00510393 push ecx.text:00510394 lea edx, [ebp+1FCh+RegisterSerialNumber_0_5].text:0051039A push edx.text:0051039B call SerialEncrypt ; 序列号加密函数.text:005103A5 jnz short loc_5103A9 ; 返回值等于1跳转,等于0则 bl = 0x01.text:005103A7 mov bl, 1.text:005103A9.text:005103A9 loc_5103A9: ; CODE XREF: SerialCheck+395↑j.text:005103A9 lea eax, [ebp+1FCh+encode_2+4].text:005103AC push eax.text:005103AD lea ecx, [ebp+1FCh+RegisterSerialNumber_6_11].text:005103B3 push ecx.text:005103B4 call SerialEncrypt ; 序列号加密函数.text:005103B9 add esp, 8.text:005103BC test eax, eax.text:005103BE jnz short loc_5103C2 ; 返回值等于1跳转,等于0则 bl = 0x01.text:005103C0 mov bl, 1.text:005103C2.text:005103C2 loc_5103C2: ; CODE XREF: SerialCheck+3AE↑j.text:005103C2 lea edx, [ebp+1FCh+encode_3].text:005103C5 push edx.text:005103C6 lea eax, [ebp+1FCh+RegisterSerialNumber_13_17].text:005103CC push eax.text:005103CD call SerialEncrypt ; 序列号加密函数.text:005103D2 add esp, 8.text:005103D5 test eax, eax.text:005103D7 jnz short loc_5103DB ; 返回值等于1跳转,等于0则 bl = 0x01.text:005103D9 mov bl, 1.text:005103DB.text:005103DB loc_5103DB: ; CODE XREF: SerialCheck+3C7↑j.text:005103DB lea ecx, [ebp+1FCh+encode_4].text:005103DE push ecx.text:005103DF lea edx, [ebp+1FCh+RegisterSerialNumber_18_23].text:005103E5 push edx.text:005103E6 call SerialEncrypt ; 序列号加密函数.text:005103EB add esp, 8.text:005103EE test eax, eax.text:005103F0 jz short loc_5103F6.text:005103F2 test bl, bl.text:005103F4 jz short loc_51040C ; 判断上⾯的每个函数都返回1 则跳转.text:005103F6.text:005103F6 loc_5103F6: ; CODE XREF: SerialCheck+2EC↑j.text:005103F6 ; SerialCheck+3E0↑j ....text:005103F6 push 0.text:005103F8 push offset Caption ; "Internet Download Manager".text:005103FD mov eax, dword_716988.text:00510402 push eax.text:00510403 mov ecx, [edi+20h].text:00510406 push ecx.text:00510407 jmp loc_51017F.text:0051040C ; ---------------------------------------------------------------------------.text:0051040C.text:0051040C loc_51040C: ; CODE XREF: SerialCheck+3E4↑j.text:0051040C mov ecx, [ebp+1FCh+encode_1].text:0051040F mov eax, 2FA0BE83h.text:00510414 imul ecx.text:00510416 sar edx, 3.text:00510419 mov eax, edx.text:0051041B shr eax, 1Fh.text:0051041E add eax, edx.text:00510420 imul eax, 2Bh ; '+'.text:00510423 mov edx, ecx.text:00510425 sub edx, eax ; edx = encode1 % 43;.text:00510427 jnz short loc_51042D ; 判断序列号第⼀部分的加密的结果除于43取余是否等于0 .text:00510429 test ecx, ecx.text:0051042B jnz short loc_51042F.text:0051042D.text:0051042D loc_51042D: ; CODE XREF: SerialCheck+417↑j.text:0051042D mov bl, 1.text:0051042F.text:0051042F loc_51042F: ; CODE XREF: SerialCheck+41B↑j.text:0051042F mov ecx, dword ptr [ebp+1FCh+encode_2+4].text:00510432 mov eax, 0B21642C9h.text:00510437 imul ecx.text:00510439 add edx, ecx.text:0051043B sar edx, 4.text:0051043E mov eax, edx.text:00510440 shr eax, 1Fh.text:00510443 add eax, edx.text:00510445 imul eax, 17h.text:00510448 mov edx, ecx.text:0051044A sub edx, eax ; edx = encode2 % 23;.text:0051044C jnz short loc_510452 ; 判断序列号第⼆部分的加密的结果除于23取余是否等于0 .text:0051044E test ecx, ecx.text:00510450 jnz short loc_510454.text:00510452.text:00510452 loc_510452: ; CODE XREF: SerialCheck+43C↑j.text:00510454.text:00510454 loc_510454: ; CODE XREF: SerialCheck+440↑j.text:00510454 mov ecx, [ebp+1FCh+encode_3].text:00510457 mov eax, 78787879h.text:0051045C imul ecx.text:0051045E sar edx, 3.text:00510461 mov eax, edx.text:00510463 shr eax, 1Fh.text:00510466 add eax, edx.text:00510468 mov edx, eax.text:0051046A shl edx, 4.text:0051046D add edx, eax.text:0051046F mov eax, ecx.text:00510471 sub eax, edx ; eax = encode_3 % 17;.text:00510473 jnz short loc_510479 ; 判断序列号第三部分的加密的结果除于17取余是否等于0.text:00510475 test ecx, ecx.text:00510477 jnz short loc_51047B.text:00510479.text:00510479 loc_510479: ; CODE XREF: SerialCheck+463↑j.text:00510479 mov bl, 1.text:0051047B.text:0051047B loc_51047B: ; CODE XREF: SerialCheck+467↑j.text:0051047B mov ecx, [ebp+1FCh+encode_4].text:0051047E mov eax, 4D4873EDh.text:00510483 imul ecx.text:00510485 sar edx, 4.text:00510488 mov eax, edx.text:0051048A shr eax, 1Fh.text:0051048D add eax, edx.text:0051048F imul eax, 35h ; '5'.text:00510492 mov edx, ecx.text:00510494 sub edx, eax ; edx = encode_4 % 53;.text:00510496 jnz loc_5103F6 ; 判断序列号第四部分的加密的结果除于53取余是否等于0.text:0051049C test ecx, ecx.text:0051049E jz loc_5103F6.text:005104A4 test bl, bl.text:005104A6 jnz loc_5103F6 ; 判断bl是否等于1 也就是判断上⾯的验证是否都是正确的.text:005104AC push 8 ; Count.text:005104AE lea edx, [ebp+1FCh+RegisterSerialNumber].text:005104B4 push edx ; Source.text:005104B5 lea eax, [ebp+1FCh+ArgList].text:005104BB push eax ; Destination.text:005104BC call _strncpy ; 取出序列号的前⼋位```根据上⾯的代码逆向出序列号验证流程:* 1.获取注册的名字姓⽒邮箱序列号* 2.如果序列号的开头或结尾是空格的话就去掉空格* 3.把序列号转换成⼤写* 4.判断序列号的长度是否等于23(0x17),并序列号的第6位,第12位,第18位是否等于‘-’(0x2d)* 这⾥就可得出序列号的格式是`xxxxx-xxxxx-xxxxx-xxxxx`* 5.分别取出4部分的5位序列号`xxxxx`进⾏加密得到4个⽆符号数* 6.判断序列号是否正确,条件如下:* 第⼀部分的5位序列号加密后的⽆符号数除于43取余是否等于0* 第⼆部分的5位的序列号加密后的⽆符号数处于23取余是否等于0* 第三部分的5位的序列号加密后的⽆符号数处于17取余是否等于0* 第四部分的5位的序列号加密后的⽆符号数处于53取余是否等于0* 之后就是把注册信息写⼊到注册表和⽹络验证,这⾥不讨论在`text:0051039B`,`005103B4`,`text:005103CD`,`text:005103E6` 这4处调⽤的加密函数 IDA反汇编代码如下:```.text:0050F050 SerialEncrypt proc near ; CODE XREF: SerialCheck+38B↓p.text:0050F050 ; SerialCheck+3A4↓p ....text:0050F050.text:0050F050 arg_0 = dword ptr 4.text:0050F050 arg_4 = dword ptr 8.text:0050F050.text:0050F050 push esi.text:0050F051 mov esi, [esp+4+arg_4] ; esi = arg_4;.text:0050F055 push edi.text:0050F056 mov edi, [esp+8+arg_0] ; edi = arg_0;.text:0050F05A mov dword ptr [esi], 0 ; *esi = (4 byte)0x00;.text:0050F060 xor ecx, ecx ; ecx = 0.text:0050F062.text:0050F062 loc_50F062: ; CODE XREF: SerialEncrypt+3C↓j.text:0050F062 mov dl, [ecx+edi] ; dl = arg_0[ecx];.text:0050F065 xor eax, eax ; eax = 0;.text:0050F067.text:0050F067 loc_50F067: ; CODE XREF: SerialEncrypt+23↓j.text:0050F06F inc eax ; eax++;.text:0050F070 cmp eax, 24h ; '$'.text:0050F073 jl short loc_50F067 ; 判断eax是否⼩于36(0x24).text:0050F075.text:0050F075 loc_50F075: ; CODE XREF: SerialEncrypt+2D↓j.text:0050F075 pop edi.text:0050F076 xor eax, eax ; return 0;.text:0050F078 pop esi.text:0050F079 retn.text:0050F07A ; ---------------------------------------------------------------------------.text:0050F07A.text:0050F07A loc_50F07A: ; CODE XREF: SerialEncrypt+1D↑j.text:0050F07A cmp eax, 0FFFFFFFFh.text:0050F07D jz short loc_50F075 ; 判断eax是否等于-1(0xFFFFFFFF).text:0050F07F mov edx, [esi].text:0050F081 imul edx, 25h ; '%'.text:0050F084 add edx, eax.text:0050F086 inc ecx.text:0050F087 cmp ecx, 5.text:0050F08A mov [esi], edx ; *arg_0 = *arg_0 * 37(0x25) + eax;.text:0050F08C jl short loc_50F062 ; 判断eax是否⼩于5.text:0050F08E pop edi.text:0050F08F mov eax, 1 ; return 1;.text:0050F094 pop esi.text:0050F095 retn.text:0050F095 SerialEncrypt endp```### 对应的C++代码```const char kEnCode36[] = { 0x32, 0x59, 0x4F, 0x50, 0x42, 0x33, 0x41, 0x51, 0x43, 0x56, 0x55, 0x58, 0x4D, 0x4E, 0x52, 0x53,0x39, 0x37, 0x57, 0x45, 0x30, 0x49, 0x5A, 0x44, 0x34, 0x4B, 0x4C, 0x46, 0x47, 0x48, 0x4A, 0x38,0x31, 0x36, 0x35, 0x54 };int __cdecl sub_50e990(const char* serial_number, int* arg_4){*arg_4 = 0;for (int serial_number_count = 0; serial_number_count < 5; serial_number_count++) {int encode36_count = 0;while (kEnCode36[encode36_count] != serial_number[serial_number_count]) {encode36_count++;if (encode36_count >= 36) return 0;}if (encode36_count == 0XFFFFFFFF) return 0;*arg_4 = *arg_4 * 37 + encode36_count;}return 1;}```### 序列号分为4部分,每部分的5位序列号分别⽤sub_50e990加密.Encode36的内容为 `2YOPB3AQCVUXMNRS97WE0IZD4KLFGHJ8165T`实际上就是所有的字母和数字,sub_50e990函数的加密过程就是先把arg_4初始化为0,之后计算arg_4乘以37+当前序列号在Encode36的Count得到的结果赋值给arg_4在进⾏下⼀次计算.循环5次得到⼀个⽆符号数之后在进⾏相对应的整除判断。

IIS应用程序池由服务器引起常见错误号的原因分析及解决方法

IIS应用程序池由服务器引起常见错误号的原因分析及解决方法

IIS应用程序池由服务器引起常见错误号的原因分析及解决方法错误号:432错误描述:File name or class name not found during Automation operation错误来源:PE_Common6原因分析:服务器没有升级脚本引擎。

解决方法:升级服务器的IE 到6.0 以上版本,如果还不行,单独安装脚本解释引擎。

正在生成网站首页(/Index.htm )……错误号:-2147319779错误描述:Automation error Library not registered.错误来源:PE_Common原因分析:服务器的IE 版本过低。

解决方法:升级服务器的IE 到6.0 以上版本,如果还不行,单独安装脚本解释引擎。

错误号:-2147319779错误描述:Automation error Library not registered.错误来源:PE_CMS6原因分析:错误定义的应用程序或对象错误,可能是服务器的脚本解释引擎版本过低引起。

解决方法:安装脚本解释引擎。

数据采集错误错误号:7错误描述:Out of memory错误来源:PE_Common原因分析:PE_Common ,Out of memory ,内存溢出,这十分不好说,范围很广。

有可能:1 、采集的文章有日文片假名。

2 、内存不足。

也有可能一点,你的采集历史记录非常非常的庞大,因为采集是第一次全部读入内存减小对数据库频繁的检索量,历史记录和采集项目的资料太多了,内存不足解决方法:这和个人计算机有关,如果条件允许换个服务器看看,故障发生在内存。

在本地调试:增加一个频道后,就出现了这个错误错误号:-2147467259错误描述:不可识别的数据库格式'C:\Inetpub\wwwroot\PowerEasy\database\ ××.asp' 。

错误来源:Microsoft JET Database Engine原因分析:数据库损坏了。

序列号 密码生成破解方法

序列号 密码生成破解方法

序列号密码生成破解方法
关于序列号和密码生成的破解方法,这涉及到了计算机安全和破解技术,我希望强调的是,破解行为是非法的并且严重违反了法律。

在这里,我将从技术角度来说明一些可能被黑客用来破解序列号和密码的方法,但这并不是鼓励或支持任何非法行为。

1. 字典攻击,这是一种常见的破解密码的方法,黑客使用一个包含常见密码、词典中的单词和字符组合的列表,然后尝试每一个可能的组合,直到找到匹配的密码。

2. 暴力破解,黑客使用计算机程序自动尝试所有可能的密码组合,直到找到正确的密码。

这需要大量的计算能力和时间,但对于弱密码来说,仍然是一种有效的攻击方式。

3. 社会工程学,黑客可能会尝试通过欺骗、诱导或其他手段获取密码或序列号,这可能涉及到诈骗、钓鱼等方式。

4. 漏洞利用,黑客可能会利用软件或系统的漏洞来获取密码或序列号,这需要对系统漏洞的深入了解和技术能力。

为了保护个人和机构的信息安全,我们应该采取一些措施来防止密码和序列号被破解,比如使用强密码、定期更改密码、启用多因素认证、及时修补系统漏洞等。

同时,我们也要加强对安全意识的培训,提高对社会工程学攻击的警惕。

最重要的是,我们要遵守法律法规,不要参与任何形式的黑客攻击行为。

网上核销系统客户端出现序列号错误的解决办法 2010年2月开始很多

网上核销系统客户端出现序列号错误的解决办法 2010年2月开始很多

网上核销系统客户端出现序列号错误的解决办法2010年2月开始很多企业的网上核销客户端出现“序列号错误……”的提示,并且无法登录网上核销,离线登录也是同样的错误提示。

原因:由于企业端电脑上安装的杀毒软件将“出口收汇核销网上报审服务系统客户端”文件夹中的Decode.dll文件当作木马病毒删除了。

查看网上核销系统安装目录方法:桌面“出口收汇核销网上报审系统”图标点右键--属性--点“查找目标”--弹出的窗口就是网上核销系统的安装目录,默认安装的目录是:C:\Program Files\SAFE\出口收汇核销网上报审服务系统客户端。

可以在此查看Decode.dll文件是否已经被删除。

解决办法:恢复被误删除的Decode.dll文件或重新安装网上核销系统客户端。

先把杀毒软件及其文件监控关闭方法一:在杀毒软件的隔离区中恢复被删除的Decode.dll文件。

然后在杀毒软件中把此文件添加到可信任文件或添加到白名单中,否则会再次被当作病毒删除。

(有些杀毒软件设置不备份病毒文件的会直接删除,这时就不适合此方法)方法二:从另一台安装有网上核销系统的电脑上拷贝Decode.dll文件到网上核销系统安装目录。

可以用安装光盘在另一台电脑上安装一下网上核销系统(证书不用安装了),然后在安装目录下(查看安装目录方法见上面)拷贝Decode.dll文件到出现“序列号错误”的电脑上,粘贴在网上核销系统安装目录下。

然后在杀毒软件中把此文件添加到可信任文件或添加到白名单中,否则会再次被当作病毒删除。

方法三:重新安装网上核销系统。

最好在安装前把本企业的软件序列号找到,并且把网上核销系统的安装目录“出口收汇核销网上报审服务系统客户端”文件夹拷贝一份到其他地方进行备份。

重新安装好以后,把备份出来的文件夹中DBbak 文件夹拷回到新安装的网上核销系统中,登录后进行还原数据库操作。

然后在杀毒软件中把此文件添加到可信任文件或添加到白名单中,否则会再次被当作病毒删除。

怎样破解注册码

怎样破解注册码

一、准备好常用破解工具,1、查壳工具:PEiD 0.952、脱壳调试:OllyICE v1.10(俗称OD,可下载一些OD插件保存在程序文件目录下的plugin文件夹中,启动OD时会自动链接插件)3、Win32反汇编:WinHex14.2(本帖暂用不着)4、修复工具:ImportREC V1.6(本帖暂用不着)5、注册机编写:keymake二、壳的概念:壳就是软件的包装外壳。

三、脱壳:顾名思义,我就不多说了。

四、调试:用OD调试程序的进程,寻找关键(算法)CALL,修改有关汇编语言达到软件注册或破解的目的。

五、如果你是第一次学破解,我告诉你一个方法,只要你按如下操作一般都能成功(有的新版本软件除外):1、首先注册软件,查看软件弹出的有关注册失败的信息框的内容。

2、查壳:有壳脱壳,无壳用OD载入。

3、手动脱壳基本方法:从OD载入软件程序后弹出是否分析对话框,点“否”,停在程序壳的入口(含有pushad等类似字符)。

接下来我们的目的是要寻找第一个popad 。

(1)首先按F8,接下来或近处便是CALL,此时的CALL或是离这里很近的CALL必须按F7,否则你就掉入陷井,后面遇到CALL一旦掉入也没关系,你先记下来,重新载入程序(按CTRL+F2),再遇到这个时就用F7进入。

(2)出现往回跳转时,即红色线显示跳转实现,必须在下一行点左鍵,然后按F4步过,灰色为跳转未实现,可不理它照样F8。

(3)其他全部F8,一路下去必定能找到第一个popad,找到后离此不远必定有一个大的跳转,一旦跳转来到有push ebp字样,说明壳己走完到主程序(OEP),在此用OD插件→ollyDump→Dump debu…→Dump脱壳→保存。

4、破解:OD载入程序、点文件→打开→点击要破解的软件程序(无壳或己脱壳的)。

5、鼠标置左上(反汇编)窗口点右鍵,弹出框选项中选择ultra string reference(过激的字符串参考)中的Find ASCII。

bdvid参数 -回复

bdvid参数 -回复

bdvid参数-回复什么是bdvid参数?在互联网领域中,URL(统一资源定位符)是用于在网络上定位和检索资源的标识符。

URL通常由多个部分组成,其中一个重要的组成部分是参数(parameter)。

参数是在URL中用来传递额外信息的一种方式。

通过参数,我们可以向目标网页、应用程序或服务器传递指定的数值或者文本等内容,以便它们可以根据这些参数的值来进行特定的操作或者呈现不同的结果。

bdvid参数是百度网盘中的一个特殊的参数。

百度网盘是一个提供文件存储和共享服务的在线平台,用户可以上传、下载和管理文件。

在使用百度网盘时,我们常常会遇到包含bdvid参数的URL。

bdvid参数的作用是标识和指定在百度网盘中具体的文件或目录。

通过在URL中添加不同的bdvid参数值,我们可以直接跳转到指定的文件或目录,从而方便快速地访问和管理文件。

如何使用bdvid参数?要使用bdvid参数,首先需要获取文件或目录的bdvid值。

获取bdvid 值的方法有多种,这里将一步一步介绍两种常用的方法。

方法一:通过浏览器地址栏获取bdvid值1. 打开百度网盘并登录你的账号。

2. 定位到你所需的文件或目录的页面。

3. 在浏览器的地址栏中,可以看到URL的格式类似于4. 将bdvid的值复制或者记住,以便后续使用。

方法二:通过百度网盘的分享页面获取bdvid1. 在百度网盘中,选择你想要分享的文件或目录,并点击右键,选择分享。

2. 在分享页面中,可以看到URL的格式类似于3. 将bdvid的值复制或者记住,以便后续使用。

使用获取到的bdvid参数值,我们可以构建特定的URL来访问和管理文件。

例如,假设你获取到的bdvid值是abcdefghijk,那么你可以构建如下的URL来直接访问该文件或目录:通过在URL中添加bdvid参数值,你可以直接访问到指定的文件或目录,而不需要手动查找。

总结bdvid参数是百度网盘中用来标识和指定文件或目录的一个重要参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档