首页
社区
课程
招聘
[原创]riijj Crackme (1) 的详解
发表于: 2004-11-26 11:57 218412

[原创]riijj Crackme (1) 的详解

2004-11-26 11:57
218412
收藏
免费 7
支持
分享
最新回复 (267)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
126
Plugin 是插件,在 OD 上方第 4 粒按钮
Command line 是命令列,给你输入 OD 指令的地方

我的plugin下面没有command line,在哪里啊?
2006-7-21 20:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
127
00401072   . 75 1B          JNZ SHORT ncrackme.0040108F              ; |
00401074   . A1 B8564000    MOV EAX,DWORD PTR DS:[4056B8]            ; |
00401079   . 68 64504000    PUSH ncrackme.00405064                   ; |Text = "Registration successful."
0040107E   . 50             PUSH EAX                                 ; |hOwner => 001C0218 ('Newbie smallsize crackme -

v1',class='myWindowClass')

把JNZ改成JZ,是不是在WINHEX中将1B前面的75换成74?
2006-8-12 21:11
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
128
新手初学,研究了半夜,把注册机写出来了,关键部分基本照搬。也没有注释,不过第一次能这样,感觉很有成就感,所以就贴出来了,由于不能发附件,只能贴代码了,自己写的代码部分很乱,大家不要骂我。
用的delphi7,
两个控件,edit1 和 edit2,和一个command按钮
按下generate后:代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
cnt:integer;
name:array[1..18] of char;
tp:string;
ser:string;
I:integer ;
NUM:integer;
SPC:array[1..15] of char;
begin

  tp := String(Form1.Edit1.Text);
  cnt := StrLen(PChar(tp));
  for I := 1 to cnt do
    name[I] := tp[I];
  if cnt<3 then
    Application.MessageBox('number of character must be more than 2','Warning')
  else
  asm
    LEA EBX,name
    MOVSX EAX,BYTE PTR [EBX]
    MOVSX ECX,BYTE PTR [EBX+1]
    CDQ
    IDIV ECX
    MOV ECX,EDX
    XOR EAX,EAX
    SUB EAX,1
    MOVSX EDX,BYTE PTR [EBX+2]
    IMUL ECX,EDX
    INC ECX
    XOR EDX,EDX
    DIV ECX
    MOV NUM,EAX
    XOR ESI,ESI

@@1:
    CALL @P1
    CDQ
    MOV ECX,1AH
    IDIV ECX
    ADD DL,41H
    MOV BYTE PTR  [SPC+ESI],DL ;照搬的原代码,发现没什么用,所以后来把SPC用作别的用途了
    INC ESI
    CMP ESI,0FH
    JB @@1

    MOV ECX,CNT
    XOR ESI,ESI
@@2:
    MOV AL,BYTE PTR [EBX+ESI]
    SAR AL,5H
    MOVSX EAX,AL
    LEA EDX,DWORD PTR DS:[EAX+EAX*4]
    LEA EAX,DWORD PTR DS:[EAX+EDX*8]
    LEA EAX,DWORD PTR DS:[EAX+EAX*2]

    MOV  EDI,EAX
@@3:
    CALL @P1
    DEC EDI
    JNZ @@3

    CALL @P1

    CDQ
    MOV ECX,1AH
    IDIV ECX
    ADD DL,41H
    MOV BYTE PTR  [SPC+ESI], DL
    INC ESI
    CMP ESI,CNT
    JL @@2
    JMP @@4
@P1:
    MOV EAX,NUM
    IMUL EAX,EAX,343FDH
    ADD EAX,269EC3H
    MOV NUM,EAX
    SAR EAX,10H
    AND EAX,7FFFH
    RET
@@4:
  end;
  FORM1.Edit2.Text := copy(STRING(SPC),1,cnt);
end;

end.
2006-8-17 04:45
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
129
还是看不懂,
反汇编的语言完全看不明白啊
哪位大虾告诉下,要怎么学
有资料提供就更好了
2006-8-17 11:57
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
130
我去年暑假的时候看这些也是看不懂,学了断时间放弃了,只会照葫芦画瓢,完全不明白什么意思,最近把汇编猛啃了段时间,再来看这些,轻松多了。所以我觉得汇编是最重要的,
2006-8-17 12:33
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
131
请教下 汇编是要怎么学的 自学要学多久 能提供资料最好
2006-8-18 10:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
132
楼上很多人出错了 我不知道原因  因为我也刚用到这个软件(也可以作者的文章太早了 ,我现在用的软件找出的有点出入)

我用OD的时候也没有commandline  就用查找 所有模块中的名称

下断 messageboxa 有两个吧

然后F9执行   只要你下断正确  就不要关在哪里 然后CRTL+F9跳回到可以修改的软件本身(领空)  向上找到 第一个JNZ就是关键的调转

也可能我说的不正确  说错了 请大家指正  谢谢
2006-8-29 15:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
133
各位大虾,
PlugInt 下没有 CommandLine啊
谁能给我详细讲一下,谢谢
2006-9-16 00:02
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
134
我们要返回 crackme 的领空里,有几个方法

1. 不停接 F8 ,一步一步地执行直至程序遇上 retn ,这是返回指令,它会带我们回去
2. 按 Ctrl + F9 ,这样 OD 会不停执行,直至遇到 retn 停下
3. 按一下返回的 retn ,再按 F4 ,程序会执行到光标所在的地方
4. 打开 OD 的 call stack window,看看我们从那里飞来,便设一个断点在那地方,之后 F9 运行

___________________________________________________________

这个地方到不了楼主说的那个地方。。。。。

OD里有f4这个快捷键吗??od 8.93
2006-10-1 22:48
0
雪    币: 148
活跃值: (25)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
135
int v_arand = 0;
DWORD callrand()
{
        DWORD rCall = v_arand;
        rCall *= 0x343fd;
        rCall += 0x269ec3;
        v_arand = rCall;
        rCall >>= 0x10;
        rCall &= 0x7FFF;

        return rCall;
}

void reg()
{
        char name[20];
        char regtmp[20];
        memset(regtmp, 0, 20);
        strcpy(name, "coolstar1980");
        v_arand = 0xFFFFFFFF/(1+(name[0]%name[1])*name[2]);

        for (int i = 0; i < 15 ; i++)
                callrand();
        int iSn = 0;
        int iBase = 0;
        int iesi = 0;
        INT X, Y;
        while(iesi < strlen(name))
        {
                X =  (name[iesi] >> 5);
                Y = X + (X * 4);
                X = X + (Y * 8);
                X = X + (X * 2)   ;
                while(X > 0)
                {
                        iBase = callrand();
                        X --;
                }
                iBase = callrand();
                regtmp[iSn++] = (iBase%0x1a)+'A';

                iesi ++;
        }
        printf("regtmp %s\n", regtmp);
}

实话说即便看了破文还有大量的代码并不清楚做什么用的.
2006-12-27 17:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
136
??riijj大大真:
这句 TEST EAX,EAX 是检查 EAX 是否等于 0 的典型语句,假如 EAX 不等于 0,JNZ 便会跳。我们就是不想它跳,所以我们要找出让 EAX
等于 0 的条件。在 TEST 的上方是 CALL ncrackme.00401230,这个 CALL 的返回值就是 EAX 的值。


??你怎?知道call的返回值就是eax?
是一定就是上面那行?? ?是你怎?看出?的?
2007-3-3 18:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
137
虽然说是老贴,800多天了, 但这是一个好贴子,今天就从这里学起吧!
2007-3-29 17:18
0
雪    币: 244
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
138
受教了.顶...................
2007-4-3 17:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
139
算了了一个
name:todcqy
sn:PWUZEH
但是算法看不懂。看来我的汇编还是不行啊。
2007-4-9 22:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
140
谢谢搂住大作
2007-4-28 11:25
0
雪    币: 244
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
141
支持下,很适合我这种菜菜!
2007-4-28 14:19
0
雪    币: 697
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
142
认真地学习了一下。
2007-5-29 18:40
0
雪    币: 212
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
143
恩,写的很不错。支持!
2007-6-16 00:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
144
支持!好文,受益了!
2007-6-29 09:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
145
对于新手来说永远都有学习价值的!谢谢楼主了!
2007-6-30 17:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
146
Good!!
2007-7-1 01:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
147
写地很好,强烈支持!
2007-7-1 20:24
0
雪    币: 324
活跃值: (57)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
148
00401310  |. 99             |CDQ         
00401311  |. 33C2           |XOR EAX,EDX
在OD中验证,并非是求绝对值,而是绝对值少1,例如,-5会变成4
你可以用OD打开记事本notepad.exe,把以上两行输入,然后改变eax为任一负数试试
2007-7-5 01:19
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
149
good~~~~~~~~~~~~~
2007-7-9 19:19
0
雪    币: 240
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
150
哈哈   我也会追算法了   
太NB了
2007-8-7 09:45
0
游客
登录 | 注册 方可回帖
返回
//