最近,因cute ftp v2.0 的注册机有病毒 害的很多人中毒, 我的好友 pank 也...唉! 我也有用cute ftp v2.0 ,是我朋友去抓的 他没抓 注册机 , 是抓别人以注册好的档案 所以我们没中毒,但是用别人的名字注册 不太满意,因此,靠着别人已注册好的档案 ^^^^^^^^^^^^^^^^^^^^^^ 才来破的,cute ftp 真的很麻烦 能独自破的人真的很厉害...我还要再加油. 好了,不说废话了...开始做 hacker 爱做的事吧 不要想歪了喔... (1)执行 cuteftp v2.0 ,去看about的画面 如果没注册,就是没注册的画面了 注册好了,就写上名字了 按 ctrl-d 进入 winice, 下 bpx lockmytask ( 收窗拦截法 ) 按 F5 返回 win95,按下确定 (2) 会被winice 拦住, 下 bc* 按数下F12,到了cuteftp 的程式码时 也就是到了 cs:00448a26 pop esi 按几下 F10,到了 cs:0044c33d jmp 0044c3fb 看来是从上一行的call 进入了,就对它设断 下 bpx 0044c33a , 按 F5 返回 win95 再重新看一次 about (3)会被 winice 拦住,在 cs:0044c33a的地方 按 F8进入,按数下F10 , 到了 cs:00410a40 call xxxxxxxx 按F8进入,到了 cs:00401058 call xxxxxxx 按F8进入,到了 cs:004119FB LEA EAX,[ESP+10] 下 d eax 可看到 cuteftp.key 可知,程式是要找 cuteftp.key了 (4)再继续 trace,吧,按几下F10,到了 cs:00411A5A CALL 00436470 按F8进入, cs:00436470 CALL 00439DA0 cs:00436475 MOV ECX,[EAX+14] 下 d eax+14 所看的是 00 00 而这正是 cuteftp.key的最後两个byte cuteftp.key 只有16byte 但为何在他旁边看不到其他byte? 这我就不知道了, 是我後来试出来的 在此,就对cuteftp.key读进来做运算了 是 00 00 比较好,和後来做注册机有关 是其他byte也应该可以,不过我没试过 从 cs:00411A5A CALL 00436470 出来之後 到了 cs:00411a5F mov bl,al 此时al 是 26 比较好...因我手头的档案就是如此 (5) 到了 cs:00411A61 CALL xxxxxxxx (这个 call 以後也会呼叫到喔) 按F8进入,到了 014F:00436470 CALL 00439DA0 014F:00436475 MOV ECX,[EAX+14] 014F:00436478 LEA EDX,[ECX*2+ECX] 014F:0043647B LEA EDX,[EDX*4+ECX] 014F:0043647E SHL EDX,04 014F:00436481 ADD EDX,ECX 014F:00436483 SHL EDX,08 014F:00436486 SUB EDX,ECX 014F:00436488 LEA ECX,[EDX*4+ECX+00269EC3] 014F:0043648F MOV [EAX+14],ECX 014F:00436492 MOV EAX,ECX 014F:00436494 SHR EAX,10 014F:00436497 AND EAX,00007FFF 014F:0043649C RET 出来之後 (6) 014F:00411A66 MOVSX BX,BL ; 此时 BL=26 比较好, 014F:00411A6A MOVSX CX,AL ; 此时 AL=27 比较好, 014F:00411A6E SHL EBX,08 014F:00411A71 ADD EBX,ECX 014F:00411A73 MOV ECX,[ESP+12] ; 把 cuteftp.key 第三,第四,第五,第六 byte读进来 ; 可是 ... 好像跟 第三,第四才有关系,不太确定 ; 是我是出来的结果 014F:00411A77 XOR EBX,ECX 014F:00411A79 XOR EBP,EBP 014F:00411A7B CMP EDI,04 014F:00411A7E JLE 00411AA2 014F:00411A80 XOR ESI,ESI 014F:00411A82 CALL 00436470 ; 这个刚才也有呼叫过,我写在上面...看到了吧 014F:00411A87 MOV CL,[ESI+ESP+14] ; 把 cuteftp.key 第五之後的 byte读进来 014F:00411A8B XOR CL,AL ;产生name 了 014F:00411A8D MOVSX DX,CL ;搬给 dx 014F:00411A91 MOV [ESI+ESP+0000010C],CL ; 把 name 搬到这个地方...准备等一下要输出的 014F:00411A98 ADD EBP,EDX ;把每次产生的name相加起来 014F:00411A9A INC ESI 014F:00411A9B LEA EAX,[ESI+04] 014F:00411A9E CMP EAX,EDI ; edi= 10 ,可知有cuteftp.key 16 byte ;但第一此走到这边,eax=5 014F:00411AA0 JL 00411A82 ;不等於,就跳回去继续运算... 014F:00411AA2 CMP BP,BX ; 比较是不是一样,不一样就跳开了,也就注册失败了 014F:00411AA5 MOV BYTE PTR [EDI+ESP+00000108],00 014F:00411AAD JNZ 00411AF0 (7) 大家已知道程式运算大概的流程了吧 问题是, 从 cs:014F:00411A82 CALL 00436470 出来的eax 是什麽?因为要和 cuteftp.key来 xor 我观察过了 只要 cuteftp.key 的第一,第二,最後,倒数第一的 byte 都是 00,那出来的 AL 就有规律 我按照第一次开始排喔... AL=F6 85 97 15 AD 1D D2 94 DD C4 所以要写注册机,只要先令使用者输入 name 然後个别去跟上面的数去 xor 就行了 缺点是,只能输入10 个字而已,我想应该是能输入16个字吧 但还要再分析,懒得再分析了 cuteftp.key 共有 16 byte 第一,第二,最後,倒数第一的 byte 都是00 第三,第四是 name 的 ASCII 加上8FH (这是我观察出来的) 第五到第十四个byte 是由 name 产生的 就是这样啦