= 22、Gif gif gif ========================================================== Gif gif gif Error Free wrote: > > Gif gif gif > > 这个 ggg 可爱可爱的, 相信你们手上也都有了吧! 这咧 "死孩子补" > 居然强迫取分? 不过他也太好运了, 好在我有找到重点, 让他给得逞了 > . 下次不可以哦~ ... :) > > 1.用 wice 辑载入 95 . > 2.执行 ggg , 选择注册, 打下大名 > 3.注册号码先填 78787878. > 4.按 Ctrl-D , 进入 s-ice, > 5.用 S 30:0 L FFFFFFFF '78787878' > > 此时 sice 会搜到一个位址 30:004xxxxx . 唉! 以前不是都搜到 > :8xxxxxxx 吗? 怎么这一次会搜到 004xxxxx ?? > > 管它的, 按照 hacker 以往的习性, 就在按一次 s 试之! 果然搜 > 到另一个位址 :8xxxxxxx. 常常用这个 :8xxxxxxx 来追也蛮烦的 > , 这次就换一条新路走走看.. > > 6.用 bpm 30:4xxxxx 设断, 压 F5 返回 ggg . > 7.按下 ok 後, 会被 sice 拦下来, 如下: > > 14F:BFF780DC MOV [EAX+08],ESI ; <- 在此拦下. > MOV [ESI+08],EDX > MOV [EDX+04],ESI > > --- KERNEL32! --- > > 8.按 F12 几下就到 ggg 的领空了, 如下: > > 14F:4358F4 CALL 4504EC > POP EDI ; <- 刚到时在此. > POP EBP > --- GGG! --- > > 9.若己进入射程范围, 接下我通常会按 F10 开始走. > > 通常要 hack (砍) 掉一个保护时, 你必须先了解原程式的走向; 用 > F12 往往会跳的太快, 比较不容易看清楚程式是怎么走的. 必竟现在 > 已经登陆了, 还是小心一点好. > > 走走走, 不久你就会走到.... > > 14F:00410F70 CALL 0043E26D > ADD ESP,P4 ; <- 你会跳回至此 > : : > ### CALL 00410C52 ; <- 可能有问题, > ADD ESP,08 > *** TEST AL,AL ; 强迫 AL=1 似乎没什么事 > JZ 00410FA1 ; 若是 0, 就注册失败了. > : : > 14F:00410F9F JMP 00410FD1 ; 跳开 > 14F:00410FA1 PUSH 38 > : : > 14F:00410FC9 CALL 0041E8E1 ; <-这里会跳出讯息的背框, 大 > ADD ESP,1C ; 小和 "失败窗" 一样, 因此 > : : ; 暂时猜测至此就危险了. > > 这个地方和通`的情况不太一样, 因为在 *** 那里时, 若令 AL=1 > 并不会发生什么事, 只是会把注册窗收掉而已; 但若令 AL=0 就必定 > 失败. 手上没线其他线索, 所以只能用 F8 , 进入那个 "可能有问题 > " 的 ### CALL . > > 10.好吧! 那我们就进去看看吧! 如下: > > : : : > 14F:410C5D CALL 00410A40 ; <- 要害在此, 进去观摩一下. > ADD ESP,08 > MOVZX EAX,AL > TEST EAX,EAX ; <- 再做一次实验, 令 EAX=1 > JNZ 00410C70 ; 居然注册成功.* > XOR AL,AL ; <- 在此又让 AL 填 0 了.* > JMP 00410CA4 > > 有 "注册成功" 样子 (想当 hacker-乱砍者, 就自己找, 看看画面的 > 那里有注册成功的痕迹) , 那 410C5D 那个 CALL 保证有问题, 而且 > 问题可大了..呵呵! 这下子总部, 即在不远的前方.. > > 11.用 F8 进入 410C5D 那个 CALL . 如下:* > > : : > 14F:00410A4A CALL 00420785 > ADD ESP,04 > CMP EAX,10 ; 这个 10 ? > JZ 00410A5B > XOR AL,AL ; 若让 CPU 走至此, 会 AL=0 > JMP Return_Ready ; 返回, 那就完蛋了. > : : > > 举例了那么多次的范例给你们看, 我倒要看看你们的樵夫触机 (Hacker > Sense ) 有没有变的更灵敏? > > 在 CMP EAX,10 那行停下来, 看看此时的 EAX 为 8, 你们有没有联想 > 到什么? 试著猜猜看....哎啊! 再想想看! ....有人说啦! 对对对, 没 > 错! 很可能就是注册号码的字数. > > 不过推断并不一定等於事 因为程式不是你写的, 所以一定要求证看 > 看, 这样比较不会被先入为主的观念套死, 而困在这个恐怖的迷宫中. > 很多保护砍不掉, 通常就是 "太靠势" . > > 实验很简单, 用 BD * 暂停以前的断点, 在 CMP EAX,10 那一行设断, > 从新注册, 注册码填随便填两三个字, 按 OK , 当被 sice 拦下来时, > 看一下 EAX 是不是你刚刚打字数. 对了! 可不要再打同样的字数 8, > 否则若运气不好, 这下子你就追惨了.* > > 12.好! CMP EAX,10 那个 10 就是十进位的 16 嘛! 刚刚那个断点还要 > 用, 按 F5 返回重新注册, 注册码暂时打 16 个数字. 按下 OK ! 被 > sice 拦下在刚设断的地方, 此时你就继续用 F10 慢慢走, 分析一 > 下此戒备森严的路程. 走到.... > > OK! 在谈之前, 我们必须再回忆一下我们主要的任务到底是什么? 不然 > 你来这边干嘛? 我们要分析此 Routine, 在什么条件下执行完毕时, 不 > 会让 AL=0 返回. > > : : : > 14F:00410A7A CALL 004108BB ; <- 依下看, 此 CALL 很有看头. > ADD ESP,08 > PUSH ESI > MOV [EBP-10],AL ; 把 AL 存起来, > CALL 004208CD ; 先假设此 CALL 对返回的 AL 无关 > ADD ESP,04 > MOV AL,[EBP-10] ; 把 AL 提回来 > POP ESI > POP EDI > LEAVE > RET ; <- 这个就是 x86 ASM 的 Return 指令哦! > > 求证一下第二个 CALL 与 AL 是否於返回的 AL 值无关; 在 [EBP-10],AL > 那一行之前, 令 AL=1 就知道, 自己实验试之. > > 13.用 F8 再进入 410A7A 个行 CALL , 按 F10 没多久就... > > : : > 14F:0041954 MOV EDX,0046009C > MOVZX EAX,BYTE[EDX+EAX] > MOV AL,[EAX+EDI] ; 拿一个 Byte > CMP AL,[EBP-14] ; 比较一个 Byte > JZ $Next ; 相等就比较下一个 > > XOR AL,AL ; <- 这个是令 AL=0 的指令. > JMP Return_Ready ; 在此返回就... > > $Next INC SI ; 指标 + 1 > CMP SI,05 ; 比较 5 次 > JB 004108F6 ; 小於就跳到前面准备继续比 > MOV AL,01 ; <- 有没有看到 AL=1 > : : > > 哇! 这里就是比较的核心了, 可惜啊! 这里的被比较之两个值, 居然是 > 被运算过的, 我懒的再分析前面的运算式了, 你们就看著办吧! > > 重点已经告诉你们了, 要玩就自己想办法! 好, 下课! 等一下! 那位同 > 学, 再把你隔壁那个摇起来..... O.K ! 下课... > -- > 喜欢破解注册资料者, 请接如下 Group, 保证让你一路爽到底 > alt.crackers alt.cracks alt.binaries.warez.ibm-pc