新手破解练习Crackme160之094 - JuNkLe-Serial
这个程序是NE格式的无法在32位以上机器运行, 复制到xp中可以运行
我们用ida反编译分析一下, 搜索文本"Enter Your"很快就在cseg01:007B 行看到了,
cseg01:0058 PROGRAM proc near
cseg01:0058 call INITTASK
cseg01:005D call @__SystemInit$qv ; __SystemInit(void)
cseg01:0062 call @__WinCrtInit$qv ; __WinCrtInit(void)
cseg01:0067 push bp
cseg01:0068 mov bp, sp
cseg01:006A xor ax, ax
cseg01:006C call @__StackCheck$q4Word ; Stack overflow check (AX)
cseg01:0071 call @ClrScr$qv ; ClrScr(void)
cseg01:0076 mov di, offset unk_2456
cseg01:0079 push ds
cseg01:007A push di
cseg01:007B mov di, offset aEnterYourGiven ; "Enter Your Given Serial Nr = "
cseg01:007E push cs
cseg01:007F push di
cseg01:0080 push 0
cseg01:0082 call @Write$qm4Textm6String4Word ; Write(var f; s: String; width: Word)
cseg01:0087 call @WriteLn$qm4Text ; WriteLn(var f: Text)
cseg01:008C call @__IOCheck$qv ; Exit if error
cseg01:0091 mov di, offset unk_2356
cseg01:0094 push ds
cseg01:0095 push di
cseg01:0096 call @Read$qm4Text4Real ; Read(var f; var v: Real{DX:BX:AX})
cseg01:009B mov word_2286, ax
cseg01:009E mov word_2288, bx
cseg01:00A2 mov word_228A, dx
cseg01:00A6 call @ReadLn$qm4Text ; ReadLn(var f: Text)
cseg01:00AB call @__IOCheck$qv ; Exit if error
cseg01:00B0 mov ax, word_2286
cseg01:00B3 mov bx, word_2288
cseg01:00B7 mov dx, word_228A
cseg01:00BB xor cx, cx
cseg01:00BD xor si, si
cseg01:00BF xor di, di
cseg01:00C1 call @__Cmp$q4Realt1 ; Compare two reals
cseg01:00C6 ja short loc_F2
cseg01:00C8 mov di, offset unk_2456
cseg01:00CB push ds
cseg01:00CC push di
cseg01:00CD mov di, offset aFuckYouFucking ; "Fuck, you fucking did it"
cseg01:00D0 push cs
cseg01:00D1 push di
cseg01:00D2 push 0
cseg01:00D4 call @Write$qm4Textm6String4Word ; Write(var f; s: String; width: Word)
cseg01:00D9 call @WriteLn$qm4Text ; WriteLn(var f: Text)
cseg01:00DE call @__IOCheck$qv ; Exit if error
cseg01:00E3 mov di, offset unk_2356
cseg01:00E6 push ds
cseg01:00E7 push di
cseg01:00E8 call @ReadLn$qm4Text ; ReadLn(var f: Text)
cseg01:00ED call @__IOCheck$qv ; Exit if error
cseg01:00F2
cseg01:00F2 loc_F2: ; CODE XREF: PROGRAM+6Ej
cseg01:00F2 mov ax, word_2286
cseg01:00F5 mov bx, word_2288
cseg01:00F9 mov dx, word_228A
cseg01:00FD mov cx, 81h ; '
cseg01:0100 xor si, si
cseg01:0102 xor di, di
cseg01:0104 call @__Cmp$q4Realt1 ; Compare two reals
cseg01:0109 jb short locret_135
cseg01:010B mov di, offset unk_2456
cseg01:010E push ds
cseg01:010F push di
cseg01:0110 mov di, offset aNopeWrongSeria ; "Nope Wrong Serial M..... ....."
cseg01:0113 push cs
cseg01:0114 push di
cseg01:0115 push 0
cseg01:0117 call @Write$qm4Textm6String4Word ; Write(var f; s: String; width: Word)
cseg01:011C call @WriteLn$qm4Text ; WriteLn(var f: Text)
cseg01:0121 call @__IOCheck$qv ; Exit if error
cseg01:0126 mov di, offset unk_2356
cseg01:0129 push ds
cseg01:012A push di
cseg01:012B call @ReadLn$qm4Text ; ReadLn(var f: Text)
cseg01:0130 call @__IOCheck$qv ; Exit if error
从上面代码可以看到 输入的数需要对比
cseg01:00B0 mov ax, word_2286
cseg01:00B3 mov bx, word_2288
cseg01:00B7 mov dx, word_228A
这三个数应该就是关键所在了, 双击word_2286可以跳转到其定义处
dseg03:00E5 db 0Ah
dseg03:00E6 word_2286 dw 0 ; DATA XREF: PROGRAM+43w
dseg03:00E6 ; PROGRAM+58r ...
dseg03:00E8 word_2288 dw 0 ; DATA XREF: PROGRAM+46w
dseg03:00E8 ; PROGRAM+5Br ...
dseg03:00EA word_228A dw 0 ; DATA XREF: PROGRAM+4Aw
dseg03:00EA ; PROGRAM+5Fr ...
dseg03:00EC unk_228C db 0 ; DATA XREF: InitWinCrt(void)+14o
dseg03:00EC ; unknown_libname_27:loc_F34o ...
可以看到这三个数都是0, 那我们就看一下注册码是不是就是3个0?
我们输入验证, 完成正确, 再试了一下, 不管输入几个0也是对的~ 具体算法没看太明白, 就这么稀里糊涂的破解了~ 因为OD无法调试, 也这么着了吧_
1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号