能力值:
( LV2,RANK:10 )
126 楼
Plugin 是插件,在 OD 上方第 4 粒按钮
Command line 是命令列,给你输入 OD 指令的地方 我的plugin下面没有command line,在哪里啊?
能力值:
( 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?
能力值:
( 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.
能力值:
( LV2,RANK:10 )
129 楼
还是看不懂,
反汇编的语言完全看不明白啊
哪位大虾告诉下,要怎么学
有资料提供就更好了
能力值:
( LV2,RANK:10 )
130 楼
我去年暑假的时候看这些也是看不懂,学了断时间放弃了,只会照葫芦画瓢,完全不明白什么意思,最近把汇编猛啃了段时间,再来看这些,轻松多了。所以我觉得汇编是最重要的,
能力值:
( LV2,RANK:10 )
131 楼
请教下 汇编是要怎么学的 自学要学多久 能提供资料最好
能力值:
( LV2,RANK:10 )
132 楼
楼上很多人出错了 我不知道原因 因为我也刚用到这个软件(也可以作者的文章太早了 ,我现在用的软件找出的有点出入)
我用OD的时候也没有commandline 就用查找 所有模块中的名称
下断 messageboxa 有两个吧
然后F9执行 只要你下断正确 就不要关在哪里 然后CRTL+F9跳回到可以修改的软件本身(领空) 向上找到 第一个JNZ就是关键的调转
也可能我说的不正确 说错了 请大家指正 谢谢
能力值:
( LV2,RANK:10 )
133 楼
各位大虾,
PlugInt 下没有 CommandLine啊
谁能给我详细讲一下,谢谢
能力值:
( 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
能力值:
( 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);
}
实话说即便看了破文还有大量的代码并不清楚做什么用的.
能力值:
( LV2,RANK:10 )
136 楼
??riijj大大真:
这句 TEST EAX,EAX 是检查 EAX 是否等于 0 的典型语句,假如 EAX 不等于 0,JNZ 便会跳。我们就是不想它跳,所以我们要找出让 EAX 等于 0 的条件。在 TEST 的上方是 CALL ncrackme.00401230,这个 CALL 的返回值就是 EAX 的值。
??你怎?知道call的返回值就是eax?
是一定就是上面那行?? ?是你怎?看出?的?
能力值:
( LV2,RANK:10 )
137 楼
虽然说是老贴,800多天了,
但这是一个好贴子,今天就从这里学起吧!
能力值:
( LV4,RANK:50 )
138 楼
受教了.顶...................
能力值:
( LV2,RANK:10 )
139 楼
算了了一个
name:todcqy
sn:PWUZEH
但是算法看不懂。看来我的汇编还是不行啊。
能力值:
( LV2,RANK:10 )
140 楼
谢谢搂住大作
能力值:
( LV4,RANK:50 )
141 楼
支持下,很适合我这种菜菜!
能力值:
( LV2,RANK:10 )
142 楼
认真地学习了一下。
能力值:
( LV4,RANK:50 )
143 楼
恩,写的很不错。支持!
能力值:
( LV2,RANK:10 )
144 楼
支持!好文,受益了!
能力值:
( LV2,RANK:10 )
145 楼
对于新手来说永远都有学习价值的!谢谢楼主了!
能力值:
( LV2,RANK:10 )
146 楼
Good!!
能力值:
( LV2,RANK:10 )
147 楼
写地很好,强烈支持!
能力值:
( LV3,RANK:30 )
148 楼
00401310 |. 99 |CDQ
00401311 |. 33C2 |XOR EAX,EDX
在OD中验证,并非是求绝对值,而是绝对值少1,例如,-5会变成4
你可以用OD打开记事本notepad.exe,把以上两行输入,然后改变eax为任一负数试试
能力值:
( LV2,RANK:10 )
149 楼
good~~~~~~~~~~~~~
能力值:
( LV4,RANK:50 )
150 楼
哈哈 我也会追算法了
太NB了